django - 中间件
中间件:可以在请求前、后、响应前、后、视图产生异常的 植入业务逻辑,
是一个可插拔式的设计。中间件采用的就是 AOP 的设计思想
- 面向切面编程 AOP : 是对面向对象的一个补充和扩展,不是用来替代便面向对象的
- 面向对象编程 OOP
django - 自定义中间件
-
在项目中, 新建一个
middlewares.py
-
在
middlewares.py
中, 定义一个类,继承 MiddlewareMixin -
在 类中 定义 下列方法
-
process_request(request)
代表在视图方法执行前 执行的代码 -
process_view(request, view, args, kwargs)
代表在视图方法开始执行前 执行的 代码 -
process_exception(request, exception)
代表视图在执行过程中,如果产生异常,执行的代码 -
process_response(request, response)
代表在视图执行完后执行的代码 -
process_template_response(request, response)
响应的结果必须是通过 render 返回的
-
-
使用中间件
在
settings.py
中, 配置中间件MIDDLEWARE = [ ... 自定义中间件 ... ]
通过自定义中间件,实现一个获取业务运行时间的中间件
import time
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render
class ViewRunTimeMiddleware(MiddlewareMixin):
def process_view(self, request, view, args, kwargs):
print(view, args, kwargs)
self.start = time.time()
def process_response(self, request, response):
self.end = time.time()
print("该业务运行了", self.end - self.start , "秒")
return response
执行流程
首先执行 process_request 函数,然后在执行视图函数之前执行 process_view 函数,然后执行视图函数,最后执行 process_response 函数;
出现异常执行 process_exception 函数,视图函数执行完毕后立即调用 process_template_response 函数