gpt4 book ai didi

python - Django:如何根据数据库中的日期时间触发事件

转载 作者:行者123 更新时间:2023-11-30 23:10:41 24 4
gpt4 key购买 nike

我有一个简单的 Django 应用程序,其中包含一个数据库,该数据库存储一系列消息和日期时间,我希望它们打印到屏幕上。有没有办法让 Django 调用一个方法来检查是否有任何新消息需要打印,如果需要,则打印它们?

我听说过用 celery 来安排任务,但它对于我的需要来说似乎有点过分了。

最佳答案

在对斯图尔特答案的评论中澄清您的用例后,我建议使用 cronjobs 和自定义 manage.py 命令。

<小时/>

型号
要过滤掉所有未发送的通知,最好在模型上设置一个标志,例如is_notified = models.BooleanField(default=False)。通过这种方式,过滤必要的消息变得快速而容易,例如与MyModel.objects.filter(is_notified=False, 'send_on__lte': datetime.now())

<小时/>

自定义manage.py命令
在自定义 manage.py 命令中,您可以完全访问 Django 设置。编写它们记录在Writing custom django-admin commands中。 .

该命令通常(至少):

  • 过滤所有应发送的通知
  • 迭代它们并尝试发送电子邮件
  • 成功后,将 is_notified 设置为 True 并保存实例
<小时/>

定时任务
cronjob易于设置。 $ crontab -l 将列出当前安装的所有 cronjobs。 $ crontab -e 将打开默认编辑器(可能是 vi(m) 或 nano)来添加新的 cronjobs。

示例:每 5 分钟运行一次命令:

*/5 * * * * /home/foobar/my-virtualenv/bin/python /home/foobar/my-django-dir/manage.py my_django_command >> /home/logs/my_django_command.log 2>&1

通过将代码片段粘贴到调用 $ crontab -e 并保存文件后打开的文件中的新行来完成添加。

*/5 * * * *
指定每五分钟运行一次 cronjob。

/home/foobar/my-virtualenv/bin/python
指定从您的virtualenv(如果您使用的话)而不是系统版本调用Python。

/home/foobar/my-django-dir/manage.py my_django_command
就像您所做的那样调用您的 manage.py 命令。

>>/home/logs/my_django_command.log 2>&1
指定将 manage.py 命令生成的所有输出(标准输出和错误)保存到文件 my_django_command.log 中。只需确保目录(在本例中为 home/logs)存在即可。

关于python - Django:如何根据数据库中的日期时间触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com