首页 > 解决方案 > 在 django 中访问视图之前检查多个装饰器

问题描述

我使用@user_passes_test装饰器来检查用户是否有权限查看视图。每个用户类型都有一个与装饰器一起使用的函数。像这样

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

现在,如果第一个返回 false,则显示禁止页面。有什么方法可以让我在重定向或授予访问权限之前检查所有装饰器。谢谢您的帮助。

标签: django

解决方案


如果你想为同一个装饰器测试多个条件,我建议你写一个新的,它使用user_passes_test和可变数量的函数名称参数。您可以应用 and 的条件ismanager并将is_administratorlambda 中的结果发送到user_passes_test.

这样做的动机可以是在内部以类似方式使用的login_required装饰器。user_passes_test

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


推荐阅读