什么是中间件
当请求来访问django时,会首先经过中间件这种过滤器,多个中间件就像一层层的筛子,把有问题的请求进行处理。
编写中间件
mymiddleware/mdzz.py文件
from django.utils.deprecation import MiddlewareMixin class MyMiddleware(MiddlewareMixin): def process_request(self,request): print('我是第一个自定义中间件里面的process_request方法') # return HttpResponse('heiheihei') def process_response(self,request,response): print('我是第一个自定义中间件里面的process_response方法') return response # 必须将response形参接收的到数据返回,不然直接报错 def process_view(self, request, view_func, view_args, view_kwargs): print('我是第一个自定义中间件里面的process_view方法') print(view_func.__name__,view_func) def process_exception(self,request,exception): print('我是第一个自定义中间件里面的process_exception方法') print(exception) def process_template_response(self,request,response): print('我是第一个自定义中间件里面的process_template_response方法') return response
注册中间件
在settings文件中添加
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.mdzz.MyMiddleware', ]
使用
中间件可以有多个,默认按注册顺序进行过滤,如果中途被某一个中间件的process_request方法
拦截直接返回时,会直接调用中间件本身的process_response方法,并继续按顺序执行前边所有中间件的process_response方法
process_view方法,请求通过中间件时会被加入此方法内容,当路由匹配成功时,在视图函数之前将被调用。
process_exception发生异常时会被调用的方法。
process_template_response当视图函数内部有render()函数时会触发。