在Python的Web框架中,Django是比较成功的。
它是一个高级Python web framework,鼓励快速开发和干净的、MVC设计。
包括一个模板系统,对象相关的映射和用于动态创建管理界面的框架。支持ORM、Cache、 i18n、Admin等众多特性,是为了满足“Deadlines”项目而开发的。
先介绍一下目录结构:
conf: 主要有两个作用:1) 处理全局配置, 比如数据库、加载的应用、MiddleWare等 2) 处理urls配置, 就是url与view的映射关系。
contrib:由Django的开发者贡献的功能模块,不过既然都已经随版本发布,就表示是官方的。
core: Django的核心处理库,包括url分析、处理请求、缓存等,其中处理请求是核心了,比如处理fastcgi就是由wsgi.py处理。
db: 顾名思义,处理与数据库相关的,就是ORM。
dispatch: 其实这不是Django原创,是pydispatch库,主要处理消费者-工作者模式。
forms newforms oldforms: 处理html的表单,不用多介绍。
middleware: 中间件,就是处理HTTP的request和response的,类似插件。比如默认的common中间件的一个功能:当一个页面没有找对对应的pattern时,会自定加上‘/’重新处理。比如访问/blog时,而定义的pattern是‘^blog/$’,所以找不到对应的pattern,会自动再用/blog/查找,当然前提是APPEND_SLASH=True。
template: Django的模板,我个人认为这块是非常有创意的。
templatetags: 处理Application的tag的wrapper,就是将INSTALLED_APPS中所有的templatetags目录添加到 django.templatetags目录中,则当使用 {{load blog}}记载tag时,就可以使用 import django.templatetags.blog 方式加载了。不过这有一个问题,如果其他Application目录中也有blog.py,这会加载第一个出现blog.py的tag。其实在 Django中,有许多需要处理重名的地方,比如template,需要格外小心,这个后续在介绍。
utils: 公共库,很多公用的类都在放在这里。
views: 最基本的view方法。
Django几个重要的概念:
Project: 指一个完整的Web服务,一般由多个模块组成。
Application: 可以理解为模块,比如用户管理、博客管理等,包含了数据的组成和数据的显示,Applicaiton都需要在project/settings.py中INSTALLED_APPS的定义。
Middleware: 就是处理request和response的插件, Middleware都需要在project/settings.py中MIDDLEWARE_CLASSES的定义。
Loader: 模板加载器, 其实就是为了读取Template文件的类,默认的有通过文件系统加载和在Application/template目录中加载,Loader都需要在project/settings.py中TEMPLATE_LOADERS的定义。
下面以fastcgi方式为例,Django的版本是“0.97-pre-SVN-7053″。
其实和其他Web框架一样,HTTP处理的流程大致相同(但和Tomcat等Java容器不相同),
比如request->response.
0) 加载配置
Django的配置都在Project/settings.py中定义,可以是Django的配置,也可以是自定义的配置,并且都通过django.conf.settings访问,非常方便。
1) 启动
最核心动作的是通过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的世界。
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返回Response给flup,flup就取出Response的内容返回给Web服务器,由后者返回给浏览器。
总之,Django在fastcgi中主要做了两件事:处理Request和创建Response,而它们对应的核心就是“urls分析”、“模板技术”和“ORM技术”,这些留在以后分析。附图
分享到:
相关推荐
浅析Django处理流程和结构分析django.doc浅析Django处理流程和结构分析django.doc
Django运行方式及处理流程总结,写的很好的资料奥,适合小白和高手。
,基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于Python的django社交网络分析系统源码基于...
django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django...
Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...
Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统...
项目概述:django-lb-workflow 是一个基于Python的高效易用Django...综合来看,django-lb-workflow是一个功能全面、易于集成的Django流程引擎,非常适合需要在现有系统中快速引入流程管理功能的开发者和项目团队使用。
yet-another-django-profiler, Django 性能分析中间件和管理命令 yet-another-django-profiler自述文件 然而,另一个 Django 探查器尝试合并多年来创建的它的他 Django 分析实用程序的最佳特性。 ( 有关更多背景信息...
Django多并发处理详细不愁,安装uwsgi+nginx!很实用哦
基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django的个人网盘源码 基于Django...
django 项目结构布局
如果想要内网利用 django 及 pyecharts 做数据分析展示, 那必须把相关的js 文件下载放到 django 的 static 目录。 再修改pyecharts 生成的 html 代码。
基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于Django就业系统源码 基于...
致谢 引言 第一部分 入门 第1章 DjangoPython实战 ...第6章 模板和表单处理 6.1 模板 6.2 表单 6.3 总结 第三部分 Django应用实例 第7章 PhotoGallery 7.1 模型 7.2 准备文件上传 7.3 安装PIL
基于python+django的网络舆情分析系统的实现.zip 运行步骤 需要先安装Python的相关依赖:django==3.2.8, pymysql,requests,pillow,tensorflow==1.14.0,numpy,simpleui,django-import-export使用pip install 安装 ...
前几天写的django 简易博客开发记录,贴个链接吧 ...django 简易博客开发 2 模板和数据查询 http://www.cnblogs.com/cacique/archive/2012/09/30/2709143.html django 简易博客开发 3 静态文件、from 应用与自定义 ...
Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频课堂播放网站源码 Django实现在线视频...
Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客网站源码 Django从零开发的个人博客...
python项目基于django的疫情数据可视化分析系统的实现.zippython项目基于django的疫情数据可视化分析系统的实现.zippython项目基于django的疫情数据可视化分析系统的实现.zippython项目基于django的疫情数据可视化...
许多成功的网站和APP都基于Django。 Django是一个开源的Web应用框架,由Python写成。 Django Web框架还提供高级功能,例如ORM,数据库迁移,用户身份验证,管理面板和表单。 Django程序员喜欢该框架,因为它具有简化...