浅析 Django 处理流程 和 结构分析 django

来源:互联网 发布:java中关键字 编辑:程序博客网 时间:2024/05/21 00:20
 

PythonWeb框架中,Django是比较成功的。

它是一个高级Python web framework,鼓励快速开发和干净的、MVC设计。

包括一个模板系统,对象相关的映射和用于动态创建管理界面的框架。支持ORMCache i18nAdmin等众多特性,是为了满足“Deadlines”项目而开发的。

先介绍一下目录结构:
conf: 
主要有两个作用:1) 处理全局配置比如数据库、加载的应用、MiddleWare 2) 处理urls配置就是urlview的映射关系。

contrib:Django的开发者贡献的功能模块,不过既然都已经随版本发布,就表示是官方的。

core: Django的核心处理库,包括url分析、处理请求、缓存等,其中处理请求是核心了,比如处理fastcgi就是由wsgi.py处理。

db: 顾名思义,处理与数据库相关的,就是ORM

dispatch: 其实这不是Django原创,是pydispatch库,主要处理消费者-工作者模式。

forms newforms oldforms: 处理html的表单,不用多介绍。

middleware: 中间件,就是处理HTTPrequestresponse的,类似插件。比如默认的common中间件的一个功能:当一个页面没有找对对应的pattern时,会自定加上‘/’重新处理。比如访问/blog时,而定义的pattern‘^blog/$’,所以找不到对应的pattern,会自动再用/blog/查找,当然前提是APPEND_SLASH=True

template: Django的模板,我个人认为这块是非常有创意的。

templatetags: 处理Applicationtagwrapper,就是将INSTALLED_APPS中所有的templatetags目录添加到 django.templatetags目录中,则当使用 {{load blog}}记载tag时,就可以使用 import django.templatetags.blog 方式加载了。不过这有一个问题,如果其他Application目录中也有blog.py,这会加载第一个出现blog.pytag。其实在 Django中,有许多需要处理重名的地方,比如template,需要格外小心,这个后续在介绍。

utils: 公共库,很多公用的类都在放在这里。

views: 最基本的view方法。

Django几个重要的概念:
Project: 
指一个完整的Web服务,一般由多个模块组成。

Application: 可以理解为模块,比如用户管理、博客管理等,包含了数据的组成和数据的显示,Applicaiton都需要在project/settings.pyINSTALLED_APPS的定义。


Middleware: 
就是处理requestresponse的插件, Middleware都需要在project/settings.pyMIDDLEWARE_CLASSES的定义。

Loader: 模板加载器其实就是为了读取Template文件的类,默认的有通过文件系统加载和在Application/template目录中加载,Loader都需要在project/settings.pyTEMPLATE_LOADERS的定义。

下面以fastcgi方式为例,Django的版本是“0.97-pre-SVN-7053″

其实和其他Web框架一样,HTTP处理的流程大致相同(但和TomcatJava容器不相同)

比如request->response.

0) 加载配置
Django
的配置都在Project/settings.py中定义,可以是Django的配置,也可以是自定义的配置,并且都通过django.conf.settings访问,非常方便。

1) 启动
最核心动作的是通过django.core.management.commands.runfcgiCommand来启动,它运行django.core.servers.fastcgi中的runfastcgirunfastcgi使用了flupWSGIServer来启动fastcgi。而WSGIServer中携带了django.core.handlers.wsgiWSGIHandler类的一个实例,通过WSGIHandler来处理由Web服务器(比如ApacheLighttpd)传过来的请求,此时才是真正进入Django的世界。

2) 处理Request
当有HTTP请求来时,WSGIHandler就开始工作了,它从 BaseHandler继承而来。WSGIHandler为每个请求创建一个WSGIRequest实例,而WSGIRequest是从 http.HttpRequest继承而来。接下来就开始创建Response.

3) 创建Response
BaseHandler
get_response方法就是根据request创建 response,而具体生成response的动作就是执行urls.py中对应的view函数了,这也是Django可以处理友好URL”的关键步骤,每个这样的函数都要返回一个Response实例。此时一般的做法是通过loader加载template并生成页面内容,其中重要的就是通过ORM 技术从数据库中取出数据,并渲染到Template中,从而生成具体的页面了

4) 处理Response
Django
返回Responseflupflup就取出Response的内容返回给Web服务器,由后者返回给浏览器。

总之,Djangofastcgi中主要做了两件事:处理Request和创建Response,而它们对应的核心就是“urls分析模板技术“ORM技术,这些留在以后分析。附图
f8437b5848234d94810a1817

原创粉丝点击