在django中访问视图之前,请检查多个装饰器

在django中访问视图之前,请检查多个装饰器,django,Django,我正在使用@user\u通过\u测试装饰程序来检查用户是否具有查看权限。每个用户类型都有一个与装饰器一起使用的函数。像这样 @user_passes_test(ismanager,login_url='userauth:forbiddnpage') @user_passes_test(isadministrator,login_url='userauth:forbiddnpage') 现在,如果第一个返回false,将显示禁止页面。是否有任何方法可以让所有的装饰在重定向或提供访问权限之前得到检

我正在使用@user\u通过\u测试装饰程序来检查用户是否具有查看权限。每个用户类型都有一个与装饰器一起使用的函数。像这样

@user_passes_test(ismanager,login_url='userauth:forbiddnpage')
@user_passes_test(isadministrator,login_url='userauth:forbiddnpage')

现在,如果第一个返回false,将显示禁止页面。是否有任何方法可以让所有的装饰在重定向或提供访问权限之前得到检查。谢谢你的帮助

如果您想为同一个装饰器测试多个条件,我建议您编写一个新的条件,它使用
user\u passes\u test
和可变数量的函数名参数。您可以应用
ismanager
is\u administrator
的条件,并将结果以lambda格式发送给
用户\u passes\u test

这样做的动机可能是decorator,它以类似的方式在内部使用
user\u passes\u test


此外,像您这样多次使用同一个decorator会使代码变脏并且有点多余,因此这将是一个更好的解决方案。

您想同时检查ismanager或isadministrator吗?@seuling yes。必须检查两种用户类型。那么为什么不让函数同时包含这两种用户类型呢?@seuling但某些视图只能由一种用户类型访问,然后只需将函数同时包含这两种用户类型,并根据自己的需要使用它。您不必多次使用同一个装饰器。或者像@unixia所说的,您可以让自己的装饰器接受多个变量。