python - Django - 装饰器和错误信息

标签 python django

这似乎是一个简单的问题,但我似乎找不到简单的答案。 Django 似乎提供了一种非常简单的方法来使用所需的权限或需要登录的装饰器来限制对位置的访问,但我无法从 Django 文档中看到如何传递错误消息(可能使用消息框架)。如果我必须推出自己的装饰器来执行此操作,那么 django 装饰器的意义何在?他们只是不显示任何错误消息吗?

最佳答案

我认为您将安全性和权限与 Django 的身份验证系统混为一谈。在大多数情况下,Django 的工具主要设计用于将用户分为两组:经过身份验证(已登录)和匿名。这对 90% 的网站都有意义,因为您实际上不需要太多差异化(对于隐藏的管理员可能是另一个差异化,但这是一种边缘情况,而不是常态)。

permission_required 装饰器是一个非常简单的钩子(Hook),用于希望将没有权限的人重定向到登录页面的人。但是,在某些时候,这还不够。如果您需要特定权限而用户没有,将他们重定向到登录页面如何帮助他们?

在这种情况下,使用特定错误的消息来滚动您自己的装饰器非常容易。一个这样的例子:

def user_has_permissions(method):
    return user_passes_test(lambda u: u.has_perm('my_permission'), login_url='/permission-denied/')(method)

关于python - Django - 装饰器和错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800650/

相关文章:

Django 查询空的related_set

css - Django 静态文件未加载。修复 settings.py 以加载相对路径上的文件

python - coverage.py 不适用于相对导入?

django - 我可以在 Django 模型中封装其他类以获得更具可读性的代码吗?

python - 带有可选参数的 ArgumentParser(在互斥组中)

python - 我无法让我的 python 加密程序正常工作

Python弱依赖项目的打包

python - 什么时候在 Python 中选择 collections.Iterable 或 '__iter__' 属性?

python - 这段代码中 self[identifier] = some_value 做了什么?

python - Django 模型表单集 - 修改表单标签和默认值