Django------Django结构及处理流程分析

        在python的web框架中,Django属于一个高级的python web framework,鼓励快速开发和干净的,MVC设计。django包含一个模版系统,对象关系的映射和用于动态创建管理界面的框架,支持ORM,Cache,i18n,admin等众多特性。

  • 目录结构
    • conf:
      • 处理全局配置,比如数据库,加载的应用,middleware等等
      • 处理urls配置,就是url与view的映射关系
    • contrib:Django的开发者提供的功能,也是官方的;
    • core:Django的核心处理库,包括url分析,处理请求,缓存等,其中处理请求是核心,处理fastcgi就是由wsgi.py处理;
    • db:处理与数据库相关的,就是ORM;
    • dispatch:是pydispathch的库,主要处理消费者-工作者模式;
    • forms newforms oldforms:处理html表单;
    • middleware:中间件,处理HTTP的request和response的,类似插件,比如默认的common中间件的一个功能:当一个页面没有找对对应的pattern时,会自定加上‘/’重新处理。比如访问/blog时,而定义的pattern‘^blog/$’,所以找不到对应的pattern,会自动再用/blog/查找,当然前提是APPEND_SLASH=True;
    • template:模版;
    • templatetags:处理application的tag的wrapper,就是将settings中所有的app加入到django.templatetags目录中,就可以使用 import django.templatetags.blog 方式加载了。不过这有一个问题,如果其他Application目录中也有blog.py,这会加载第一个出现blog.pytag。其实在 Django中,有许多需要处理重名的地方,比如template,需要格外小心;
    • utils:公共库;
    • views:最基本的views方法;
  • 几个重要概念
    • Project:指一个完整的web服务,一般由多个模块组成;
    • Application:理解为模块,比如用户管理,博客管理等,包含了数据的组成以及显示,Application都需要settings.py中的INSTALL_APPS的定义;
    • Middleware:处理request和response的插件,需要在project/settings.py中的MIDDLEWARE_CLASSES的定义;
    • Loader:模版加载器,为了读取Template文件的类,默认的有通过文件系统加载和在Application/template目录中加载,Loader需要在settings.py中TEMPLATE_LOADERS的定义;
  • 以fastcgi为例子,和其他的WEB框架一样,HTTP处理的大致流程都相同,比如request-->response:
    • 加载配置:django的配置都在settings.py中,可以是django的配置,也可以是自己的配置,并且都通过django.conf.settings访问,非常方便;
    • 启动:最核心的启动是通过django.core.management.commands.runfcgi的Command来启动,它运行django.core.servers.fastcgi中的runfastcgi,runfastcgi使用了flup的WSGIServer来启动fastcgi,而WSGIServer中携带了django.core.handlers.wsgi的WSGIHandler类的一个实例,通过WSGIHandler来处理由WEB服务器(Apache,Lighttpd等)穿过来的请求,此时才进入了django的世界;
    • 处理Request:当HTTP请求来的时候,WSGIHandler就开始工作了,它从BaseHandler继承而来,WSGIHandler为每一个请求创建一个WSGIRequest实例,而WSGIRequest是从http.HttpRequest继承而来,接下来就开始创建Response了;
    • 创建Response:BaseHandler的get_response方法就是根据request创建response,而具体生成response的动作就是执行urls.py中对应view函数了,这也是django可以处理“友好URL”的关键的步骤,每个这样的函数都要返回一个Response实例,此时最 通用的做法是通过loader加载template并生成页面内容,其中重要的就是通过ORM技术从数据库中取出数据,并且渲染到Template中,从而生成具体的页面了;
    • 处理Response:Django返回Response给flup,flup就取出Response的内容返回给Web服务器,后者返回给浏览器;
  • Django在Fastcgi中主要做了两件事情:处理Request和创建response,他们对应的核心就是”urls分析“,”模版技术“和”ORM技术“。
posted @ 2012-11-28 19:31  事件轮询,回不到过去  阅读(866)  评论(0编辑  收藏  举报