• django中间件执行过程


    先建立一个中间件的函数

    def my_middle1(get_response):
        # 项目第一次打开的时候会调用一次, 以后不会再调用
        print('我是中间件1,项目初始化时调用')
        def midd(request):
                # 请求进入时调用
                print('我是中间件第一层,请求前被调用')
            response = get_response(request)
                # 响应请求时调用
            print('我是中间件第一层,请求处理视图后调用')
            return response
        return midd
    
    def my_middle2(get_response):
        print('我是中间件2,项目初始化时候调用')
        def midd(request):
            # 请求进去时调用
            print('我是中间件第二层,请求进入前先经过我这道门')
            response = get_response(request)
            # 请求响应时调用
            print('我是中间件第二层,请求处理完成后经过我')
            return response
        return midd
    
    然后再项目的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',
        'book.middleware.my_middle1',
        'book.middleware.my_middle2',
    ]
    

    中间件的执行顺序和注册顺序有关

    请求时按中间件注册顺序从上向下执行,响应时按注册顺序从下向上执行

    请求先经过中间件件1 my_middle1,再经过中间件2 my_middle2 然后,根据我们项目中的路由配置找到视图中的函数操作,返回时,先经过中间件2,再经过中间件1,然后才会到达前端页面
    当页面初次加载的 时候会执行,以后再发生的请求不会经过,只会经过

    因此 当页面初次加载时 只在响应时候调用 ,以后的请求下面这两句话不会再调用
    我是中间件2,项目初始化调用
    我是中间件1, 项目初始化时调用

    再次发送请求时和响应
    请求
    我是中间件第一层,请求前被调用
    我是中间件第二层,请求进入前先经过我这道门
    响应
    我是中间件第二层,请求处理完成后经过我
    我是中间件第一层,请求处理视图后调用

    框架中的中间件还有很多,执行顺序还是这个规则

  • 相关阅读:
    提升工作效率的方法
    Spark Streaming 实现思路与模块概述
    Reduce Side Join实现
    File file:/data1/hadoop/yarn/local/usercache/hp/appcache/application_* does not exi
    Caused by: java.io.IOException: Filesystem closed的处理
    linux下nproc的作用
    Spark Streaming 的一些问题
    php代码审计7审计csrf漏洞
    php代码审计6审计xss漏洞
    php代码审计5审计命令执行漏洞
  • 原文地址:https://www.cnblogs.com/tiaowangdeying/p/10526379.html
Copyright © 2020-2023  润新知