Używam Django 1.9.3. Mam projekt z kilkoma aplikacjami. Chciałbym zaktualizować tabele jednej z aplikacji podczas uruchamiania projektu.Django - kod wykonania przy uruchomieniu
Use-case:
Na przykład, powiedzmy, że chcemy sprzedawać przedmioty na mojej stronie internetowej. Mam aplikację, która zawiera model Przedmiot. Mam serwis internetowy poza Django, który zapewnia usługę "give_all_items_available()". Chcę przekazać mojemu użytkownikowi listę przedmiotów za pomocą strony internetowej. Wydaje mi się, że muszę aktualizować moją bazę danych regularnie (przy uruchomieniu i co jakiś czas) za pomocą danych wejściowych do usługi sieciowej.
mam cały kod napisany, wygląda następująco (jest to przykład):
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 ;-)
Moim problemem jest to, że nie wiem gdzie napisać ten kod
Strzały:
Do tej pory z Django 1.6.5 otrzymałem kod z pliku init .py mojej aplikacji. To działało, ale pomyślałem, że to było dość brzydkie (rozpoczęcie wątku z "importem" wygląda naprawdę jak ukryty kod).
Widziałem w Django 1.9 metodę "ready()". Ale jest napisane w dokumentacji, aby nie zajmować się modelami w tej metodzie, więc jestem zdezorientowany.
Mogę dodać kod startowy do polecenia uruchamiania mojego serwera, ale ten kod startowy jest zorientowany na aplikacje i moim zdaniem projekty nie mają z tym nic wspólnego.
Co byś polecił?
Chętnie udzielę więcej informacji w razie potrzeby.
Dzięki z góry,
Być może znajdziesz coś przydatnego w [tym pytaniu o stackoverflow] (http://stackoverflow.com/questions/2781383/where-to-put-django-startup-code). – Robin
Już to widziałem, zaakceptowana odpowiedź tego linku wymienia metodę "ready()" tak jak ja. Ale zgodnie z dokumentem Django, błędną praktyką jest interraktowanie z modelami w tej metodzie ... –
Co oznacza "startup" w tym przypadku? Zwykle uruchamiasz witrynę raz, a następnie działa ona nieprzerwanie. Dlaczego trzeba wypełniać tabele przy "uruchomieniu", a nie np. W migracji? –