一、Django请求生命周期
浏览器 → wsgi模块 → 中间件 → urls控制器 → 视图函数 → 数据库/模板渲染
↑ ↓
* ← wsgi模块 ← 中间件 ← 识图函数 ← *
二、中间件介绍
中间件顾名思义 是介于request与response处理之间的一道处理过程 相比较轻量级 并且在全局上改变django的输入与输出。
django中默认自带的一些中间件(settings.py文件中)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'apptest',]
三、自定义中间件
中间件可以定义五个方法 分别是
- process_request(self,request)
- process_view(self,request,view_func,view_args,view_kwargs)
- process_template_response(self,request,response)
- process_exception(self,request,exception)
- process_response(self,request,response)
自定义一个中间件示例
from django.utils.deprecation import MiddlewareMixinfrom django.urls import reversefrom django.shortcuts import HttpResponse,redirectclass MD1(MiddlewareMixin): def process_request(self,request): # 请求来时 过中间件会自动执行 正常返回None 异常可以回复HttpResponse对象,由上而下执行 print('hi MD1的请求')class MD2(MiddlewareMixin): def process_request(self,request): print('Md2的process_request') pass
process_request
有一个参数,就是request,这个request和视图函数中的request是一样的