受不了x软的工作了,开始学习Django1.2。记下知识点。
- Django1.2版有些不同。对于post请求,工程配置文件settings.py中的MIDDLEWARE_CLASSES 中需要加入中间件'django.middleware.csrf.CsrfResponseMiddleware' 。
- 一般地,django.shortcuts包中提供了封装好的渲染html模板的方法render_to_response:
如果需要对response做特殊处理,那么就需要手动渲染模板:from django.shortcuts import render_to_response def index(request): return render_to_response('list.html',{'addr':address})
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
- Django的session功能需要数据库支持,因此需要在settings.py中配置好数据库:
然后运行manage.py syncdb创建数据库。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. } }
- urls.py文件控制地址分发。Django的配置文件本身就是.py类型的python文件,完全按照python的语法书写。url使用正则表达式描述,有需要的话可以从url中提取参数。比如:
这样,比如地址是"/csv/filename/",那么"filename"就会被提取出来作为list.csv方法的第二个参数(第一个参数是request)。但是这样书写,参数是按出现的位置依次提取的。如果想指定参数名,可以这样:urlpatterns = patterns('', (r'^csv/(\w+)/$', 'list.csv'), )
这样,list.csv中就可以使用命名参数filename。urlpatterns = patterns('', (r'^csv/(?P<filename>\w+)/$', 'list.csv'), )
- 工程目录下的urls.py可以将请求转发给应用目录下的urls.py进行处理:
urlpatterns = patterns('', (r'^address/', include('address.urls')), #地址只匹配开头,所以不以"$"结尾。地址剩下的部分交由address下的urls.py继续匹配 )
- 超级用户可以在第一次运行"manage.py syncdb"时创建,也可以在之后运行manage.py createsuperuser命令。
- models.py中的model默认不被admin模块管理,这里要注册一下要被管理的模块。在应用目录下创建“admin.py”文件:
from django.contrib import admin from tdp.address.models import Address admin.site.register(Address) #注册Address,这样才可以用admin模块管理
- "manage.py reset APP_NAME"可以将应用"APP_NAME"下model中的变化同步到数据库中,但是会清除已有数据。
- 使用Generic views模块可以省略掉view。
使用object_list,默认查找的模板是“app_label/model_name_list.html”。即应用目录下,名称是model名+"_list.html"的文件。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), )
- 自定义模板过滤器。在应用目录下创建过滤器文件 templatetags/ change_gender.py。装载过滤器时需要用到这个文件名“{% load change_gender %}”。change_gender.py内容参考:
新版本python可以使用注解方式。使用过滤器时,名称是decode_gender。#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)