• 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
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    Linux curl命令详解
    Go语言获取命令行参数
    MySQL对sum()字段 进行条件筛选,使用having,不能用where
    PHP的 first day of 和 last day of
    easyui-datagrid个人实例
    easyui-layout个人实例
    easyui-combotree个人实例
    easyui-combo个人实例
    easyui-combotree个人实例
    easyui datagrid加载数据和分页
  • 原文地址:https://www.cnblogs.com/chao666/p/12113206.html
Copyright © 2020-2023  润新知