Django 生命周期

1. 生命周期

Django 生命周期为: 用户请求发起对url的请求→ wsgiref模块→django中间件→django(视图url对应函数,模型数据库交互,html模版渲染)→django中间件 → wsgiref模块 →用户看到的页面。

from wsgiref.simple_server import make_server

 
def RunServer(environ, start_response):
    Django框架在这里运行
    Django 中间件
    Django (视图 模版 orm)    Django 中间件
    。。。。。
    
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
 
 
if __name__ == '__main__':
    httpd = make_server('', 8000, RunServer)
    print("Serving HTTP on port 8000...")
    httpd.serve_forever()

2. Django HTTP请求流程

在这里插入图片描述

3. 中间件的五种方法

什么是中间件?

中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件负责做一些特定的功能。

3.1 process_request
执行时间:在视图函数之前,在路由匹配之前
参数:
	request:请求对象,与视图中用到的request参数是同一个对象
返回值:
	None:按照正常的流程走
	HttpResponse:接着倒序执行当前中间件的以及之前执行过的中间件的
	process_response方法,不再执行其它的所有方法
执行顺序:按照MIDDLEWARE中的注册的顺序执行,也就是此列表的索引值
3.2 process_response
执行时间:最后执行
参数:
	request:请求对象,与视图中用到的request参数是同一个对象
	response:响应对象,与视图中返回的response是同一个对象
返回值:
	response:必须返回此对象,按照正常的流程走
执行顺序:按照注册的顺序倒序执行
3.3 process_view
执行时间:在process_request方法及路由匹配之后,视图之前
参数:
	request:请求对象,与视图中用到的request参数是同一个对象
	view_func:将要执行的视图函数(它是实际的函数对象,而不是函数的名称作为字符串)
	view_args:url路径中将传递给视图的位置参数的元组
	view_kwargs:url路径中将传递给视图的关键值参数的字典
返回值:
	None:按照正常的流程走
	HttpResponse:它之后的中间件的process_view,及视图不执行,执行所有中间件的process_response方法
执行顺序:按照注册的顺序执行
3.4 process_template_response

此方法必须在视图函数返回的对象有一个render()方法(或者表明该对象是一个TemplateResponse对象或等价方法)时,才被执行

执行时间:视图之后,process_exception之前
参数:
	request:请求对象,与视图中用到的request参数是同一个对象
	response:是TemplateResponse对象(由视图函数或者中间件产生)
返回值:
	response:必须返回此对象,按照正常的流程走
执行顺序:按照注册的顺序倒序执行
3.5 process_exception

此方法只在视图中触发异常时才被执行.

执行时间:视图之后,process_response之前
参数:
	request:请求对象,与视图中用到的request参数是同一个对象
	exception:视图函数异常产生的Exception对象
返回值:
	None:按照正常的流程走
	HttpResponse对象:不再执行后面的process_exception方法
执行顺序:按照注册的顺序倒序执行

4. 中间件执行流程

在这里插入图片描述

5. 中间件执行顺序

在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值