香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

详解Django中类视图使用装饰器的方式


时间:2022-01-11 10:30 作者:admin610456


类视图使用装饰器

为类视图添加装饰器,可以使用两种方法。

为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图。

def my_decorator(func):  def wrapper(request, *args, **kwargs):    print('自定义装饰器被调用了')    print('请求路径%s' % request.path)    return func(request, *args, **kwargs)  return wrapperclass DemoView(View):  def get(self, request):    print('get方法')    return HttpResponse('ok')  def post(self, request):    print('post方法')    return HttpResponse('ok')

4.1 在URL配置中装饰

urlpatterns = [  url(r'^demo/$', my_decorate(DemoView.as_view()))]

此种方式最简单,但因装饰行为被放置到了url配置中,单看视图的时候无法知道此视图还被添加了装饰器,不利于代码的完整性,不建议使用。

此种方式会为类视图中的所有请求方法都加上装饰器行为(因为是在视图入口处,分发请求方式前)。

4.2 在类视图中装饰

在类视图中使用为函数视图准备的装饰器时,不能直接添加装饰器,需要使用method_decorator将其转换为适用于类视图方法的装饰器。

method_decorator装饰器使用name参数指明被装饰的方法

# 为全部请求方法添加装饰器@method_decorator(my_decorator, name='dispatch')class DemoView(View):  def get(self, request):    print('get方法')    return HttpResponse('ok')  def post(self, request):    print('post方法')    return HttpResponse('ok')# 为特定请求方法添加装饰器@method_decorator(my_decorator, name='get')class DemoView(View):  def get(self, request):    print('get方法')    return HttpResponse('ok')  def post(self, request):    print('post方法')    return HttpResponse('ok')

如果需要为类视图的多个方法添加装饰器,但又不是所有的方法(为所有方法添加装饰器参考上面例子),可以直接在需要添加装饰器的方法上使用method_decorator,如下所示

from django.utils.decorators import method_decorator# 为特定请求方法添加装饰器class DemoView(View):  @method_decorator(my_decorator) # 为get方法添加了装饰器  def get(self, request):    print('get方法')    return HttpResponse('ok')  @method_decorator(my_decorator) # 为post方法添加了装饰器  def post(self, request):    print('post方法')    return HttpResponse('ok')  def put(self, request): # 没有为put方法添加装饰器    print('put方法')    return HttpResponse('ok')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)