中间件是Django请求/响应处理的挂钩框架。这是一个轻量级的“插件”系统,用于全局改变Django的输入或输出。每个中间件组件负责执行一些特定的功能。例如,AuthenticationMiddleware使用会话将用户与请求关联起来。
一、中间件可以写成如下所示的函数:
我们按照函数的形式自定义一个日志中间件,用来统计请求到响应的耗时,并在响应头中返回,在应用目录下新建一个logger_middleware.py文件,如下:
接着激活中间件,请将其添加到settings.py的中间件列表中:
在中间件中,每个中间件组件都由一个字符串表示:类或函数名的完整Python路径。
Django安装不需要任何中间件,中间件可以是空的,但强烈建议至少使用CommonMiddleware。
中间件的执行是有顺序的,中间件可以依赖于其他中间件。例如,AuthenticationMiddleware在会话中存储经过身份验证的用户;因此,它必须在SessionMiddleware之后运行。
在请求阶段,在调用视图之前,Django按照中间件中定义的顺序自上而下应用。官方解释:可以将其视为洋葱:每个中间件类都是一个“层”,视图位于洋葱的核心。如果请求通过洋葱的所有层(每个层都调用get_response将请求传递到下一层),一直传递到核心的视图,响应将通过每一层以相反的顺序返回。
如果其中一层中断,则接下去的其他层包括视图也不会看到请求或响应,响应将仅通过请求传入的层返回。
测试一下:
二、中间件也可以写成类
我们按照类的形式,也自定义一个一样的日志中间件:
在settings.py中加入中间件即可: