Django5之视图装饰器

本节主要介绍Django框架视图层中装饰器的内容。视图装饰器用来对视图函数进行相关的控制操作,实现了对各种HTTP特性的支持功能。

4.5.1  允许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模块中定义。

4.5.2  gzip_page()方法

在浏览器支持的情况下,gzip_page()装饰器方法用于对视图的响应内容进行gzip视图压缩,该方法在django.views.decorators.gzip模块中定义。

装饰器语法:gzip_page()。

功能描述:该方法依据不同的响应头(header)进行缓存设置,从而保证基于在Accept-Encoding响应头上的存储。

4.5.3  其他装饰器

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)

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值