Django - 装饰器和错误消息

2 投票
3 回答
1806 浏览
提问于 2025-04-16 10:37

这个问题看起来很简单,但我找不到简单的答案。Django 提供了一种很方便的方法来限制访问,比如使用权限要求或登录要求的装饰器,但我在 Django 的文档中找不到如何传递错误信息的方法(也许可以用消息框架)。如果我必须自己写一个装饰器来实现这个功能,那 Django 的装饰器还有什么用呢?难道它们就不显示任何错误信息吗?

相关问题:

3 个回答

0

你会给用户发送一条自动的错误信息。你需要查一下怎么去覆盖这个信息。

2

我觉得你把安全性和权限搞混了,跟Django的认证系统混在一起了。大部分情况下,Django的工具主要是为了把用户分成两类:已认证的(登录的)和匿名的。这对90%的网站来说是合理的,因为你其实不需要太多的区分(可能还有一个隐藏的管理员,但那只是个特例,不是常见情况)。

permission_required这个装饰器是一个非常简单的工具,适合那些想要把没有权限的用户重定向到登录页面的人。不过,有时候这就不够了。如果你需要特定的权限,而用户没有,那把他们重定向到登录页面又有什么用呢?

在这种情况下,自己写一个装饰器来处理特定错误的消息是很简单的。下面是一个例子:

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

我猜你可能没仔细看这个内容

http://docs.djangoproject.com/en/1.2/topics/auth/#the-login-required-decorator

login_required() 的作用是:

如果用户没有登录,就会把他引导到 settings.LOGIN_URL,并在网址后面加上当前页面的地址。比如说:/accounts/login/?next=/polls/3/

如果用户已经登录,就会正常执行视图代码。视图代码可以放心地认为用户是已经登录的。

这里没有“错误信息”。错误信息听起来不太好,而且大多数情况下没什么用。它们往往是设计不好的表现。

通常情况下,你不需要提供一堆小解释。实际上,默认的登录页面对于80%的情况来说已经很好用了。如果你想更清楚地说明情况,可以自己提供一个HTML表单。你可以使用普通的模板上下文来添加额外的信息。你还可以使用消息框架在登录页面展示额外的信息。

撰写回答