视图装饰器
这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战
感激相遇 你好 我是y大壮
作者:y大壮
链接:juejin.cn/user/756923… 来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
🌊🌈关于前言:
文章部分内容及图片出自网络,如有问题请与我本人联系
🌊🌈关于内容:
视图装饰器
Django 提供很多装饰器,它们可以为视图支持多种 HTTP 特性。
查看 装饰类 来了解如何在基于类的视图中使用这些装饰器。
1、require_http_methods
在 django.views.decorators.http 中的装饰器可以用来根据请求方法来限制对视图的访问。如果条件不满足,这些装饰器将返回 django.http.HttpResponseNotAllowed。
在实际的工作中,可能由于需求,对某些请求,只限制发送GET请求或者POST请求,不能发送其它的请求,
Django内置的视图装饰器可以给视图提供一些限制。比如这个视图只能通过GET的method访问等。
-
require_http_methods装饰器可以要求视图只接受特定的请求方法。用法如下:
from django.views.decorators.http import require_http_methods @require_http_methods(["GET", "POST"]) def text_view(request): 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的装饰器被用来控制特殊视图中的缓存行为。
用于支持视图的条件检索(或更改)的装饰器
功能。
这些参数是可调用的,用于计算ETag和的上次修改时间
请求的资源。可调用项的传递方式相同
参数作为视图本身。ETag函数应返回一个字符串(或
如果资源不存在,则为“无”),而上次\u修改的函数
应该返回datetime对象(如果资源不存在,则返回None)。
ETag函数应该返回一个完整的ETag,包括引号
condition(etag_func=None, last_modified_func=None)
etag(etag_func)
-
last_modified(last_modified_func)这些装饰器被用来生成
ETag和Last-Modified头部;查看 conditional view processing 。
3、GZip 压缩
浏览器允许gzip压缩,此中间件将压缩内容。
它相应地设置Vary头,以便缓存将其存储作为基础
在接受编码头上。
报错 笔记拼音 双语对照
django.views.decorators.gzip) 里的装饰器控制基于每个视图的内容压缩。
-
gzip_page()如果浏览器允许 gzip 压缩,那么这个装饰器将压缩内容。它相应的设置了
Vary头部,这样缓存将基于Accept-Encoding头进行存储。
4、Vary 头
将“Cookie”添加到响应的Vary头的视图装饰器。这
指示页面的内容取决于Cookie。用法:
@vary_on_cookie
def index(request):
pass
django.views.decorators.vary 里的装饰器被用来根据特殊请求头的缓存控制。
vary_on_cookie(func)
-
vary_on_headers**headersVary头定义了缓存机制在构建其缓存密钥时应该考虑哪些请求报头。查看 using vary headers。
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头到一个响应来标识禁止缓存该页面。