Django 2.1.3 视图层 装饰器

本文深入解析Django框架中的视图装饰器,包括控制HTTP方法、条件视图处理、GZip压缩、变化的请求头及缓存策略。通过这些装饰器,开发者能有效管理和优化视图功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


快捷函数 | 总目录 | 内置视图


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,以指示永远不应缓存页面。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值