Django 2: как запустить код один раз при инициализации приложения? - PullRequest
0 голосов
/ 07 ноября 2019

Используя Django 2.2, как я могу запустить код один раз после загрузки кода, но до обработки любого запроса? (Аналогично коду, выполняемому в инициализаторах Rails).

Вариант использования следующий:

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

(Первоначально: https://stackoverflow.com/a/1117692/3837660, Я делал это при импорте модулей. Но это не оптимально. Отчасти потому, что я столкнулся с проблемой двойного импорта, которую я еще не решил, а отчасти потому, что яХотелось бы избежать создания пула соединений во время импорта модуля.)

Это должно быть сделано ровно один раз (независимо от того, был ли этот модуль импортирован дважды), но при запуске приложения (не на первомзапрос).

====================================

РЕДАКТИРОВАТЬ:

Видимо, работает

python manage.py runserver localhost:8000

дважды вызовет manage.py main. Как следствие, все импортируется дважды, а функция ready также вызывается дважды.

1 Ответ

1 голос
/ 07 ноября 2019

Я думаю, вы можете воспользоваться django AppConfig, документы здесь -> https://docs.djangoproject.com/en/2.2/ref/applications/#django.apps.AppConfig

from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _


class YOURAPPNAMEConfig(AppConfig):
    name = 'YOURAPPNAME'
    verbose_name = _('VERBOSE APP NAME')

    def ready(self):
        CODE YOU WANT TO RUN ON APP READY

Дайте нам знать, если это поможет вам.

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