使用message_set的替代方法(尤其是对于AnonymousUser)

时间:2009-09-08 10:21:59

标签: django login custom-errors

在我的Django网站上,我计划使用message_set和一些花哨的UI来警告用户“你的操作已成功完成”或“你有三条新消息”。
当我尝试警告尝试登录的用户他提供的用户/通行证是错误的时候出现问题 - 出于显而易见的原因,AnonymousUser没有MessageSet。

我的问题:我是否使用了message_set良好做法(或者至少不是疯狂)?有关如何解决错误登录凭据的特定情况的任何想法?我应该寻找一些更复杂的解决方案(我不知道它是否存在)?

2 个答案:

答案 0 :(得分:3)

只需使用会话存储消息,然后在模板标记或上下文处理器中再次将其拉出:

def create_message(request, message):
    messages = request.session.get('messages', [])
    messages.append(message)
    request.session['messages'] = messages

def get_messages(request):
    messages = request.session.pop('messages', [])
    return {'messages' : messages}

在您看来:

# if login fails:
create_message(request, "Sorry, please try again")

在你的模板中:

{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}

这种方法不仅更好,因为您可以将它与匿名用户一起使用,但没有像message_set方法那样的数据库调用。

答案 1 :(得分:3)

或者您可以使用以下应用程序之一为更复杂的情况提供解决方案(例如,多种消息类型 -​​ 通知 - 错误 - 保护等)。

django-flash - http://djangoflash.destaquenet.com/

django-notify - http://code.google.com/p/django-notify/

有关用户消息/通知主题的一些讨论放在this blog post