Django-09-中间件
概念
是一个轻量级的,底层的插件,可以介入Django的请求和相应过程(面向切面编程)
中间件的本质就是一个python类
详细介绍请看:https://segmentfault.com/a/1190000019992887
MCS结构体系
面向切面编程
简称AOP(Aspect Oriented Programming)。AOP的主要实现目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合的隔离效果。
中间件的可切入点
切入函数
__init__:
没有参数,服务器响应第一个请求的时候自动调用,用户确定是否启用该中间件process_request(self,request):
在执行视图前被调用,每个请求上都会调用,不主动进行返回或返回HttpResponse对象process_view(self,request,view_func,view_args,view_kwargs):
调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象process_template_response(self,request,response):
在视图刚好执行完后进行调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象process_response(self,request,response):
所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
自定义中间件
process_exception(self,request,exception):
当视图抛出异常时调用,不主动进行返回或返回HttpResponse对象
自定义中间件流程
在工程目录下创建middleware目录
目录中创建一个python文件
在python文件中导入中间件的基类
from django.utils.deprecation import MiddlewareMixin
在类中根据功能需求,创建切入需求类,重写切入点方法
1
2
3class LearnAOP(MiddlewareMixin):
def process_request(self,request):
print('request的路径',request.GET.path)启用中间件,在settings中进行配置,MIDDLEWARE中添加
middleware.文件名.类名
注意:在django2.2官方推荐的文档里,一般这样写
1 | class Md1: |
实例1 ip拦截
1 | class BlackListMiddleware(): |
实例2 频率反爬
1 | class Md1: |
CSRF豁免
在views函数前加装饰器@csrf_exempt
思维导图
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kinmfer's Blogs!
评论
ValineLivere