Django 中间件和路由器的交互如何?

2023-04-11 00:00:00 中间件 交互 路由器

在 Django 中,中间件是一种类,用于在请求和响应处理过程中执行一些特定任务。中间件可以添加、修改或删除请求或响应,也可以将额外的功能添加到视图函数之前或之后。

在请求到达 Django 应用程序时,Django 会根据路由器确定要使用哪个视图函数来处理请求。路由器将 URL 与 URL 模式匹配,并调用相应的视图函数。

中间件和路由器的协作如下:

  1. 请求到达 Django 应用程序。
  2. 中间件开始处理请求。中间件可以修改请求的内容,添加请求头部或进行其他处理。
  3. 路由器将请求与 URL 模式匹配,并确定要使用哪个视图函数来处理请求。
  4. 路由器调用视图函数,视图函数可以执行其他操作,并返回响应。
  5. 中间件获取响应并进行处理。中间件可以修改响应的内容,添加响应头部或进行其他处理。
  6. 响应发送到客户端。

代码演示:

创建一个简单的中间件,用于向请求添加自定义标题“pidancode.com”。

# middleware.py

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

    def __call__(self, request):
        # 添加自定义头部
        request.META["Custom-Header"] = "pidancode.com"

        response = self.get_response(request)
        return response

将中间件添加到 settings.py 文件中的 MIDDLEWARE 列表中。

# settings.py

MIDDLEWARE = [
    # 其他中间件
    'myapp.middleware.CustomHeaderMiddleware',
]

创建一个简单的路由器,用于匹配 URL 和视图函数。

# urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
]

创建视图函数,用于响应请求并返回包含中间件添加的标题的响应。

# views.py

from django.http import HttpResponse

def home(request):
    # 获取自定义头部
    custom_header = request.META.get("Custom-Header", "default")

    return HttpResponse(f"Hello World! Custom Header: {custom_header}")

启动 Django 服务,并打开浏览器访问应用程序的主页:http://localhost:8000/

你会看到如下响应:

Hello World! Custom Header: pidancode.com

相关文章