Django框架之中间件MiddleWare

Posted chao666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django框架之中间件MiddleWare相关的知识,希望对你有一定的参考价值。

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。
中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。

中间件的原理其实就是定义了一个装饰器,但是这个装饰器可以对整个项目中的所有方法进行装饰;

我们可以通过中间件,对请求对象和响应对象进行相应的干预操作。

实现中间件的流程:

1.在子应用中编写一个middleware.py的文件

def my_middleware(get_response):
    print(中间件初始化)
    def middlewraer(request, *args, **kwargs):
        print(在执行执行前对请求进行干预)
        # 加入干预代码, 主要应用白名单黑名单
        if request.META[USER] == KG:
            return HttpResponse(该用户无法访问)
        ret = get_response(request, *args,**kwargs)
        print(在执行后对响应进行干预)
        return ret
    return middlewrae

2. 在setting文件中注册中间件

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,
   # 注册中间件
users.middleware.my_middleware, ]

注意:Django运行在调试模式下,中间件init部分有可能被调用两次。

多个中间件执行流程:

1. 中间件会将setting文件中的MIDDLEWARE列表进行逆序,所以初始化的顺序时从下向上的;

2. 在调用时,即编写顺序上第一个中间件装饰的是编写顺序上的第二个中间件,而编写顺序上的第二个中间件装饰的才是视图函数;

3. 在调用结束返回时,会先将视图函数的结果返回给编写顺序上的第二个中间件,然后再返回给编写顺序上的第一个中间件。

代码解读:

@decorator1
@decorator2
def index(View):   
    pass

以上是关于Django框架之中间件MiddleWare的主要内容,如果未能解决你的问题,请参考以下文章

Django组件之Middleware

django之(中间件)middleware

django之中间件middleware

django之设置中间件模板

Django 学习之中间件Middleware

Django基础之中间件