1

我想实现一个提醒系统,其中将根据用户配置文件中的某个日期字段向用户发送提醒电子邮件。我该如何实现?许多人建议我不要使用芹菜。告诉我使用 cron 选项卡。

我就是这样做的,这是好方法吗?如果没有,请给我一个好方法。

如果 cron: 计划每天运行一个 python 管理命令,它将通过检查所有用户的日期来检查当天是否有一些提醒。
我认为这不好,我认为,每当用户选择他们的提醒日期时,该日期将被注册一些方式,并且作业将仅在该日期运行,但我不知道如何实现这一点。
我知道的实现方式:
创建一个名为“reminderdates”的数据库表,每当注册提醒时,将该日期和 user_id 添加到该表中。因此,每天运行一个 cron 作业,检查那一天是否在表中的日期中。如果是,将运行作业。此外,我将运行另一个 cron 作业,该作业将从表中删除所有较旧的提醒日期,因此表大小不会随时间增加。

4

1 回答 1

0

最简单的解决方案是设置一个 cron 作业来访问执行任务的站点上的 URL。不过我会推荐芹菜。这就是原因(来自Django/Celery Quickstart):

Cron 具有简单的优点,但它并不适合这项工作。您必须采取措施确保网站的普通用户无法直接点击这些 URL。它还强制您管理外部配置。如果您忘记在 qa 或生产服务器上执行配置怎么办?如果配置在站点的代码中,将会更安全、更容易。

您将在之前的链接中找到有关如何使用 celery 实现任务的教程。

至于您的reminderdates餐桌创意,它应该可以工作。如果你试试这个,你可以稍微简化一下:

  1. 添加具有已发送状态的列。您的任务将检查日期和发送状态。如果当天与提醒日期匹配且状态为“未发送”,则发送提醒。

  2. 您不需要辅助 cron 作业来删除旧提醒。发送提醒的同一任务可以发送每个提醒并在之后将其删除(在这种情况下不需要发送/未发送状态)。

于 2013-03-29T04:56:05.907 回答