h1. 安装
tar xzvf Django-*.tar.gz
cd Django-/*
sudo python setup.py install
完成后,利用如下代码来查看安装版本。
h1. 框架介绍
django提供了一套快速使用python开发web项目的技术框架。该框架是MVC模式。Model层是数据库层,负责对底层数据库的CRUD,支持ORM,所有数据库操作都是对对象的操作。同时也支持自定义sql的查询。
View为视图层,包括了视图函数和web页面的展现。
Control为控制层,实现了request,response,session等中间件来拦截过滤请求,并提供了url映射。
h2. Model层
django可以把自定义的models类自动生成为数据库表。
每一个model最好有一个对应的Meta,制定对应的table名,如果不加入,则会默认访问"应用名_类名"为对应的数据库名称。
如果已经定义了models,则将该应用对应的appName,本例中为'DjangoProject.buss',添加到settings的
INSTALLED_APPS = ('DjangoProject.buss',)中。
执行python manage.py validate可以对models进行校验。
执行python manage.py syncdb 对settings.py中设定的数据库进行建表操作。
[django中的数据库操作]
h2. View层
模板的加载,需要在settings中增加如下信息。
其中所有配置的路径都必须是绝对地址,而不是相对地址,所以我们引入了os,path来处理相对地址的情况:
from django.template import Template
模板类,传入html代码,生成模板对象
from django.template.context import Context
Context是一组变量值对,用于给模板传递参数。
from django.template.loader import get_template
用于在settings配置的路径中找到对应名称的模板。
对于任意一个视图函数,均要有django.http.HttpResponse的输出。
也可以返回 django.http.HttpResponseRedirect,django.shortcuts.render_to_response。这2者均返回reponse对象。
django还封装了许多response。比如404,403,500等。
403:HttpResponseForbidden
404:HttpResponseNotFound
等。可以查看django.http./__init_/_.py
h2. URL映射
跟目录下的urls.py用于url路径与视图函数的绑定。
url路径由正则表达式来进行处理:
r'^test/$',其中r表示后面的是一个字符串。test前不用增加/,django自动替你完成这部分工作。
/^表示字符串头部匹配,$表示字符串尾部匹配。
如果程序希望通过/test/或者/test均能访问到该视图函数的话,则有2种方式:
r'^test/?$' 或者 在工程目录中的settings中增加APPEND_SLASH=True。系统会自动重定向。
在url映射中,需要注意的:
一个url例子:(r'^article/$',getArticle)
当一个url的映射,需要出现在工程中的很多地方的时候,如果每次都直接进行调用HttpResponseRedirct("/article/"),如果
url名字进行了修改,这就需要工程中的所有地方都需要修改,或者页面上也有这样的链接,那样的工作将是非常繁重的。
取而代之的方式:
url(r'^article/$',getArticle,name="article_list")
在函数视图中,如果用到该链接,使用reverse("article_list")
而在模板中,使用
{%url article_list%}
的方式引入到工程中。
当某链接中存在正则表达式传值的方式,比如:
url(r'^article/(?P<year>/d{4})/(?P<month>/d{1,2})/$','getArticle',name="article_list" )
则再模板中{%url article_list 2010 ,02%},
在视图中reverse("article_list",kwargs={"year":2010,"month":02})
h1. admin管理
h2. 在settings中设置:
h2. 在models所在包中增加admin.py
h2. 在urls中增加
h1. RequestContext
RequestContext处理器用来向页面模板传递公共变量。
可以包含多个processor。
一般配置为:
在settings中
其中auth处理器中包括user,message信息。页面使用{{user}}。
request包含了当前请求中的信息。{{request.sesison}}等定义在request中的变量。
支持自定义处理器,非常简单,传入一个request,传出一个dict就ok了!
在视图函数中调用的时候,只需要扩展下以前的方法就可以了!
处理器简单示例
h1. Django的Session,Cookie管理
cookie的设置
session的超时时间设置
settings中
SESSION_COOKIE_AGE=60*30 30分钟。
SESSION_EXPIRE_AT_BROWSER_CLOSE False:会话cookie可以在用户浏览器中保持有效期。True:关闭浏览器,则Cookie失效。
SESSION_COOKIE_DOMAIN 生效站点
SESSION_COOKIE_NAME cookie中保存session的名称
Session使用比较简单,在request.session是一个字典类。session是保存在数据库中的。
h1. Django中的中间件
在有些场合,需要对Django处理的每个request都执行某段代码。这类代码可能是在view处理之前修改传入的request,或者记录日志信息以便于调试,等等。这些可以利用中间件来实现。
中间件可以理解为拦截器。
中间件的引用:
这就包含了session,认证等中间件。
中间件负责拦截所有的请求,针对不同的请求作出不同的动作。
Initializer: __init_/_(self)
Request预处理函数: process_request(self, request)
View预处理函数: process_view(self, request, view, args, kwargs)
Response后处理函数: process_response(self, request, response)
Exception后处理函数: process_exception(self, request, exception)
使用过的例子:
SqlMiddleware:负责输出业务逻辑中,所有的sql信息,用于调试。
SessionIntecepterMiddleware 负责拦截所有的请求,如果请求的session中不存在用户信息,则返回到登陆页面。
SessionMiddleWare。因为在我们的项目中使用memcache来完成session。所以自己实现对于session的管理
h1. decorator
装饰器的使用,可以大量的减少重复工作。
以下是一个查看方法运行时间的装饰器:
在引用的时候,在需要被管理的方法前加入@profiling即可。
@profiling
def register(request):
h1. 管理界面的修改
Change list admin/change_list.html
Add/edit form admin/change_form.html
Delete confirmation admin/delete_confirmation.html
Object history admin/object_history.html
在工程模板中增加了一个模板templates/admin/buss/book/change_form.html
h1. 安全
h2. SQL注入
django自动对参数进行转义。防止sql注入。
h2. 跨站点脚本
对于url上传递的参数,在页面显示的时候总是用标签{{paramName/|escape}}进行转义。
.....
h1. 部署
django提供了轻量级的webserver。单线程模式。便于开发阶段的调试。
此命令只能本机访问:python manage.py runserver 8080
监听所有的网络接口,可以让其他团队人员访问:python manage.py runserver 0.0.0.0:8080