在我的 Django 站点中,我计划使用 message_set 结合一些精美的 UI 来警告用户诸如“您的操作已成功完成”或“您有三个新消息”之类的事情。
当我尝试警告尝试登录的用户他提供的用户/密码错误时,就会出现问题 - AnonymousUser,出于显而易见的原因,没有 MessageSet。
我的问题:我对 message_set 的使用是好的做法(或者至少不是疯狂的)?关于如何解决错误登录凭据的特定情况的任何想法?我应该寻找一些更复杂的解决方案(我不知道它是否存在)?
在我的 Django 站点中,我计划使用 message_set 结合一些精美的 UI 来警告用户诸如“您的操作已成功完成”或“您有三个新消息”之类的事情。
当我尝试警告尝试登录的用户他提供的用户/密码错误时,就会出现问题 - AnonymousUser,出于显而易见的原因,没有 MessageSet。
我的问题:我对 message_set 的使用是好的做法(或者至少不是疯狂的)?关于如何解决错误登录凭据的特定情况的任何想法?我应该寻找一些更复杂的解决方案(我不知道它是否存在)?
只需使用会话来存储消息,然后在模板标签或上下文处理器中再次将其拉出:
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 方法那样的数据库调用。
或者您可以使用以下应用程序之一,为更复杂的情况提供解决方案(例如,多种消息类型 - 通知 - 错误 - 警告等)
django-flash - http://djangoflash.destaquenet.com/
django-notify - http://code.google.com/p/django-notify/
关于用户消息/通知主题的一些讨论放在这篇博文中。