本节主要介绍Django框架视图层中装饰器的内容。视图装饰器用来对视图函数进行相关的控制操作,实现了对各种HTTP特性的支持功能。
在Django框架中,位于django.views.decorators.http模块的装饰器被用来限制可以访问该视图的HTTP请求方法。如果请求的HTTP方法不是指定的方法之一,则返回django.http.HttpResponseNotAllowed响应。
装饰器语法:require_http_methods(request_method_list)。
功能描述:获取该视图仅能接收的独特请求方式。
关于require_http_methods()装饰器的使用方法,可参考下面的代码实例。
【代码4-52】
01 from django.views.decorators.http import require_http_methods
02
03 # 请求方法应该是大写
04 @require_http_methods(["GET", "POST"])
05 def my_view(request):
06 # 现在可以假设只有GET或POST请求才能到达这里
07 # ...
08 pass
【代码分析】
在第01行代码中,通过调用django.views.decorators.http模块(装饰器)导入了require_http_methods对象。
在第04行代码中,通过注入字符@拼接require_http_methods对象的操作,定义了请求方式参数“["GET", "POST"]”。注意,请求方式参数必须为大写字母。
在第05~08行代码中,定义了一个视图方法my_view()。由于第04行代码中注入语法的定义,只有GET请求方式和POST请求方式可以访问该视图方法。
此外,在django.views.decorators.http模块中还定义了几个关于装饰器require_http_methods()方法的简化版本,具体说明如下:
1)require_GET()方法
该方法是require_http_methods()的简化版本,功能上只允许GET请求方式的访问。在django.views.decorators.http模块中定义。
2)require_POST()方法
该方法是require_http_methods()的简化版本,功能上只允许POST请求方式的访问。在django.views.decorators.http模块中定义。
3)require_safe()方法
该方法只允许安全的请求类型,也就是GET请求方式和HEAD请求方式的访问。在django.views.decorators.http模块中定义。
在浏览器支持的情况下,gzip_page()装饰器方法用于对视图的响应内容进行gzip视图压缩,该方法在django.views.decorators.gzip模块中定义。
装饰器语法:gzip_page()。
功能描述:该方法依据不同的响应头(header)进行缓存设置,从而保证基于在Accept-Encoding响应头上的存储。
1. Vary headers装饰器
Vary headers装饰器用于控制基于特定请求头(header)上的缓存,该方法在django.views.decorators.vary模块中定义。具体包括以下两个方法:
装饰器语法:vary_on_cookie(func)。
装饰器语法:vary_on_headers(*headers)。
2. Caching装饰器
Caching装饰器用于控制服务器端和客户端上的缓存,该方法在django.views.decorators.cache模块中定义。具体包括以下两个方法:
装饰器语法:cache_control(**kwargs)。
该装饰器方法通过添加关键字参数来弥补HTTP响应的Cache-Control请求头。
装饰器语法:never_cache(view_func)。
该装饰器方法通过为Cache-Control请求头添加一组参数(max-age=0, no-cache, no-store, must-revalidate, private),来表明视图页面永远不会被缓存。
3. Conditional view processing装饰器
Conditional view processing装饰器用于控制特定视图函数上的缓存行为,该方法在django.views.decorators.cache模块中定义。具体包括以下3个方法:
装饰器语法:condition(etag_func=None, last_modified_func=None)。
装饰器语法:etag(etag_func)。
装饰器语法:last_modified(last_modified_func)。
本书1-7章样章及配套资源下载链接:
https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwd=nanc
源码、PPT课件、教学视频等,可以从前言给出的下载信息下载,大家可以评估一下。
《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)