我有一个简单的Django应用程序,其中包含一个数据库,用于存储我希望它们打印到屏幕的一系列消息和日期时间。有没有办法让Django调用一个方法来检查是否需要打印任何新消息,如果是,打印它们?
我听说过芹菜用于安排任务,但似乎对于我需要的东西来说太过分了。
答案 0 :(得分:2)
在对斯图尔特答案的评论中澄清您的用例后,我建议使用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 强>
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 )存在。
答案 1 :(得分:0)
您是否需要将它们打印到页面而无需用户在浏览器中刷新页面?如果是这样,您需要编写一些JavaScript AJAX代码来连续轮询您的应用程序视图,以便将新内容写入页面。
以下是使用Django的AJAX示例教程:https://realpython.com/blog/python/django-and-ajax-form-submissions/
答案 2 :(得分:0)
如果您不想使用cron
,则可以使用django-cronograph。