Django 1.3,如何在帖子结束时如何在ebay上发出信号?

时间:2011-08-11 02:15:59

标签: python sql django django-models django-signals

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

所以我想通过django-notification做一个通知,或者当他的帖子在ebay上结束时,只是发送电子邮件给我的一个用户。在我的数据库中,我有一个模型,用于存储帖子即将结束的日期时间,但我不确定如何有效地检查或存储信号或某些信号会提醒系统在当前时间到来时提醒用户>比结束日期时间。

谢谢!

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

3 个答案:

答案 0 :(得分:1)

您可以使用django-celery - 连接post_save handler,检查created是否为True,如果是,请安排Task“通知用户在正确的时间(使用eta keyword arg)。

答案 1 :(得分:0)

听起来像你至少想过一些解决方案。但要记住的一件事是,作为一个Web框架的Django是一个无状态的“机器”。简而言之,这意味着它不会在一瞬间“运行”一个帖子到期(或者更确切地说,你不能假设一个帖子在一瞬间从浏览器发送请求到期)。这意味着使用Django发送/发送通知是不合适的。

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

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

答案 2 :(得分:0)

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

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

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