2017-10-14 63 views
-1

我正在构建一个应用程序,我需要从API获取一些数据并每隔几分钟使用该数据更新所有模型。Django - 每隔几分钟更新一次模型

什么是干净的方式来完成这样的事情?

+1

编写一个管理命令并使用cron或类似计划。 – Selcuk

+1

管理命令+ [芹菜节拍](http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html)作为cron调度程序 – efkin

+1

如果这是你需要做的,你可以彻底检查如果你的架构最好。我会考虑按需查询API,并使用django的缓存系统或清漆或类似的方法缓存内存中的结果。 – schwobaseggl

回答

2

嗯,这是一个相当悬而未决的问题。

您需要创建一个每隔几分钟运行一次的任务,您可以使用Celery完成此任务。芹菜有一个任务调度器http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html这将在一个类似于crontab的配置时间启动某个功能

该任务然后将获取数据,http://docs.python-requests.org/en/master/是一个非常好的库,使http请求。

最后但同样重要的是,您需要序列化提取的数据并将其保存到模型中。 Django rest框架序列化功能是一个很好的起点,但是如果数据结构足够简单,您可以使用JSON python库json.loads(data)并创建一个将API上的字段转换为模型字段的函数。

顺便说一句,我假设一个REST API。

0

您可以使用任务管理工具,该工具具有按照指定的间隔运行周期性任务的功能,如Periodic TasksCelery。另外,如果你在一个类似Unix的系统上运行你的代码,你可以坚持使用核心的django功能。只需将您的功能编写为Django Management Command并设置cronjob即可在您的首选时间间隔内运行它。

相关问题