【问题标题】:Sending messages to the user via django signals通过 django 信号向用户发送消息
【发布时间】:2010-08-10 02:33:52
【问题描述】:

如果这个问题没有意义,请原谅我;我最近睡得很少。

每当信号通过 django 的消息模块触发时,我想向用户发送通知,但我不知道如何将请求对象传递给 messages.success 方法。

我这样做是因为每当用户获得徽章时,我都需要告诉他。例如,当用户完成她的个人资料、进行一定数量的评分或制作一定数量的 cmets 时,就会奖励一个徽章。目前,用户告诉她有新徽章的唯一方法是转到徽章页面,但我想轻轻地通知用户该事件。

使用 django 通知会起作用,但我们现有的系统会太不和谐(目前它加载一个模式)并且由于它会访问数据库而更昂贵。

提前致谢。

【问题讨论】:

  • 您可能不想这样做。请解释你为什么要尝试这样的事情。只需在模板中显示消息是通常的解决方案。你想做什么?
  • “每当用户获得徽章”?什么?

标签: django


【解决方案1】:

Django 消息框架针对 HTTP 请求而不是用户进行操作(因此它也适用于匿名用户)。信号不知道要将消息附加到哪个请求,并且有问题的用户很可能当时甚至都没有登录。

听起来你正在尝试做的事情会更适合 django-notification,http://github.com/jtauber/django-notification/ 之类的东西。

【讨论】:

  • 谢谢,这正是我要找的。​​span>
  • 呃……重新考虑后,django 通知路由似乎不那么诱人了。尽量减少对数据库的查询是当务之急。
  • 哈哈,我只花了四年时间就意识到这符合我的问题中指定的所有要求。
  • @IntrepidDude:你是如何发送消息的?电子邮件?有没有办法在获得徽章时显示通知? (在他的浏览器或应用程序中)。顺便说一句很棒的评论,4年后回来......
  • @eugene 我最终还是使用了消息框架。用户需要通知的事件异步发生(在 celery 任务中)。在获得徽章时无法显示通知(因为 Rolo 所说的),但 DID 创建了一个函数来检查缓存以查看是否需要通知用户,并将该函数添加到主视图地点。编辑:过早提交响应。
【解决方案2】:

您不能直接在信号中使用消息框架,因为您无权访问请求。

您可以通过包装用户可能经常访问的视图来解决此问题,该视图可以检查新徽章并创建消息。然后,虽然他们不会在收到徽章后查看的下一个页面上收到消息,但他们会在创建消息的页面之后查看的第一个页面上收到消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 2020-09-28
    • 2016-11-30
    • 2012-01-18
    • 2023-03-11
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多