Django之浅析请求生命周期及MVC&MTV

一 Django请求生命周期

首先,对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端。其次,HTTP请求及服务端响应中传输的所有数据都是字符串。

Django的请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段,简图如下:

image_thumb3

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,具体流程如下:

image_thumb2

2.3 MVC与MTV的区别

Models(数据库,模型)            Views(html模板)          Controllers(业务逻辑处理)    --> MVC
Models(数据库,模型)           Templates(html模板)         Views(业务逻辑处理)          --> MTV

posted @ 2018-10-19 11:09  Joe1991  阅读(113)  评论(0)    收藏  举报