`
fudehai001
  • 浏览: 497206 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

 

分享到:
评论

相关推荐

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

    Django 框架处理流程和结构分析 Django 是一个高级 Python Web 框架,鼓励快速开发和干净的、MVC 设计。它包括一个模板系统、对象相关的映射和用于动态创建管理界面的框架。支持 ORM、Cache、i18n、Admin 等众多...

    浅析对Python语言的学习和应用领域的认知.zip

    首先,Python的学习之路通常从基础语法开始,包括变量、数据类型(如整型、浮点型、字符串、布尔型)、流程控制(如条件语句、循环结构)、函数定义与调用等。了解这些基础知识后,可以进一步学习面向对象编程,理解...

    浅析对Python语言的学习和应用领域的认知.pdf

    Pandas是另一个非常强大的数据分析库,它提供了对二维表格数据的快速、灵活的操作能力,可以处理复杂的数据结构,并且能够处理关系型数据库中的数据。与R语言相比,虽然Pandas在某些数学和统计功能上稍逊一筹,但它...

    python 2019毕业论文参考文献.docx

    - **知识点概述**:王常衡等人的文章《浅析Python语言及其应用前景》(2019)探讨了Python作为一种流行的编程语言,在不同领域的应用潜力和发展趋势。 - **详细内容**:文章分析了Python语言的基本特性和优势,如...

    浅析基于Python爬虫技术的特性及应用.pdf

    特别是它在Web端的两大框架Django和Flask,以及在网页数据解析方面两个强大的工具BeautifulSoup和Scrapy,它们都具有强大的功能和良好的社区支持。 BeautifulSoup是一个用于解析HTML和XML文档的Python库,它能够从...

    jquery开发入门整理(所需要了解的)

    虽然这部分内容并未详细介绍Django创始人对jQuery的具体评价,但从上下文可以推测,这里可能会讨论jQuery作为一款成熟的前端库,在技术工艺方面的优势和不足之处,以及如何与其他技术栈(如Django)更好地结合。...

Global site tag (gtag.js) - Google Analytics