一. 什么是中间件
官方: 中间件是一个用来处理Django的请求和相应的框架级别的钩子, 他是一个轻量, 低级别的插件系统, 用于在全局范围内改变Django的输入和输出, 每个中间件都负责做一些特定的功能.
大白话: 中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作, 本质就是一个自定类, 类中定义了几个方法,
Django框架会处理请求的特定的时间去执行这些方法. 影响的是全局, 谨慎使用.
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', ]
二. 定义中间件
中间件定义可以定义五个方法, (主要的是 process_request和 process_response)
process_request(self.rerquest)
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, respoonse)
以上方法的返回值可以是None或HttpResponse对象, 如果是None, 则继续按照django定义的规则向后继续进行, 如果是 HttpResponse对象, 则直接将该对象返回给用户.
1. process_request(self.rerquest)
执行时间: 在视图函数执行之前
参数: rsquest --> 跟视图函数中的是同一个
执行顺序: 按照注册顺序, 顺序执行
返回值: None --> 正常路程
HttpResponse对象 --> 不执行后面中间中的procrss_request方法, 不执行视图函数, 直接执行当前中间件中的process_response 方法, 后面正常走.
from django.utils.deprecation import MiddlewareMixin
class MD1(MiddlewareMixin): def process_request(self, request): print("MD1里面的 process_request")
class MD2(MiddlewareMixin): def process_request(self, request): print("MD2里面的 process_request")

