Django之浅析请求生命周期及MVC&MTV
一 Django请求生命周期
首先,对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端。其次,HTTP请求及服务端响应中传输的所有数据都是字符串。
Django的请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段,简图如下:
WSGI(Web Server Gateway Interface):web服务网关接口,它是一种规范,其定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。
常用的WSGI服务如下:
server_names = {
'cgi': CGIServer,
'flup': FlupFCGIServer,
'wsgiref': WSGIRefServer,
'waitress': WaitressServer,
'cherrypy': CherryPyServer,
'paste': PasteServer,
'fapws3': FapwsServer,
'tornado': TornadoServer,
'gae': AppEngineServer,
'twisted': TwistedServer,
'diesel': DieselServer,
'meinheld': MeinheldServer,
'gunicorn': GunicornServer,
'eventlet': EventletServer,
'gevent': GeventServer,
'geventSocketIO':GeventSocketIOServer,
'rocket': RocketServer,
'bjoern' : BjoernServer,
'auto': AutoServer,
}
python标准库提供的独立WSGI服务器为wsgiref,Django即是应用wsgiref,实际工作中应用uwsgi(后续会进行学习)。
由上图可知,当客户端发起访问请求时,首先会通过WSGI,接着通过中间件,然后进入路由系统,再进入视图函数,在视图函数中从数据库、模板引擎中获取数据,然后进行渲染返回给客户端。
注意:渲染后的数据为字符串。
二 MVC&MTV
2.1 MVC
MVC是众所周知的web框架模式,它将应用程序分为模型(Model)、视图(Views)、控制器(Controller)三个组成部分:
- M(模型):管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为
- V(视图):负责把数据格式化后呈现给用户
- C(控制器):接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据,控制器是将“模型”和“视图”隔离,并成为二者之间的一个联系纽带。

2.2 MTV
Django也是一个MVC框架。但在Django中控制器接受用户输入的部分由框架自行处理,所以其更关注的是模型(Model)、模板(Template)和视图(Views),所以 Django 为 MTV 框架:
- M (模型):数据存取层, 该层处理与数据相关的所有事务: 如何存取、如何验证有效
- T (模板):表现层, 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示
- V (视图):业务逻辑层, 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template,具体流程如下:
2.3 MVC与MTV的区别
Models(数据库,模型) Views(html模板) Controllers(业务逻辑处理) --> MVC
Models(数据库,模型) Templates(html模板) Views(业务逻辑处理) --> MTV



浙公网安备 33010602011771号