中间件
目录
https://www.cnblogs.com/maple-shaw/articles/9333824.html
中间件
中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。
Django项目的Settings.py文件,MIDDLEWARE配置项。
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',
'app01.middleware.my_middleware.MD1',
'app01.middleware.my_middleware.MD2',
]
自定义中间件
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)
返回值可以是None或一个HttpResponse对象,如果是None,则继续按照django定义的规则向后继续执行,如果是HttpResponse对象,则直接将该对象返回给用户。
示例
# from django.middleware.csrf import CsrfViewMiddleware # 中间件源代码
from django.utils.deprecation import MiddlewareMixin
class MD1(MiddlewareMixin):
def process_request(self, request):
print("MD1里面的 process_request")
def process_response(self, request, response):
print("MD1里面的 process_response")
return response
class MD2(MiddlewareMixin):
def process_request(self, request):
print("MD2里面的 process_request")
django中间件就是一个类, 在全局范围内处理django的输入和输出 .
process_request方法
process_request(self, request)
执行时间: 在视图函数之前
执行顺序: 按照注册的顺序执行
参数:
request对象, 与视图函数中的相同
返回值:
None :正常流程
HttpResponse对象 :不执行下一个process_request方法, 也不执行下一个视图函数, 直接执行当前中间件的process_response方法.
process_response方法
process_response(self, request, response):
执行时间: 在视图函数之后
执行顺序: 按照注册顺序倒序执行
参数:
request: request对象, 与视图函数中的相同
response: HttpResponse对象
返回值:
HttpResponse对象: 正常流程
process_view方法
process_view(self, request, view_func, view_args, view_kwargs):
执行时间: 在process_request之后, 视图函数之前
执行顺序: 按照注册的顺序执行
参数:
request: request对象, 与视图函数中的相同
view_func: 要执行的视图函数
view_args: 视图函数的位置参数
view_kwargs: 视图函数的关键字参数
返回值:
None: 正常流程
HttpResponse对象: 下一个中间件的process_view方法不执行, 视图函数不执行, 执行所有中间件的process_response方法
process_exception方法
process_exception(self, request, exception):
执行时间: 有异常才会触发执行, 在视图函数之后
执行顺序: 按照注册顺序倒叙执行
参数:
request: request对象, 与视图函数中的相同
exception :错误对象
返回值:
None: 正常流程,错误交给下一个方法或者django处理异常
HttpResponse对象: 下一个中间件中的process_exception方法不执行, 执行所有中间件的process_response方法.
process_template_response方法
process_template_response(self, request, response):
执行时间: 视图返回的是TemplateResponse对象才执行, 或者对象有一个render方法
执行顺序: 按照注册顺序倒叙执行
参数:
request: request对象, 与视图函数中的相同
response: 相应对象
返回值:
HttpResponse对象: 正常流程