`
fudehai001
  • 浏览: 487658 次
  • 性别: 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.doc浅析Django处理流程和结构分析django.doc

    Django运行方式及处理流程总结

    Django运行方式及处理流程总结,写的很好的资料奥,适合小白和高手。

    基于Python的django社交网络分析系统源码.zip

    ,基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于...

    django电子商务网站源码.zip

    django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django...

    Django实现商城网站源码.zip

    Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...

    Django客户管理系统源码.zip

    Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统...

    高效易用Django流程引擎源码 - django-lb-workflow

    项目概述:django-lb-workflow 是一个基于Python的高效易用Django...综合来看,django-lb-workflow是一个功能全面、易于集成的Django流程引擎,非常适合需要在现有系统中快速引入流程管理功能的开发者和项目团队使用。

    yet-another-django-profiler, Django 性能分析中间件和管理命令.zip

    yet-another-django-profiler, Django 性能分析中间件和管理命令 yet-another-django-profiler自述文件 然而,另一个 Django 探查器尝试合并多年来创建的它的他 Django 分析实用程序的最佳特性。 ( 有关更多背景信息...

    Django多并发处理

    Django多并发处理详细不愁,安装uwsgi+nginx!很实用哦

    基于Django的个人网盘源码.zip

    基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django...

    Python-django项目结构布局

    django 项目结构布局

    内网利用 django 及 pyecharts 做数据分析展示

    如果想要内网利用 django 及 pyecharts 做数据分析展示, 那必须把相关的js 文件下载放到 django 的 static 目录。 再修改pyecharts 生成的 html 代码。

    Python基于Django的就业系统源码.zip

    基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于...

    DjangoWeb开发指南

    致谢 引言 第一部分 入门 第1章 DjangoPython实战 ...第6章 模板和表单处理 6.1 模板 6.2 表单 6.3 总结 第三部分 Django应用实例 第7章 PhotoGallery 7.1 模型 7.2 准备文件上传 7.3 安装PIL

    基于python+django的网络舆情分析系统的实现.zip

    基于python+django的网络舆情分析系统的实现.zip 运行步骤 需要先安装Python的相关依赖:django==3.2.8, pymysql,requests,pillow,tensorflow==1.14.0,numpy,simpleui,django-import-export使用pip install 安装 ...

    django项目实例(django 简易博客开发)

    前几天写的django 简易博客开发记录,贴个链接吧 ...django 简易博客开发 2 模板和数据查询 http://www.cnblogs.com/cacique/archive/2012/09/30/2709143.html django 简易博客开发 3 静态文件、from 应用与自定义 ...

    Django实现在线视频课堂播放网站源码.zip

    Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频...

    Django从零开发的个人博客网站源码.zip

    Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客...

    python项目基于django的疫情数据可视化分析系统的实现.zip

    python项目基于django的疫情数据可视化分析系统的实现.zippython项目基于django的疫情数据可视化分析系统的实现.zippython项目基于django的疫情数据可视化分析系统的实现.zippython项目基于django的疫情数据可视化...

    django4中文文档

    许多成功的网站和APP都基于Django。 Django是一个开源的Web应用框架,由Python写成。 Django Web框架还提供高级功能,例如ORM,数据库迁移,用户身份验证,管理面板和表单。 Django程序员喜欢该框架,因为它具有简化...

Global site tag (gtag.js) - Google Analytics