一、定义

中间件在wsgi和urls之间

二、配置

1、创建.py文件

2、定义中间件

from django.utils.deprecation import MiddlewareMixin

class Md1(MiddlewareMixin):

3、setting.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',
    'my_middleware.Md1',
    '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)

process_request 和 process_response最为重要

process_view其次

其它了解即可

1、process_request

执行顺序:注册顺序

何时执行:wsgi之后

返回值:

None,继续执行后续的中间件的process_request方法

返回response , 不执行后续的中间件的process_request方法

2、process_response

执行顺序:注册顺序倒序

何时执行:请求响应的时候

返回值: 必须要有返回值

返回原来的响应

return response

3、process_view

执行顺序:注册顺序

何时执行:urls.py之后,views.py之前

返回值:
返回None,继续执行后续的中间件的process_view方法
返回response,不执行后续的中间件的process_view方法,它将执行中间件的process_response方法并将应用到该HttpResponse并返回结果

4、process_exception

执行顺序:注册倒序

何时执行:views中有异常抛出

返回值:

返回None,继续执行后续的中间件的process_exception方法

返回response, 它将执行中间件的process_response方法并将应用到该HttpResponse并返回结果

5、process_template_response

执行顺序:注册倒序

何时执行:视图函数中有render(),视图函数执行完后,立刻执行

返回值:

返回None,继续执行后续中间件的process_exception

返回response,

四、总结

中间件5个方法的顺序

1、process_request

2、process_view

3、process_exception   有异常

4、process_template_response   render()方法

5、process_response 必须要有返回值