Django9—上下文处理器和中间件_django coding
在Django中,中间件和上下文处理器是两个可以用于在请求处理生命周期中的特定阶段注入额外功能的机制。
- 上下文处理器(Context Processors):
上下文处理器是返回一个字典的函数,这个字典会自动加入到所有模板的上下文中。你可以创建自定义上下文处理器来为所有模板页面提供全局访问的数据。
例如,下面的代码定义了一个简单的上下文处理器,它将当前的日期和时间添加到所有模板的上下文中:
# 在你的 Django 应用下的 views.py 或其他模块中
def datetime_context_processor(request):
return {'current_datetime': datetime.datetime.now()}
然后,你需要在 settings.py
中添加这个处理器:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# 添加你的上下文处理器
'your_app_name.views.datetime_context_processor',
],
},
},
]
在模板中,你可以使用 {{ current_datetime }}
来访问这个变量。
- 中间件(Middleware):
中间件是在 Django 请求-响应处理过程中的特定点之前或之后运行的一系列的 hooks。你可以创建自定义的中间件来执行以下操作:
- 执行额外的数据库查询
- 设置请求的会话数据
- 修改请求或响应
- 发送性能分析数据
例如,下面的代码定义了一个简单的中间件,它记录每个请求的路径,并在请求结束后记录响应时间:
# 在你的 Django 项目下的 middleware.py 文件中
class RequestResponseLoggingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start_time = time.time()
response = self.get_response(request)
end_time = time.time()
execution_time = end_time - start_time
print(f'Request path: {request.path} | Execution time: {execution_time}')
return response
然后,你需要在 settings.py
中添加这个中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middlew
评论已关闭