from django.utils.deprecation import MiddlewareMixin class MyMiddleware(MiddlewareMixin): def process_request(self,request): print('request') def process_response(self,request,response): print('response') #自定义中间件当消息从视图函数返回必须要在中间process_reponse中返回response #不然会丢失 return response def process_view(self,request,view_func,view_args,view_kwargs): print('第一个中间件中的视图函数')
配置文件
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', 'app01.mymiddleware.aaa.MyMiddleware' ]
django的请求生命周期
执行的顺序:
当中间件中都没有process_views函数时
当有request请求时,先从上到下执行中间件中的process_request函数,执行完接着执行
视图函数,视图函数执行完就从下到上执行中间件中的process_response函数
当process_request函数返回None时,中间件往下执行,当返回HttpResponse时,
这个中间件往下的中间件都不会执行,直接从这个中间件的process_response函数往回执行