有一个简单的问题,但它无论如何都让我陷入了困境。
假设我有一个简单的模型:
class myModel(models.Model):
expires = models.DateTimeField(...)
我想,说在指定的时间做点什么:发送电子邮件,删除模型,更改一些模型字段。。。某物django核心中是否有一个工具,允许我这么做?
或者,如果没有,我认为一些任务排队工具可能是合适的。我的项目中有djcelery
,尽管我是一个完全的新手,到目前为止我所能执行的就是运行django-celery-email
包,以便异步发送邮件。尽管我不能说我完全有能力定义任务和员工在后台工作并可靠。
如果有任何想法,关于如何解决这样的问题,请不要犹豫=)
-
编写一个自定义管理命令来完成您想要的任务。完成后,您应该能够使用
python manage.py yourtaskname
运行任务。 -
使用
cron
、at
、celery
、django-cron
、djangotaskscheduler
或django-future
中的定期任务来安排任务。
我认为最好的是后台任务,它读取日期时间,并在达到或已经达到日期时间时执行任务。
请参阅此处给出的计划任务的解决方案
因此,工作流程将是:
- 创建要应用于已到达日期的对象的任务
- 创建一个管理命令,检查数据库中的日期时间,并对到达日期时间的每个对象执行上述任务
- 使用cron(Linux)或at(Windows)来安排命令调用
如果您在类似UNIX的机器上,那么您可能有权访问cronjobs。如果你在Windows上,我听说有一个名为at
的程序可以做类似的事情。如果这不适合您的需求,有很多方法可以使用time
库每X小时做一次事情(如果您想定期做一些事情,time.sleep(SOME_NUMBER_OF_SECONDS)
和您想做的任何其他事情都会循环进行,否则您需要查看time.localtime()
并检查条件)。