我正在开发一个大型Django应用程序,其中绝大多数需要登录才能访问。这意味着我们在整个应用程序中都花了很多钱:
@login_required
def view(...):
很好,只要我们记得将其添加到任何地方,它就可以很好地工作!可悲的是,有时我们忘记了,而且失败往往不是很明显。如果到视图的唯一链接是在@login_required页面上,则您不太可能注意到实际上无需登录即可进入该视图。但是,坏人可能会注意到,这是一个问题。
我的想法是反转系统。不必在任何地方键入@login_required,而是有类似以下内容:
@public
def public_view(...):
仅用于公共物品。我尝试使用一些中间件来实现它,但似乎无法使它正常工作。我认为,我尝试的所有内容都与我们正在使用的其他中间件进行了严重的交互。接下来,我尝试编写一些内容来遍历URL模式,以检查是否所有非@public都标记为@login_required-至少如果忘记了某些内容,我们将很快得到错误提示。但是后来我不知道如何判断@login_required是否已应用于视图...
那么,什么是正确的方法呢?谢谢您的帮助!