← 快捷函数 | 总目录 | 内置视图→
Django提供了几个可以应用于视图的装饰器,以支持各种HTTP功能。
1. 允许的HTTP方法
在django.views.decorators.http中的装饰器可用于根据请求方法限制对视图的访问。如果不满足条件,这些装饰器将返回一个django.http.HttpResponseNotAllowed 。
require_http_methods(request_method_list)
Decorator要求视图只接受特定的请求方法。
用法:
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。
2. 条件视图处理
以下django.views.decorators.http中的装饰器可用于控制特定视图上的缓存行为。
ondition(etag_func=None, last_modified_func=None)
etag(etag_func)
last_modified(last_modified_func)
这些装饰器可用于生成ETag和Last-Modified 请求头; 看 条件视图处理。
3. GZip压缩
django.views.decorators.gzip中的装饰器控制基于每个视图内容进行压缩。
gzip_page()
如果浏览器允许gzip压缩,此装饰器会压缩内容。它相应地设置Vary请求头,以便缓存将其存储基于Accept-Encoding请求头。
译者实例:
请求同一个页面,未压缩前长度内容是1180
压缩后长度变为684,而且响应头Vary中多出了一个
Accept-Encoding
可以看到Content-Length为,未压缩之前是1180
4. 变化的请求头
django.views.decorators.vary中的装饰器可用于根据特定请求头控制缓存。
vary_on_cookie(func)
vary_on_headers(*headers)
Vary请求头定义了高速缓存机制建立其缓存键时应该考虑到哪些请求头。
请参阅使用各种请求头。
5. 缓存
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
,以指示永远不应缓存页面。