Что выполняется при запуске сервера и при поступлении запроса? - PullRequest
3 голосов
/ 22 июня 2009

Я занимался хакингом в Джанго. И я вызываю свои изменения из settings.py, поскольку полагаю, что это выполняется раньше всего.

Однако я только что столкнулся с ситуацией, когда это не работает для меня. Итак, есть ли другое место после settings.py, которое, я могу гарантировать, всегда будет запускаться сервером до того, как он начнет обрабатывать какие-либо запросы?

Ответы [ 4 ]

6 голосов
/ 23 июня 2009

Вы никогда не должны помещать код в settings.py, который требует импорта чего-либо из любой части Django. Поскольку для многих частей Django требуются настройки, это может привести к проблемам кругового импорта.

Ваш ROOT_URLCONF (urls.py) является разумным местом для размещения кода уровня проекта, который вы хотите запустить один раз для каждого процесса Python на сервере, прежде чем будут обработаны какие-либо запросы.

Если код относится к конкретному приложению (и необходим только в том случае, если это приложение используется), вы можете поместить его в models.py или __init__.py этого приложения.

Чтобы более подробно взглянуть на проблему, см. это сообщение в блоге .

0 голосов
/ 22 июня 2009

Что-то похожее на request_started сигнал ?

0 голосов
/ 23 июня 2009

Если вы хотите поместить код в ваш проект django, который будет запускаться наверняка при каждом запуске django, выберите форму приложения INSTALLED_APPS. И __init__.py, и models.py будут точно запущены. Это хорошие места для таких вещей, как сигналы или что-то, что вы должны зарегистрировать.

0 голосов
/ 22 июня 2009

Я не совсем уверен, что вы имеете в виду под «взломом классов», но пытались ли вы назвать свои изменения из ./manage.py?

С документы:

Кроме того, manage.py - это автоматически создается в каждом Django проект. manage.py - это тонкая оболочка вокруг django-admin.py, который заботится из двух вещей для вас, прежде чем делегирование на django-admin.py:

Это ставит пакет вашего проекта на sys.path. Это устанавливает DJANGO_SETTINGS_MODULE среда переменная, так что она указывает на ваш файл settings.py проекта.

так что если у вас есть какие-то вещи, которые вы хотите запустить после settings.py, это может быть в случае, если вы взломали.

НТН

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