CBV的装饰员

时间:2017-01-17 12:13:49

标签: django django-views

我有这个CBV:

class GetStuff(View):
    def get(self, request, company_id):
        ...

我想用自定义函数装饰get函数,该函数接受request和company_id参数并检查一些权限。

有关如何实现这一目标的任何想法?我发现的关于装饰者的大多数信息都集中在FBV上。

这是我到目前为止所做的:

def custom_decorator(func_view):
    def wrapper(request, company_id):
        if not request.user.is_staff:
            # do_something()
            return func_view(request, company_id)
        return wrapper

1 个答案:

答案 0 :(得分:0)

您必须装饰调度方法

  

要装饰基于类的视图的每个实例,您需要装饰类定义本身。为此,您可以将装饰器应用于类的dispatch()方法。 django doc

from django.utils.decorators import method_decorator

class GetStuff(View):
     @method_decorator(custom_decorator)
     def dispatch(self, *args, **kwargs):
         return super(GetStuff, self).dispatch(*args, **kwargs)

@method_decorator(custom_decorator, name='dispatch')
class GetStuff(View):
     def dispatch(self, *args, **kwargs):
         return super(GetStuff, self).dispatch(*args, **kwargs)

您可以在docs

中找到其他装饰技巧