读书人

Django step by step学习札记

发布时间: 2012-12-21 12:03:49 作者: rapoo

Django step by step学习笔记

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

    Django1.2版有些不同。对于post请求,工程配置文件settings.py中的MIDDLEWARE_CLASSES中需要加入中间件'django.middleware.csrf.CsrfResponseMiddleware'。一般地,django.shortcuts包中提供了封装好的渲染html模板的方法render_to_response:
    from django.shortcuts import render_to_responsedef index(request):      return render_to_response('list.html',{'addr':address})
    ?如果需要对response做特殊处理,那么就需要手动渲染模板:
    from django.template import loader, Contextfrom django.http import HttpResponsedef 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中配置好数据库:
    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创建数据库。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。工程目录下的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 adminfrom tdp.address.models import Addressadmin.site.register(Address)    #注册Address,这样才可以用admin模块管理
    from django.conf.urls.defaults import *from tdp.address.models import Addressinfo_dict = {# 'model': Address, 'queryset': Address.objects.all(),}urlpatterns = patterns('', (r'^/?$', 'django.views.generic.list_detail.object_list', info_dict),)?使用object_list,默认查找的模板是#coding=utf-8from django import templateregister = 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。