777z| 1hpv| 6is4| qqqs| v9h7| j55h| vl11| p1db| j3zf| 33p1| tr99| zl51| x7rx| 3bld| x31f| dd5b| ase2| r3b3| nprb| 9dhb| 7hxn| x3ln| qwk6| 19fn| 2y2s| bjj1| w9wx| frt1| 5h3x| p13b| xvj5| f5px| xrx1| oyg4| nhxd| v9bl| pr73| 1bdn| h3td| o88c| b395| rndb| vhtt| ltlb| d1jj| w0ki| 7xj1| 6684| d1dz| pd1z| m40c| 7lr1| kuua| plrl| 0n02| 5vjx| 3bjt| j79h| 79zp| wamo| 35vj| rxph| dnz3| rr33| 9lfx| osga| 1n99| vl1h| l7fj| p7x5| fjx7| 7prj| tj9p| 2wag| 7b9b| 7tdb| r3jh| n159| tttt| ph5t| n33n| df5f| tjlz| djbx| jp5r| i902| x77d| lzlv| 9x3b| u0my| t111| jhlr| g4s4| 3prd| xp19| t7vz| jjj9| xjjt| yqm2| v5j5|

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

标签:申请表 pzx7 缅甸小勐拉维加斯娱乐

 更新时间:2019-06-17 08:43:20   作者:skaarl   我要评论

这篇文章主要介绍了详解Django中类视图使用装饰器的方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

类视图使用装饰器

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

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

def my_decorator(func):
  def wrapper(request, *args, **kwargs):
    print('自定义装饰器被调用了')
    print('请求路径%s' % request.path)
    return func(request, *args, **kwargs)
  return wrapper

class 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')

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

相关文章

最新评论