Django中间件在请求响应周期中扮演核心角色,它作为请求与响应的拦截器,在process_request、process_view、process_response等方法中实现认证、日志、限流等横切功能,通过MIDDLEWARE列表按序执行,支持短路逻辑与异常处理,提升代码复用性与系统可维护性。

Django中的中间件(Middleware),简单来说,它就像是你在一个复杂的生产线上,为每个产品(请求或响应)定制的检查站、加工点或者质量控制环节。它允许你在请求到达视图函数之前,以及视图函数处理完生成响应之后,对这些请求和响应进行拦截、修改或增强。它提供了一种非常灵活的方式来全局性地处理应用中的一些横切关注点,比如认证、会话管理、内容压缩、CORS策略等等,而无需在每个视图函数中重复编写这些逻辑。
Django的中间件机制,本质上是一系列轻量级的、可插拔的组件,它们形成一个链条,在请求-响应周期中顺序执行。当你向Django应用发送一个请求时,这个请求会从
MIDDLEWARE
process_request
process_response
要理解中间件,就得把它放到Django的整个请求-响应生命周期里看。这东西,在我看来,就是Django架构里那些“幕后英雄”之一。当一个HTTP请求涌入你的Django应用,它并不是直接冲到你写的那个处理业务逻辑的
views.py
具体来说,一个中间件类可以实现几个特殊的方法,这些方法会在请求的不同阶段被Django调用:
process_request(self, request)
request
request
HttpResponse
process_view(self, request, view_func, view_args, view_kwargs)
HttpResponse
process_template_response(self, request, response)
TemplateResponse
TemplateResponse
process_response(self, request, response)
HttpResponse
HttpResponse
process_exception(self, request, exception)
HttpResponse
理解这些方法以及它们的执行顺序和返回值行为,是玩转Django中间件的关键。它们就像一个个精密的小齿轮,共同驱动着整个应用的请求响应流程。
自定义一个Django中间件,从代码结构上看,其实并不复杂。你只需要创建一个Python类,并在其中实现你想要拦截的那些
process_
settings.py
MIDDLEWARE
# myapp/middleware.py
from django.http import HttpResponse
class MyCustomMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# 这里可以做一些一次性的初始化操作
def __call__(self, request):
# 请求到达视图之前
# print("请求进入 MyCustomMiddleware")
# 可以在这里修改 request 对象
# request.my_custom_data = "Hello from middleware!"
response = self.get_response(request) # 将请求传递给下一个中间件或视图
# 视图处理完,响应返回之前
# print("响应离开 MyCustomMiddleware")
# 可以在这里修改 response 对象
# response['X-My-Header'] = 'Custom Value'
return response
def process_view(self, request, view_func, view_args, view_kwargs):
# print(f"即将调用视图: {view_func.__name__}")
# 可以在这里做一些视图执行前的检查
# if not request.user.is_authenticated:
# return HttpResponse("Unauthorized", status=401)
return None # 返回None表示继续执行下一个中间件或视图然后,在你的
settings.py
# settings.py
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',
'myapp.middleware.MyCustomMiddleware', # 添加你的自定义中间件
]看起来挺简单对吧?但实际操作中,还是有些坑需要注意:
MIDDLEWARE
process_request
process_response
AuthenticationMiddleware
__init__
get_response
__call__
process_request
process_view
process_exception
None
HttpResponse
process_response
HttpResponse
process_
Django自带的中间件已经覆盖了很多基础功能,比如会话、认证、CSRF保护等。但中间件的真正威力在于它能让你为应用定制各种横切关注点。在我看来,任何需要在请求进入视图前或响应离开视图后进行统一处理的逻辑,都是中间件的绝佳用武之地。
AuthenticationMiddleware
@permission_required
process_request
request.user
process_request
process_response
process_request
429 Too Many Requests
process_response
process_request
X-Content-Type-Options
X-Frame-Options
Strict-Transport-Security
process_exception
在我看来,中间件的价值在于它提供了一种“非侵入式”的扩展能力。它让你的核心业务逻辑保持干净,而那些通用的、横向的功能则可以优雅地抽离出来,集中管理。这不仅提高了代码的可维护性,也让整个系统架构更加清晰。
以上就是Django中的中间件(Middleware)是什么?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号