中间件( MiddlewareMixin )
from django.utils.deprecation import MiddlewareMixin
中间件是什么
请求和响应之间的一道屏障
中间件的作用
控制请求和响应
中间件的执行顺序
process_request 请求的时候,从上往下执行 如果return HttpResponse 的对象,直接返回了 如果return None 继续往下走
process_response ,从下往上执行 必须 return HttpResponse的对象
中间件的方法
def process_request(self,request): 请求来的时候,响应执行 def process_response(self,request,response): 响应回去的时候,执行 中间件1直接 return HttpResponse对象 直接走走自己的 response def process_view( 了解 ) request, callback(视图函数), callback_args(无名分组的参数), callback_kwargs(有名分组的参数) def process_view(self,request,callback,callback_args,callback_kwargs): print(callback) # 视图层函数内存地址 print(callback_args) # 接受路由无名分组参数 print(callback_kwargs) # 接受路由有名分组参数 ret = callback(request) # 执行视图层函数 return ret def process_exception(self, request, exception)( 了解 ) # 接受错误信息
# 该方法对视图函数的返回值又要求,必须是一个含有render方法类的对象,才会执行此方法 [ 例如以下例子 ]
def process_template_response(self, request, response) (了解)
class Test():
def render(self):
return HttpResponse('test')
def test_middle(request): # 会触发render函数的执行
return Test()
自定义中间件
先继承 MiddlewareMixin 这个类
先导入模块: from django.utils.deprecation import MiddlewareMixin
写中间件和中间件的常用方法
class MyMiddelware(MiddlewareMixin): def process_request(self,request): #发送请求来的时候执行 print('我是Middleware ----- 1 process_request ') return None def process_response(self,request,response): #响应回去的时候执行 print('我是Middleware ----- 1 process_response ') return response def process_view(self,request,callback,callback_args,callback_kwargs): print(callback) print(callback_args) print(callback_kwargs) ret = callback(request) return ret # 捕捉异常信息 def process_exception(self,request,exception): print(exception) # 该方法对视图函数的返回值又要求,必须是一个含有render方法类的对象,才会执行此方法 def process_template_response(self,request,response): return response
注册中间件
django中的中间件
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', ]