Django - 装饰器和错误消息

时间:2011-01-26 01:30:50

标签: python django

这似乎是一个简单的问题,但我似乎无法找到一个简单的答案。 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 :(得分:0)

您将向用户发送一条自动错误消息..您必须了解如何超越..

答案 2 :(得分:-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用于在登录页面上显示额外消息。