创建中间件
Django 中间件是一个类,定义在 middleware.py 文件中,通常包含一个 process_request 方法和/或一个 process_response 方法。
# myapp/middleware.py
class MyMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def process_request(self, request):
# 在视图处理请求之前执行的逻辑
print("Processing request")
def process_response(self, request, response):
# 在视图处理完响应后执行的逻辑
print("Processing response")
return response
注册中间件
在 settings.py 文件中的 MIDDLEWARE 配置项中注册中间件,Django 将按照列表中的顺序应用中间件:
# settings.py
MIDDLEWARE = [
# ...
'myapp.middleware.MyMiddleware',
# 其他中间件...
]
中间件方法
process_request
process_request 方法在视图处理请求之前被调用,允许你在请求到达视图之前执行一些逻辑。你可以在该方法中修改请求或进行一些预处理工作。
def process_request(self, request):
# 在视图处理请求之前执行的逻辑
print("Processing request")
process_view
process_view 方法在视图函数被调用之前被调用,允许你在视图函数执行之前执行一些逻辑。
def process_view(self, request, view_func, view_args, view_kwargs):
# 在视图函数被调用之前执行的逻辑
print("Processing view")
process_template_response
process_template_response 方法在视图函数返回的响应是 TemplateResponse 类型时被调用,允许你在模板渲染完成后执行一些逻辑。
def process_template_response(self, request, response):
# 在模板渲染完成后执行的逻辑
print("Processing template response")
return response
process_response
process_response 方法在视图处理完响应后被调用,允许你在响应返回给客户端之前执行一些逻辑。你可以在该方法中修改响应或进行一些后处理工作。
def process_response(self, request, response):
# 在视图处理完响应后执行的逻辑
print("Processing response")
return response
示例
以下是一个简单的中间件示例,记录每个请求的处理时间:
import time
class TimingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def process_request(self, request):
request.start_time = time.time()
def process_response(self, request, response):
duration = time.time() - request.start_time
response['X-Page-Generation-Duration-ms'] = int(duration * 1000)
return response
在这个例子中,process_request 方法记录请求的开始时间,而 process_response 方法计算请求处理的时间,并将其添加到响应的 HTTP 头中。
这只是 Django 中间件的基础概念。中间件提供了一种灵活且强大的方式来定制和处理请求和响应。深入了解 Django 中间件可以帮助你更好地处理各种应用程序需求。
转载请注明出处:http://www.zyzy.cn/article/detail/13923/Django