Django中间件
一、概念
- 是一个类,用来在全局范围内处理请求和响应的一个钩子
二、中间件的五个方法
process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)
自定义中间件
- 在app下创建一个模块
from django.utils.deprecation import MiddlewareMixin class MyMiddle_1(MiddlewareMixin): def process_request( self , request): print ( 'MyMiddle_1 中的 process_request' ) def process_response( self , request, response): print ( 'MyMiddle_1 中的 process_response' ) return response class MyMiddle_2(MiddlewareMixin): def process_request( self , request): print ( 'MyMiddle_2 中的 process_request' ) def process_response( self , request, response): print ( 'MyMiddle_2 中的 process_response' ) return response |
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware' , 'django.contrib.sessions.middleware.SessionMiddleware' , 'django.middleware.common.CommonMiddleware' , 'django.middleware.csrf.CsrfViewMiddleware' , 'django.contrib.auth.middleware.AuthenticationMiddleware' , 'django.contrib.messages.middleware.MessageMiddleware' , 'django.middleware.clickjacking.XFrameOptionsMiddleware' , 'app01.mymiddle.MyMiddle_1' , 'app01.mymiddle.MyMiddle_2' ] |
- 在 views.py 写一个视图函数
from django.shortcuts import render, HttpResponse def test(request): print ( '这儿是视图函数' ) return HttpResponse( 'ok' ) |
-
执行时间:在视图函数执行之前执行
-
参数:
request
-----是视图函数中用到的request
-
执行顺序:按照在
MIDDLEWARE
中注册的顺序从上往下执行 -
返回值:
None
-----正常流程往后走;HTTPResponse
对象-----当前中间件后面中间件的process_request
、process_response
方法和视图函数都不会执行,只执行当前中间件的process_response
方法及之前的中间件的process _response
方法
MyMiddle_1 中的 process_request MyMiddle_2 中的 process_request 这儿是视图函数 MyMiddle_2 中的 process_response MyMiddle_1 中的 process_response |
2.2 process_response
-
执行时间:在视图函数执行之后执行
-
参数:
request
-----> 是视图函数中用到的request
response
---->是视图函数中返回的response
-
执行顺序:按照在
MIDDLEWARE
中注册的顺序从下往上执行 -
返回值:必须是
response
对象
2.3 process_view
-
执行时间:在
process_request
方法及路由匹配之后、在视图函数执行之前执行
-
参数:
-
view_func
-------> 要执行的视图函数 -
view_args
-------> 视图函数的位置参数 -
view_kwargs
----> 视图函数的关键字参数
-
-
执行顺序:按照在
MIDDLEWARE
中注册的顺序从上往下执行 -
返回值:
None
-----正常流程往后走;
MiddleWare - - - - - 1 - - - request MiddleWare - - - - - 2 - - - request MiddleWare - - - - - 1 - - - <function test at 0x000000000425BD08 > # 视图函数test MiddleWare - - - - - 1 - - - () MiddleWare - - - - - 1 - - - {} MiddleWare - - - - - 2 - - - <function test at 0x000000000425BD08 > MiddleWare - - - - - 2 - - - () MiddleWare - - - - - 2 - - - {} 这儿是视图函数 MiddleWare - - - - - 2 - - - response MiddleWare - - - - - 1 - - - response |
2.4 process_exception
-
执行时间:在视图函数之后,
process_response
之前,有异常时才会触发 -
参数:exception-----错误信息对象
-
执行顺序:按照在
MIDDLEWARE
中注册的顺序从下往上执行 -
返回值:None-------正常往后走;返回
HTTPResponse
对象,注册顺序之前的中间件的process_exception
方法不会执行,会执行所有中间件的process_response
方法
2.5 process_template_response
-
执行时间:在视图函数之后,
process_response
之前,response
对象有render
方法时才会触发 -
参数
-
执行顺序:按照注册顺序倒着执行
-
返回值:返回
response
本文来自博客园,仅供参考学习,如有不当之处还望不吝赐教,不胜感激!转载请注明原文链接:https://www.cnblogs.com/rong-z/p/10009864.html
作者:cnblogs用户
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人