先建立一个中间件的函数
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, 项目初始化时调用
再次发送请求时和响应
请求
我是中间件第一层,请求前被调用
我是中间件第二层,请求进入前先经过我这道门
响应
我是中间件第二层,请求处理完成后经过我
我是中间件第一层,请求处理视图后调用
框架中的中间件还有很多,执行顺序还是这个规则