视图装饰器(View decorators)
Django提供了几个装饰器,可以应用于视图来支持各种HTTP特性。
有关如何使用基于类的视图的这些装饰器,请参阅 我的 django 类视图。
允许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服务器在不改变请求头headers的前提下会自动剥离响应HEAD requests的内容,因此你可以在视图中像GET请求一样准确地处理HEAD requests。由于一些软件,例如链接检查器,依赖于HEAD请求,您可能更喜欢使用require_safe而不是require_GET。
条件视图处理(Conditional view processing)
django.views.decorators.http*中的下列装饰器可用于控制特定视图上的缓存行为
- condition(etag_func=None, last_modified_func=None)
- etag(etag_func)
- last_modified(last_modified_func)
这些装饰器可用于生成ETag 和 last - modified header;具体请查阅 “conditional view processing”.
GZip压缩
django.views.decorators.gzip中的装饰器控制每个视图的内容压缩.如果浏览器允许gzip压缩,这个装饰器将压缩内容。它相应地设置了Vary header,以便缓存基于Accept-Encoding header 将其存储.
Vary headers
django.views.decorators.vary中的装饰器可以用于根据特定的请求头来控制缓存。
- vary_on_cookie(func)
- vary_on_headers(*headers)
Vary header 定义了缓存机制在构建缓存键时应该考虑哪些请求头。
Caching
django.views.decorator .cache 中的装饰器 控制服务端和客户端侧缓存
-
cache_control(**kwargs)
这个装饰器通过添加所有关键字参数来填补响应的Cache-Control头。查patch_cache_control()获取转换的详细信息。 -
never_cache(view_func)
该装饰器向响应添加一个Cache-Control: max-age=0、no-cache、no-store、must-revalidate header,以指示不应该缓存页面。