视图装饰器

Django 提供了一些可以应用于视图的装饰器,以支持各种 HTTP 功能。

请参阅 装饰类,了解如何在基于类的视图中使用这些装饰器。

允许的 HTTP 方法

中的装饰器 django.views.decorators.http 可用于根据请求方法限制对视图的访问。如果条件不满足,这些装饰器将返回一个 django.http.HttpResponseNotAllowed

require_http_methods(request_method_list)[source]

装饰器,要求视图仅接受特定的请求方法。用法

from django.views.decorators.http import require_http_methods


@require_http_methods(["GET", "POST"])
def my_view(request):
    # I can assume now that only GET or POST requests make it this far
    # ...
    pass

请注意,请求方法应大写。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

require_GET()

装饰器,要求视图仅接受 GET 方法。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

require_POST()

装饰器,要求视图仅接受 POST 方法。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

require_safe()

装饰器,要求视图仅接受 GET 和 HEAD 方法。这些方法通常被认为是“安全的”,因为它们除了检索请求的资源之外,不应该具有执行其他操作的意义。

注意

Web 服务器应自动剥离 HEAD 请求响应的内容,同时保持标题不变,因此您可以在视图中完全像处理 GET 请求一样处理 HEAD 请求。由于某些软件(例如链接检查器)依赖于 HEAD 请求,因此您可能更喜欢使用 require_safe 而不是 require_GET

Django 5.0 中的变化

添加了包装异步视图函数的支持。

条件视图处理

以下装饰器 django.views.decorators.http 可用于控制特定视图上的缓存行为。

condition(etag_func=None, last_modified_func=None)[source]
etag(etag_func)[source]
last_modified(last_modified_func)[source]

这些装饰器可用于生成 ETagLast-Modified 标头;请参阅 条件视图处理

Django 5.0 中的变化

添加了包装异步视图函数的支持。

GZip 压缩

中的装饰器 django.views.decorators.gzip 控制每个视图的内容压缩。

gzip_page()

如果浏览器允许 gzip 压缩,此装饰器将压缩内容。它相应地设置 Vary 标头,以便缓存将基于 Accept-Encoding 标头进行存储。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

Vary 标头

中的装饰器 django.views.decorators.vary 可用于根据特定请求标头控制缓存。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

vary_on_headers(*headers)[source]

Vary 标头定义缓存机制在构建其缓存键时应考虑哪些请求标头。

请参阅 使用 Vary 标头

Django 5.0 中的变化

添加了包装异步视图函数的支持。

缓存

中的装饰器 django.views.decorators.cache 控制服务器端和客户端缓存。

cache_control(**kwargs)[source]

此装饰器通过向其添加所有关键字参数来修补响应的 Cache-Control 标头。请参阅 patch_cache_control(),了解转换的详细信息。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

never_cache(view_func)[source]

此装饰器将 Expires 标头添加到当前日期/时间。

此装饰器将 Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private 标头添加到响应中,以指示永远不应缓存页面。

仅当尚未设置每个标头时才会添加它。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

通用

中的装饰器 django.views.decorators.common 允许对 CommonMiddleware 行为进行每个视图的自定义。

no_append_slash()[source]

此装饰器允许将单个视图从 APPEND_SLASH URL 规范化中排除。

Django 5.0 中的变化

添加了包装异步视图函数的支持。

返回顶部