execute code at startup

627 views
Skip to first unread message

Julien Greard

unread,
Mar 8, 2016, 12:38:25 PM3/8/16
to Django users
Hello,

I am using Django 1.9.3. I have a project with several apps. I would like to update the tables of one of the app at the startup of the project.

I have all the code written, it looks like the following (it's an example):

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 ;-)

So far, with Django 1.6.5, I came with some code from the __init__.py file of my app. It was working, but I thought it was quite ugly (starting a thread with an "import" looks really like hidden code).

I saw in Django 1.9 the "ready()" method. But it's written in the documentation to not deal with models in this method so I am confused.

I could add the startup code in the command starting my server but this startup code is app oriented and in my opinion, the projects has nothing to do with my app.

What do you recommend?


I'd be happy to provide more info if needed.

Thanks in advance,

Julien Gréard

Vernon D. Cole

unread,
Mar 9, 2016, 10:00:09 AM3/9/16
to Django users
I think if I were doing this, I would write a custom management command to update the tables, and run it at system startup time. Management commands are easy to debug and well documented.
Reply all
Reply to author
Forward
0 new messages