【发布时间】:2011-03-05 19:37:49
【问题描述】:
我想使用 Django 的消息模块,但是,我希望我的消息一直存在,直到用户单击消息旁边的 X,而不是在用户重新加载页面后消息消失。
我被两个问题难住了: 如何让消息的上下文处理器在消息被访问后不删除消息? 一旦用户单击“删除”按钮(调用 ajax 调用),我以后如何从数据库中显式删除消息?
谢谢!
【问题讨论】:
标签: python ajax django django-users
我想使用 Django 的消息模块,但是,我希望我的消息一直存在,直到用户单击消息旁边的 X,而不是在用户重新加载页面后消息消失。
我被两个问题难住了: 如何让消息的上下文处理器在消息被访问后不删除消息? 一旦用户单击“删除”按钮(调用 ajax 调用),我以后如何从数据库中显式删除消息?
谢谢!
【问题讨论】:
标签: python ajax django django-users
自 2010 年底以来,图书馆 django-persistent-messages 就是为了实现这一目标。它有很好的文档记录,可以很好地创建一个 Stack Overflow 风格的消息系统。
它还集成了内置的Django消息系统,所以代码改动相对较小,对于不需要持久化的消息仍然可以使用原系统。
【讨论】:
在您的情况下,django.contrib.messages 不会给您带来任何好处。这是一个受 RoR flash 系统启发的消息系统,消息不应该一直存在
您应该创建自己的消息系统(可能是 django-persistent-messages?),它将注册用户的消息保存在数据库中。
如果您这样做,请不要忘记将其提供给其他人 =)
【讨论】:
从 1.2 开始,Django 有了一个新的消息框架——django.contrib.messages——现在完全脱离了auth 模块并提供了更多功能。例如,它提供了一种处理expiration of messages 的基本方法。
您还可以查看django-cnotes 应用程序,它提供了一个简单的基于 cookie 的用户通知系统。将常量CNOTES_AUTO_CLEAR 设置为False 可防止自动清除注释。
还有django-notices,这是内置消息通知系统的另一个替代品。它没有魔法,但提供了一个优雅而简单的 API。
【讨论】:
Django 消息似乎是一个很好的起点,但需要扭曲才能到达您想去的地方,而且我不相信 Django 的未来版本不会破坏您的 hack。
从长远来看,实现您自己的 UserMessage 模型可能会为您提供更好的服务。这使您可以完全、明确地控制消息生命周期。它也可能是一个不错的可重用应用程序。
【讨论】: