Django - 在启动时执行代码

时间:2016-03-09 07:58:33

标签: python django

我正在使用Django 1.9.3。我有一个包含多个应用程序的项目。我想在项目启动时更新其中一个应用程序的表格。

使用情况:

例如,假设我想在我的网站上销售商品。我有一个包含模型项的应用程序。我在Django外面有一个Web服务,提供服务“give_all_items_available()”。我想向我的用户提供使用该网站的项目列表。所以我认为我必须定期更新我的数据库(在启动时和每隔一段时间)使用该Web服务输入。

我已经编写了所有代码,它看起来如下(这是一个例子):

from my_app.models import My_table

def on_startup():
     my_thread = Thread(execute = populate_tables, loopmode = True, background = True) # thread running in loopmode in background
     my_thread.start() # starts the thread and returns

def populate_tables()
     response = call_webservice() # let's imagine this method returns data for creating a new model instance
     My_table(response).save() # this save() isn't threadsafe in this example, but that's not my point ;-)

我的问题是我不知道在哪里写这段代码

尝试:

到目前为止,使用Django 1.6.5,我从我的应用程序的 init .py文件中获得了一些代码。它工作正常,但我觉得它很难看(开始一个带有“导入”的线程看起来很像隐藏代码)。

我在Django 1.9中看到了“ready()”方法。但它在文档中写的不处理这种方法中的模型,所以我很困惑。

我可以在启动我的服务器的命令中添加启动代码,但这个启动代码是面向应用程序的,在我看来,这些项目与它无关。

你会推荐什么?

如果需要,我很乐意提供更多信息。

提前致谢,

1 个答案:

答案 0 :(得分:1)

为什么不使用Celery?我知道你在询问如何在启动时填充你的物品表,但是......我认为这里的预定芹菜任务能够以自然的方式解决你的问题。