Django在模型日期时间字段中指定的时间执行任务.我相信,



有一个简单的问题,但它无论如何都让我陷入了困境。

假设我有一个简单的模型:

class myModel(models.Model):
    expires = models.DateTimeField(...)

我想,说在指定的时间做点什么:发送电子邮件,删除模型,更改一些模型字段。。。某物django核心中是否有一个工具,允许我这么做?

或者,如果没有,我认为一些任务排队工具可能是合适的。我的项目中有djcelery,尽管我是一个完全的新手,到目前为止我所能执行的就是运行django-celery-email包,以便异步发送邮件。尽管我不能说我完全有能力定义任务和员工在后台工作并可靠。

如果有任何想法,关于如何解决这样的问题,请不要犹豫=)

  1. 编写一个自定义管理命令来完成您想要的任务。完成后,您应该能够使用python manage.py yourtaskname运行任务。

  2. 使用cronatcelerydjango-crondjangotaskschedulerdjango-future中的定期任务来安排任务。

我认为最好的是后台任务,它读取日期时间,并在达到或已经达到日期时间时执行任务。

请参阅此处给出的计划任务的解决方案

因此,工作流程将是:

  • 创建要应用于已到达日期的对象的任务
  • 创建一个管理命令,检查数据库中的日期时间,并对到达日期时间的每个对象执行上述任务
  • 使用cron(Linux)或at(Windows)来安排命令调用

如果您在类似UNIX的机器上,那么您可能有权访问cronjobs。如果你在Windows上,我听说有一个名为at的程序可以做类似的事情。如果这不适合您的需求,有很多方法可以使用time库每X小时做一次事情(如果您想定期做一些事情,time.sleep(SOME_NUMBER_OF_SECONDS)和您想做的任何其他事情都会循环进行,否则您需要查看time.localtime()并检查条件)。

最新更新