View decorators

Django提供了几种装饰器,以支持一些HTTP特性

Allowed HTTP methods

位于django.views.decorators.http模块下的require_http_methods(request_method_list)装饰器,将返回一个 django.http.HttpResponseNotAllowed如果条件没有满足的话。
<pre>
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 只有POST或者GET方式的请求才能够进入函数内
# ...
pass
</pre>

相类似的还有
require_GET()、require_POST()、require_safe()(只接受GET和HEAD请求)

Conditional view processing

位于 django.views.decorators.http模块下的condition(etag_func=None, last_modified_func=None)、
etag(etag_func)、last_modified(last_modified_func)
用于控制特定视图的缓存情况。

<pre>
import datetime
from django.db import models
class Blog(models.Model):
...
class Entry(models.Model):
blog = models.ForeignKey(Blog)
published = models.DateTimeField(default=datetime.datetime.now)
...


def latest_entry(request, blog_id):
return Entry.objects.filter(blog=blog_id).latest("published").published


</br>
from django.views.decorators.http import condition

@condition(last_modified_func=latest_entry)
def front_page(request, blog_id):
...

front_pages视图显示最近上传的博文。只有当有新的博文上传自后front_pages才用的上更新。可以计算最后修改的时间。conditon可以提供一个最早期的检测,如果没有更新可以提供cache中查找。
</pre>

Vary headers

位于 django.views.decorators.vary下的vary_on_cookie(func)和vary_on_headers(*headers)装饰器用于控制特定请求头的缓存情况

<pre>
from django.views.decorators.vary import vary_on_headers
@vary_on_headers('User-Agent')
def my_view(request):
...

这种情况下,缓存机制将会为每一个user-agent建立一个单独的缓存
</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容