我正在try 由两个装饰者装饰Django视图,一个用于判断登录,另一个用于判断is_active.
第一个是内置的@login_required
,第二个是:
def active_required(function):
dec = user_passes_test(lambda u: u.is_active, '/notallowed', '')
return dec(function)
现在,Python中的decorator 由内而外工作,但是以下内容不起作用:
@active_required
@login_required
def foo(request):
...
我想先判断用户是否登录,如果没有,重定向到登录页面,如果他/她登录,我想判断他/她是否处于活动状态,如果没有,执行重定向到'/notallowed'
.
如果所需的登录失败,用户不会被重定向到登录页面,但会执行@active_required
,因为在这种情况下用户为空,@active_required decorator失败,用户被重定向到/notallowed
.
改变顺序似乎有效,
@login_required
@active_required
def foo(request):
...
但我怀疑这种方法也有问题.
组合两个decorator 的正确方式是什么,为什么执行顺序与简单的Pythondecorator 不同?