什么是 Django 中间件?

2023-04-11 00:00:00 django 中间件

Django 中间件是一种可插入的组件,可处理 Django 请求和响应的过程中的不同阶段。使用中间件,您可以在将请求发送到视图之前或将响应发送回客户端之前拦截请求和响应。

中间件广泛应用于认证、缓存、压缩、日志记录、跨站点请求伪造保护等常见场景。您还可以编写自定义中间件以添加自己的功能。

Django 中间件是实现了中间件方法的 Python 类。中间件方法包括:

  • process_request(request):在将请求发送到视图之前调用。
  • process_view(request, view_func, view_args, view_kwargs):在调用视图函数之前调用。
  • process_template_response(request, response):在使用 TemplateResponse 渲染模板后调用,Python 3.2 及以上版本才支持。
  • process_response(request, response):在将响应发送回客户端之前调用。
  • process_exception(request, exception):在视图函数引发异常时调用。

您可以只覆盖您需要的方法。

下面是一个简单的中间件示例,用于在响应中添加一个自定义头。

class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        response['X-My-Header'] = 'pidancode.com'

        return response

在上面的示例中,init 方法是中间件的构造函数,接受 get_response 参数。call 方法是中间件处理请求的方法,接受 request 参数。它首先调用 get_response 方法以获取响应,然后在响应头中添加一个自定义头,并将响应返回。

要将中间件添加到 Django 中,将其添加到 MIDDLEWARE 配置中,例如:

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.MyMiddleware',  # 添加自定义中间件
]

这将启用 SecurityMiddleware、SessionMiddleware 等默认中间件以及自定义中间件。

当您发送请求并收到响应时,最终响应头将包含 X-My-Header 字段,其值为“pidancode.com”。

相关文章