Django 中间件是一种可以插入 Django 项目请求/响应处理流程的框架。它允许开发者在不修改 Django 核心代码的情况下,对请求/响应进行额外的处理。它是一个非常有用的工具,可以用来实现认证、权限、会话、CSRF 保护和其他功能。
Django 中间件是一个 Python 类,它必须实现 process_request() 和 process_response() 方法。process_request() 方法在 Django 视图函数之前被调用,而 process_response() 方法则在视图函数之后被调用。这些方法都有一个 HttpRequest 对象作为参数,并返回一个 HttpResponse 对象。
class MyMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) # Code to be executed for each request/response after the view is called. return response def process_view(self, request, view_func, view_args, view_kwargs): # Code to be executed for each request/response before the view is called. return None
Django 自动转换视图引发的异常,或者带有错误状态代码的特定 HTTP 响应内的中间件引发的异常。某些异常( Certain exceptions
)被转换为 4xx 状态代码,而未知异常被转换为 500 状态代码。
这个变换发生在每个中间件的前后(你可以把它想象成洋葱每层中间的薄膜),因此每个中间件总是可以依赖于从调用它的 get_response
回调中获得某种类型的HTTP响应。中间件不需要担心它们对 get_response
的调用包装在 try
/except
里,也不需要担心处理稍后的中间件或视图引发的异常。即使链中的下一个中间件引发了 Http404 异常,比如中间件不会查看异常,相反,它会得到一个带有404 status_code
的 HttpResponse
对象。
您可以将 DEBUG_PROPAGATE_EXCEPTIONS
设置为 True
以跳过此转换并向上传播异常。
我们已经简单的描述过了HTML 表单,但是一个HTMLform只是其所需的一部分。在网络应用的上下文中,“表单”可能指的是那个HTM...
class django.utils.deprecation.MiddlewareMixinDjango 提供了 django.utils.deprecation.MiddlewareMixin 来方便创建同时...
你可以通过设置 SESSION_EXPIRE_AT_BROWSER_CLOSE 来控制会话框架是使用 browser-length sessions还是persistent sessions。...
Model._base_manager用于访问关联对象的管理器默认情况下,Django 访问关联对象(即 choice.question)时使用 Model._base...
模型当中最重要的属性是 Manager。它是 Django 模型和数据库查询操作之间的接口,并且它被用作从数据库当中 获取实例,...