Django 中间件(middleware)是一个处理 HTTP 请求和响应的钩子系统。它提供了一种在 Django 处理请求的过程中介入的机制,允许你在请求到达视图之前或响应离开视图之后执行额外的逻辑。以下是一些 Django 中间件的常见用法:

内置中间件

Django 提供了一些内置中间件,你可以在 MIDDLEWARE 设置中启用或禁用它们。一些常见的内置中间件包括:

  •  django.middleware.security.SecurityMiddleware: 提供一些安全相关的 HTTP 头,例如防止点击劫持(clickjacking)等。

  
  •  django.middleware.common.CommonMiddleware: 处理 URL 后缀、斜杠等,提供了一些便捷的功能。


  •  django.contrib.sessions.middleware.SessionMiddleware: 处理会话(session)的中间件,使得你可以在请求和响应中访问会话数据。


  •  django.contrib.auth.middleware.AuthenticationMiddleware: 处理用户身份认证的中间件,使得你可以在视图中访问当前用户。


  •  django.middleware.csrf.CsrfViewMiddleware: 提供 CSRF 保护,确保请求中包含有效的 CSRF 令牌。


  •  django.middleware.clickjacking.XFrameOptionsMiddleware: 提供点击劫持保护,设置 X-Frame-Options 头。


编写自定义中间件

你还可以编写自己的中间件以满足项目特定的需求。一个自定义中间件是一个类,它定义了 process_request、process_view、process_template_response 等方法,你可以在这些方法中编写额外的逻辑。

以下是一个简单的自定义中间件示例,它在请求到达视图之前打印请求的路径:
# myapp/middleware.py
class PrintPathMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print(f"Request path: {request.path}")
        response = self.get_response(request)
        return response

要使用这个中间件,将其添加到 MIDDLEWARE 设置中:
# settings.py
MIDDLEWARE = [
    # 其他中间件...
    'myapp.middleware.PrintPathMiddleware',
    # 其他中间件...
]

这个中间件将在每个请求到达视图之前打印请求的路径。

中间件的执行顺序是按照它们在 MIDDLEWARE 设置中的顺序执行的。你可以根据需要调整中间件的顺序。

确保查阅 Django 4.0 的官方文档,以获取有关内置中间件和编写自定义中间件的更详细信息。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7220/Django