2011-01-26 84 views
2

这似乎是一个简单的问题,但我似乎无法找到一个简单的答案。 Django似乎给了这种使用所需权限或登录所需的装饰器限制访问位置的简单方法,但是我从Django文档看不到如何传递错误消息(可能使用消息框架)。如果我不得不推出我自己的装饰器来做到这一点,那么django装饰器有什么意义呢?他们只是没有显示任何错误信息?Django - 装饰者和错误消息

+0

您是否阅读过文档?他们重定向到登录页面。 – 2011-01-26 02:13:22

回答

-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表单。您可以使用普通的模板上下文来添加其他信息。您有Messages Framework用于在登录页面上显示额外的消息。

+0

我读过,谢谢。许多需要登录的网站会将您的错误信息重定向到您必须登录才能查看该页面的信息。你是说我应该只是为了显示“你必须登录”和另一个HTML页面来显示“你没有权限”的HTML页面?对我来说这似乎很愚蠢。如果您可以重定向到您的拥有登录表单的主页并提供一条消息,说明“请登录”或“您没有正确的权限”,这样做会更有意义 – JPC 2011-01-26 03:06:11

+0

也许对于简单的事情因为需要登录,但如果您需要特定的权限才能访问某些内容并且您已登录但未获得所需权限,该怎么办?显示某种类型的消息说明您需要什么样的权限是否有意义? – JPC 2011-01-26 03:10:17

0

您将发送自动错误的短信..你得看怎么为忽略用户..

+0

你的意思是,重写装饰器并创建自己的? – JPC 2011-01-26 03:10:42

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)