• 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, 项目初始化时调用

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

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

  • 相关阅读:
    virtualenv与virtualenvwrapper
    数据类型、变量定义、数据类型转换
    计算机存储单元、标识符
    html单页面中用angular js
    svn客户端访问失败,错误“请求的名称有效,但是找不到请求的类型”的解决
    php 获取某数组中出现次数最多的值(重复最多的值)与出现的次数
    数据库导入时出现“2006
    phpstorm 激活
    取消本地SVN文件夹与服务器的关联
    js实现倒计时函数
  • 原文地址:https://www.cnblogs.com/tiaowangdeying/p/10526379.html
Copyright © 2020-2023  润新知