Django 中如何使用中间件 (Middleware)?

推荐答案

在 Django 中使用中间件 (Middleware) 的步骤如下:

  1. 创建中间件类:编写一个 Python 类,并实现 __init____call__ 方法,或者根据需要实现 process_requestprocess_viewprocess_responseprocess_exceptionprocess_template_response 方法。

    -- -------------------- ---- -------
    ----- -----------------
        --- -------------- --------------
            ----------------- - ------------
    
        --- -------------- ---------
            - ------------
            -------- - --------------------------
            - ------------
            ------ --------
  2. 注册中间件:将中间件类添加到 settings.py 文件中的 MIDDLEWARE 列表中。

    -- -------------------- ---- -------
    ---------- - -
        ------------------------------------------------
        -------------------------------------------------------
        --------------------------------------------
        --------------------------------------------
        ----------------------------------------------------------
        -------------------------------------------------------
        ---------------------------------------------------------
        ------------------------------------  - ------
    -
  3. 使用中间件:中间件会在每个请求和响应过程中自动调用,无需手动干预。

本题详细解读

中间件的作用

中间件是 Django 处理请求和响应的钩子框架。它是一个轻量级的、低级别的插件系统,用于全局改变 Django 的输入或输出。每个中间件组件负责处理请求和响应的某些特定方面。

中间件的执行顺序

中间件的执行顺序与 MIDDLEWARE 列表中的顺序一致。请求阶段,中间件从上到下执行;响应阶段,中间件从下到上执行。

中间件的方法

  • __init__(self, get_response):初始化中间件,get_response 是一个可调用对象,用于获取视图的响应。
  • __call__(self, request):处理请求和响应,通常在这里编写自定义逻辑。
  • process_request(self, request):在请求到达视图之前执行。
  • process_view(self, request, view_func, view_args, view_kwargs):在调用视图之前执行。
  • process_response(self, request, response):在视图处理完请求后执行。
  • process_exception(self, request, exception):在视图抛出异常时执行。
  • process_template_response(self, request, response):在视图返回 TemplateResponse 时执行。

示例

以下是一个简单的中间件示例,它在每个请求中添加一个自定义的 HTTP 头:

settings.py 中注册该中间件:

这样,每个响应都会包含 X-Custom-Header: Hello, Middleware! 的 HTTP 头。

纠错
反馈