View decorators

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

Allowed HTTP methods

位于django.views.decorators.http模块下的require_http_methods(request_method_list)装饰器,将返回一个 django.http.HttpResponseNotAllowed如果条件没有满足的话。


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

相类似的还有
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)
用于控制特定视图的缓存情况。


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




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中查找。

Vary headers

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


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

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

你可能感兴趣的:(View decorators)