Django: вызывать метод только один раз при запуске django
Я хочу инициализировать некоторые переменные (из базы данных) при запуске Django.
Я могу получить данные из базы данных, но проблема в том, как мне вызвать метод initialize. И это следует назвать только один раз.
Пробовал искать в других страницах, но не смог найти ответ на него.
Код в настоящее время выглядит примерно так:
def get_latest_dbx(запрос,....):
# получить данные из базы данных
def get_latest_x(запрос):
get_latest_dbx (запрос, х,...)
запуск по умолчанию (запрос):
get_latest_x (запрос)
2 ответа
Некоторые люди предлагают ( выполнить код, когда Django запускает только ОДИН РАЗ?), Чтобы вызвать инициализацию в файле верхнего уровня urls.py(что выглядит необычно, поскольку urls.py должен обрабатывать шаблон URL). Существует еще один обходной путь - написание промежуточного программного обеспечения: куда поместить код запуска Django? Но я полагаю, что большинство людей ждут решения проблемы.
ОБНОВИТЬ:
Поскольку ОП обновил вопрос, кажется, что промежуточное ПО может быть лучше, так как ему действительно нужно request
объект при запуске. Все коды запуска могут быть помещены в пользовательское промежуточное ПО process_request
метод, где request
Объект доступен в первом аргументе. После выполнения этих кодов запуска может быть установлен некоторый флаг, чтобы избежать их повторного запуска позже (повышение MiddlewareNotUsed
исключение работает только в __init__
, который не получает request
аргумент).
Кстати, требование ОП выглядит немного странно. С одной стороны, он должен инициализировать некоторые переменные при запуске Django, с другой стороны, ему нужно request
объект в инициализации. Но когда запускается Django, может вообще не быть входящего запроса. Даже если есть, это не имеет особого смысла. Я предполагаю, что ему действительно нужно выполнять инициализацию для каждого сеанса или пользователя.
Есть несколько читов для этого. Общее решение состоит в том, чтобы попытаться включить исходный код в некоторые специальные места, чтобы при запуске сервера он запускал эти файлы, а также запускал код.
Вы когда-нибудь пытались поставить print 'haha'
в файлах settings.py:)?
Примечание: имейте в виду, что settings.py запускается дважды при запуске