中间件;
中间件是一个轻量级的底层的插件,可以介入Django的请求和响应过程(面向切面编程),其本质就是一个python类
面向切面编程(Aspect Oriented Programming)简称AOP,AOP的主要实现目的时针对业务处理过程中的切面进行提取,他所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分低耦合的隔离效果
调用顺序
中间件注册的时候是一个列表
如果我们没有在切点处直接进行返回,中间件会依次执行
如果我们直接进行了返回,后续中间件就不再执行了
–可切入点
process_request | client——urls |
process_view | urls——views |
process_templates_response | views—…—templates |
process_response | templates——client |
–切入函数
__init__ | 没有参数,服务器响应第一个请求的时候自动调用,用户确定是否启用该中间件 |
process_request(self, request) | 在执行视图前被调用,每个请求上都会调用,不主动进行返回或返回HttpResponse对象 |
process_view(self,request, view_func, view_args, view_kwargs) | 调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象 |
process_templates_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"
-
在类中根据功能需求,创建切入需求类,重写切入点方法
class LearnAOP(MiddlewareMixin): def process_request(self, request): print('request的路径', requeest.GET.path)"
-
启用中间件,在settings中进行配置,MIDDLEWARE中添加middleware.文件名.类名