Skip to main content

查看装饰

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 报头。

Vary标题

django.views.decorators.vary 中的装饰器可以用于基于特定请求头来控制缓存。

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 头添加到响应中,以指示不应该缓存页面。

Changed in Django 1.9:

在Django 1.9之前,Cache-Control: max-age=0 被发送。这没有可靠地防止所有浏览器中的缓存。