django - 在 django 中访问视图之前检查多个装饰器
问题描述
我使用@user_passes_test装饰器来检查用户是否有权限查看视图。每个用户类型都有一个与装饰器一起使用的函数。像这样
@user_passes_test(ismanager,login_url='userauth:forbiddnpage')
@user_passes_test(isadministrator,login_url='userauth:forbiddnpage')
现在,如果第一个返回 false,则显示禁止页面。有什么方法可以让我在重定向或授予访问权限之前检查所有装饰器。谢谢您的帮助。
解决方案
如果你想为同一个装饰器测试多个条件,我建议你写一个新的,它使用user_passes_test
和可变数量的函数名称参数。您可以应用 and 的条件ismanager
并将is_administrator
lambda 中的结果发送到user_passes_test
.
这样做的动机可以是在内部以类似方式使用的login_required
装饰器。user_passes_test
此外,像您一样多次使用相同的装饰器会使代码变脏并且有点多余,所以这将是一个更好的解决方案。
推荐阅读
- rust - 在 Rust 中第 n 次出现字符时拆分字符串
- yaml - 如何通过 bash 命令将 txt 文件转换为 yml 文件?
- linux - 我无法使用 curl 运行 pastebin 脚本
- javascript - Angular:关于 Websocket 重新连接的问题
- python - 将变量设置为对象时,将其设置为内部的所有嵌套对象
- mysql - sqlalchemy 在检查并纠正 SQL 时不支持的格式字符
- angular - PrimeNg 组织结构图以编程方式刷新
- python - 使用 Sqlalchemy 生成带有 JWT 令牌的 OAuth2 错误
- reactjs - 如何从 React.js 应用程序访问 Kubernetes 容器环境变量?
- c# - c#继承和ISerialize接口