Django step by step学习笔记

受不了x软的工作了,开始学习Django1.2。记下知识点。

  1. Django1.2版有些不同。对于post请求,工程配置文件settings.py中的MIDDLEWARE_CLASSES 中需要加入中间件'django.middleware.csrf.CsrfResponseMiddleware'
  2. 一般地,django.shortcuts包中提供了封装好的渲染html模板的方法render_to_response:
    from django.shortcuts import render_to_response
    def index(request):
          return render_to_response('list.html',{'addr':address})
     如果需要对response做特殊处理,那么就需要手动渲染模板:
    from django.template import loader, Context
    from django.http import HttpResponse
    
    def csv(request, filename):
        response = HttpResponse(mimetype='text/csv;')
        response['Content-Disposition'] = 'attachment; filename=%s.csv' % filename
        t = loader.get_template('csv.html')
        c = Context({
            'data': address,
        })
        response.write(t.render(c))
        return response 
    
  3. Django的session功能需要数据库支持,因此需要在settings.py中配置好数据库:
    DATABASES = {
        'default': {
            'ENGINE': 'sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': './data.db',                      # Or path to database file if using sqlite3.
            'USER': '',                      # Not used with sqlite3.
            'PASSWORD': '',                  # Not used with sqlite3.
            'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        }
    }
     然后运行manage.py syncdb创建数据库。
  4. urls.py文件控制地址分发。Django的配置文件本身就是.py类型的python文件,完全按照python的语法书写。url使用正则表达式描述,有需要的话可以从url中提取参数。比如:
    urlpatterns = patterns('',
        (r'^csv/(\w+)/$', 'list.csv'),
    )
     这样,比如地址是"/csv/filename/",那么"filename"就会被提取出来作为list.csv方法的第二个参数(第一个参数是request)。但是这样书写,参数是按出现的位置依次提取的。如果想指定参数名,可以这样:
    urlpatterns = patterns('',
        (r'^csv/(?P<filename>\w+)/$', 'list.csv'),
    )
     这样,list.csv中就可以使用命名参数filename。
  5. 工程目录下的urls.py可以将请求转发给应用目录下的urls.py进行处理:
    urlpatterns = patterns('',
       (r'^address/', include('address.urls')),    #地址只匹配开头,所以不以"$"结尾。地址剩下的部分交由address下的urls.py继续匹配
    )
    
     
  6. 超级用户可以在第一次运行"manage.py syncdb"时创建,也可以在之后运行manage.py createsuperuser命令。
  7. models.py中的model默认不被admin模块管理,这里要注册一下要被管理的模块。在应用目录下创建“admin.py”文件:
    from django.contrib import admin
    from tdp.address.models import Address
    
    admin.site.register(Address)    #注册Address,这样才可以用admin模块管理
  8. "manage.py reset APP_NAME"可以将应用"APP_NAME"下model中的变化同步到数据库中,但是会清除已有数据。
  9. 使用Generic views模块可以省略掉view。
    from django.conf.urls.defaults import *
    from tdp.address.models import Address
    
    info_dict = {
    #    'model': Address,
        'queryset': Address.objects.all(),
    }
    urlpatterns = patterns('',
        (r'^/?$', 'django.views.generic.list_detail.object_list', info_dict),
    )
    
     使用object_list,默认查找的模板是“app_label/model_name_list.html”。即应用目录下,名称是model名+"_list.html"的文件。
  10. 自定义模板过滤器。在应用目录下创建过滤器文件 templatetags/ change_gender.py。装载过滤器时需要用到这个文件名“{% load change_gender %}”。change_gender.py内容参考:
    #coding=utf-8
    from django import template
    
    register = template.Library()
    
    #@register.filter(name='change_gender')
    def change_gender(value):
        if value == 'M':
            return '男'
        else:
            return '女'
    
    register.filter('decode_gender', change_gender)
     新版本python可以使用注解方式。使用过滤器时,名称是decode_gender。

你可能感兴趣的:(django,python,正则表达式,配置管理,PostgreSQL)