Django 1.11 Как выполнить код только один раз, чтобы сохранить данные в БД с использованием модели Django - PullRequest
0 голосов
/ 25 января 2019

Я начинаю работать с Django Rest Framework, мое приложение основано на версии Django 1.11.

У меня есть название модели Test.Теперь мне нужно заполнить эту модель один раз только при запуске приложения, которое будет получать данные из вызова REST API.Я читал о app.ready (), однако не могу понять, как подключить эти шаги.

Так что в основном, когда приложение запускается:

  1. Проверьте, еслив таблице A присутствуют некоторые данные, предпочтительно путем вызова objects.count ().

  2. Если да, ничего не делать.

  3. Если нетПозвоните в сторонний API и сохраните модель.

Это также можно сделать в Admin?

1 Ответ

0 голосов
/ 25 января 2019

Есть несколько способов сделать это.Наиболее чистый подход заключается в создании новой пользовательской команды , например:

# app/management/commands/updateappdb.py

from django.core.management.base import BaseCommand, CommandError   
from polls.models import Question as Poll

class Command(BaseCommand):
    help = 'Update DB'


    def handle(self, *args, **options):
        # Update code here
        if not YourModel.objects.exists():
           # do something
        self.stdout.write(self.style.SUCCESS('Successfully Updated')

Затем вы можете использовать эту команду, например:

python manage.pyupdateappdb && python manager.py runserver

Существует другой подход, который заключается в том, чтобы записать их в urls.py.Urls.py загружается один раз при запуске сервера.Так что в urls.py вы можете попробовать вот так:

from django.confs.urls.defaults import *
from your_file import data_import_function  # which has the data load functionality

urlpatterns = [...]

data_import_function()

Но среди этих двух подходов я предпочитаю первый.Потому что он будет более пригоден для повторного использования, и вы можете интегрировать эту пользовательскую команду с cronjob, если вам нужны периодические обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...