django - (七) 中间件的处理
比如这里要新增一个统计响应时间的功能
-
新建一个middlewares.py (student_sys/student/middlewares.py)
import time from django.urls import reverse from django.utils.deprecation import MiddlewareMixin class TimeItMiddleware(MiddlewareMixin): def process_request(self,request): strs = "1. 处理requset请求,第一个被调用," "处理request中认证头之类" print(strs) return def process_view(self,request,func,*args,**kwargs): strs = "2. 用于view处理,其中func即是调用的view" print(strs) if request.path != reverse('index'): return None start = time.time() #这里调用了view做处理 response = func(request) costed = time.time() - start print("process view used %d seconds" % (costed,)) return response def process_exception(self,request,Exception): strs = "0. 用来处理全部流程中的异常" print(strs) pass def process_template_response(self,request,response): strs = "3. 如果处理渲染模板使用了render,就会调用到这里" print(strs) return response def process_response(self,request,response): strs = "4. 所有的流程执行完后会返回response给浏览器,在返回之前会调用到这里" print(strs) return response
-
MIDDLEWARE = [ 'student.middlewares.TimeItMiddleware', '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', ]
-
在浏览器上刷新页面观察后台输出