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

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

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

posted @ 2019-03-13 21:17  眺望的鹰  阅读(260)  评论(0编辑  收藏  举报