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 запускается дважды при запуске

Другие вопросы по тегам