视图装饰器 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/topics/http/decorators
跳转至:导航、​搜索

查看装饰器

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

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

require_GET()
装饰器要求视图只接受 GET 方法。
require_POST()
装饰器要求视图只接受 POST 方法。
require_safe()

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

笔记

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


条件视图处理

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

condition(etag_func=None, last_modified_func=None)
etag(etag_func)
last_modified(last_modified_func)
这些装饰器可用于生成 ETagLast-Modified 标头; 参见 条件视图处理

GZip 压缩

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

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

改变标题

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

vary_on_cookie(func)
vary_on_headers(*headers)

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

请参阅 使用不同的标头

缓存

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

cache_control(**kwargs)
这个装饰器通过添加所有关键字参数来修补响应的 Cache-Control 标头。 有关转换的详细信息,请参阅 patch_cache_control()
never_cache(view_func)
此装饰器向响应添加 Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private 标头,以指示不应缓存页面。

常见的

3.2 版中的新功能。


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

no_append_slash()
此装饰器允许从 :setting:`APPEND_SLASH` URL 规范化中排除单个视图。