视图装饰器¶
Django 提供了几个装饰器,可以应用于视图以支持各种 HTTP 功能。
请参阅 装饰类,了解如何将这些装饰器与基于类的视图一起使用。
允许的 HTTP 方法¶
django.views.decorators.http
中的装饰器可用于根据请求方法限制对视图的访问。如果条件不满足,这些装饰器将返回 django.http.HttpResponseNotAllowed
。
-
require_http_methods
(request_method_list)¶ 装饰器要求视图仅接受特定请求方法。用法
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 请求响应的内容,同时保持标头不变,因此您可以在视图中将 HEAD 请求完全像 GET 请求一样处理。由于某些软件(例如链接检查器)依赖 HEAD 请求,因此您可能更愿意使用
require_safe
而不是require_GET
。Django 5.0 中已更改增加了对包装异步视图函数的支持。
条件视图处理¶
以下装饰器在 django.views.decorators.http
中可用于控制特定视图上的缓存行为。
-
condition
(etag_func=None, last_modified_func=None)¶
-
etag
(etag_func)¶
GZip 压缩¶
装饰器在 django.views.decorators.gzip
中按视图控制内容压缩。
-
gzip_page
()¶ 如果浏览器允许 gzip 压缩,此装饰器会压缩内容。它会相应地设置
Vary
标头,以便缓存根据Accept-Encoding
标头存储内容。Django 5.0 中已更改增加了对包装异步视图函数的支持。
Vary 标头¶
可以使用 django.views.decorators.vary
中的装饰器,根据特定请求标头控制缓存。
-
vary_on_cookie
(func)¶ - Django 5.0 中已更改
增加了对包装异步视图函数的支持。
-
vary_on_headers
(*headers)¶ Vary
标头定义缓存机制在构建缓存键时应考虑哪些请求标头。请参阅 使用 vary 标头。
Django 5.0 中已更改增加了对包装异步视图函数的支持。
缓存¶
可以使用 django.views.decorators.cache
中的装饰器控制服务器和客户端缓存。
-
cache_control
(**kwargs)¶ 此装饰器通过向响应的
Cache-Control
标头添加所有关键字参数,来修补该标头。有关转换的详细信息,请参阅patch_cache_control()
。Django 5.0 中已更改增加了对包装异步视图函数的支持。
-
never_cache
(view_func)¶ 此装饰器将
Expires
标头添加到当前日期/时间。此装饰器将
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private
标头添加到响应中,以指示页面永远不应被缓存。每个标头仅在尚未设置时才添加。
Django 5.0 中已更改增加了对包装异步视图函数的支持。
常见¶
django.views.decorators.common
中的装饰器允许对 CommonMiddleware
行为进行按视图自定义。
-
no_append_slash
()¶ 此装饰器允许将各个视图从
APPEND_SLASH
URL 规范化中排除。Django 5.0 中已更改增加了对包装异步视图函数的支持。