文档功能nice options for applying decorators such as login_required
to Class Based Views。
但是,我有点不清楚如何将特定参数与装饰器一起传递,在这种情况下我想change the login_url
of the decorator。
如下所示,仅有效:
@login_required(login_url="Accounts:account_login")
@user_passes_test(profile_check)
class AccountSelectView(TemplateView):
template_name='select_account_type.html'
答案 0 :(得分:3)
您应该使用@method_decorator with class methods:
类的方法与独立函数不完全相同,所以 你不能只是将函数装饰器应用于方法 - 你需要 首先将它转换为方法装饰器。 method_decorator 装饰器将函数装饰器转换为方法装饰器 它可以在实例方法上使用。
然后只需使用您需要的参数调用装饰器并将其传递给方法装饰器(通过调用可以接受参数的装饰器函数,您将在退出时获得实际的装饰器)。如果要装饰类而不是类方法本身,请不要忘记将要装饰的方法的名称作为关键字参数name
(例如dispatch
)传递:
@method_decorator(login_required(login_url="Accounts:account_login"),
name='dispatch')
@method_decorator(user_passes_test(profile_check), name='dispatch')
class AccountSelectView(TemplateView):
template_name='select_account_type.html'