文档功能应用装饰器的不错选择,例如login_required基于类的视图 https://docs.djangoproject.com/en/dev/topics/class-based-views/intro/#decorating-the-class.
但是,我有点不清楚如何与装饰器一起传递特定参数,在这种情况下我想改变login_url装饰器的 https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required.
类似以下内容,仅有效:
@login_required(login_url="Accounts:account_login")
@user_passes_test(profile_check)
class AccountSelectView(TemplateView):
template_name='select_account_type.html'
你应该使用@method_decorator 与类方法 https://docs.djangoproject.com/en/1.9/topics/class-based-views/intro/#decorating-the-class:
类上的方法与独立函数不太一样,所以
你不能只将函数装饰器应用于方法 - 你需要
首先将其转换为方法装饰器。方法装饰器
装饰器将函数装饰器转换为方法装饰器,因此
它可以用在实例方法上。
然后只需使用所需的参数调用装饰器并将其传递给方法装饰器(通过调用可以接受参数的装饰器函数,您将在退出时获得实际的装饰器)。不要忘记将要修饰的方法的名称作为关键字参数传递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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)