2

我很困惑,不知道该怎么做,所以如果我的描述/信息不好,请原谅我。

所以我想说通过 django-notification 发出通知,或者当我的一个用户的帖子像在 ebay 上一样结束时简单地向他发送一封电子邮件。在我的数据库中,我有一个模型,它存储帖子结束的日期时间,但我不确定如何有效地检查或存储信号或提醒系统在当前时间提醒用户的东西> 比结束日期时间。

谢谢!

由于我想在帖子结束的第二个发送电子邮件/通知,我认为我不能使用调度程序来检查是否有任何帖子已经结束,我相信这效率太低了,因为我必须每隔一秒检查一次,但就像我上面所说的,我不确定任何事情......

4

3 回答 3

1

您可以使用django-celery - 连接一个检查 if is的post_save处理程序,如果是,则安排一个在正确时间通知用户的处理程序(使用关键字 arg)。createdTrueTasketa

于 2011-08-11T02:49:23.783 回答
0

正如其他人所说,最好的解决方案是 django-celery(https://github.com/ask/django-celery),但如果资源不足,它会有点重量级。

在类似的需求中,我有一个中间件来检查条件并执行所需的操作(在我的情况下,它只是更改数据库某些记录中的布尔值)。这对我有用,因为在有人真正访问数据之前不需要更改它,并且因为“任务”只是一个 UPDATE 查询,所以它不是难以承受的负载。

否则,您可以每隔很短的时间(1 分钟?5 分钟?)设置一个 cron 作业并检查条件并执行后果。

于 2011-08-11T06:44:13.083 回答
0

在我看来,您至少已经考虑了一些解决方案。不过要记住的一件事是,作为一个 Web 框架的 Django 是一个无状态的“机器”。简而言之,这意味着它不会在帖子过期的瞬间“运行”(或者您不能假设在帖子过期的瞬间从浏览器发送请求)。这意味着使用 Django 来发信号/发送通知是不合适的。

但是,由于您确切知道应该何时发送电子邮件,因此应该可以在创建帖子后立即在 Django 中将通知排队。然后一些外部“程序”将不得不处理队列以实际发送通知......有各种创造性的方法可以做到这一点,但你当然可以使用 python 来做到这一点。

如果您想考虑使用消息队列,请查看 RabbitMQ http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/

于 2011-08-11T03:00:45.213 回答