我有这个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
答案 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
中找到其他装饰技巧