django视图装饰器

559 阅读3分钟

视图装饰器

这是我参与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内置的视图装饰器可以给视图提供一些限制。比如这个视图只能通过GETmethod访问等。
  • 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=Nonelast_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**headers

    Vary 头定义了缓存机制在构建其缓存密钥时应该考虑哪些请求报头。

    查看 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 头到一个响应来标识禁止缓存该页面。