中间件

一. 中间件的概念
    中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且
    在全局上改变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',
    ]
    每一个中间件都有具体的功能
.自定义中间件
    1.中间件一共有四个方法
        process_request
        process_view
        process_exception
        process_response

2.请求发送响应流程图

    3.当用户发起请求的时候会依次经过所有的中间件,依次经过中间件中的process_request函数,最后到达视图函数, 中视图函数处理完成后,再依次穿过中间件中的process_response,最后由wsgi.py对响应进行封装,发送给浏器.

  1. 自定义中间件

process_request,process_response方法

 

(1)自定义的类必须继承MiddlewareMixin,需要导入

from django.utils.deprecation import MiddlewareMixin

settings中:

在视图中:

在自定义的中间件中:

结果:

 

:如果请求在中间件1的process_request中被return,将会直接走中间件1的process_response,然后返回

:

 

结果:

 

流程图如下:

也可以在返回的途中被某个中间件的process_response偷梁换柱
:

结果为:

 

process_view方法

结果:

流程图如下:

 

中间件可以用来提前调用视图函数

:

 

结果:

 

流程图如下:

 

process_exception

 

结果:

:在以上的代码中,process_exception并不会执行,只有当views出现错误是时,才会执行
:当views中出现错误时

 

 





原文地址:https://www.cnblogs.com/shanghongyun/p/9878981.html