一、中间件的概念
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
Django的中间件的定义:
自定义中间件有四个方法:
process_request
process_view
process_exception
process_response
最重要的是第一个和最后一个:
上述截图中的中间件都是django中的,我们也可以自己定义一个中间件,我们可以自己写一个类,但是必须继承MiddlewareMixin
需要导入
from django.utils.deprecation import MiddlewareMixin
把自定义中间件的路劲放在settings中间:
class Md1(MiddlewareMixin): def process_request(self,request): print("Md1请求") #return HttpResponse("Md1中断") def process_response(self,request,response): print("Md1返回") return response def process_view(self, request, callback, callback_args, callback_kwargs): # return HttpResponse("hello") # response=callback(request,*callback_args,**callback_kwargs) # return response print("md1 process_view...") def process_exception(self): print("md1 process_exception...") class Md2(MiddlewareMixin): def process_request(self,request): print("Md2请求") # return HttpResponse("Md2中断") def process_response(self,request,response): print("Md2返回") return response def process_view(self, request, callback, callback_args, callback_kwargs): print("md2 process_view...") def process_exception(self): print("md1 process_exception...")
当其中一个中间件在request时候返回的话,就会直接返回不走下面中间件。可以用在限制爬虫上
一般情况下不会走最后一个exception,只有当执行报错的时候才回去执行,如果在此过程中加了response那么,直接执行
process_response,不会继续执行exception
不报错就会直接返回process_ersponse
具体应用:
校验哪些需要登录,设置白名单!