Является ли изменение SITE_ID динамически в промежуточном программном обеспечении хорошей идеей? - PullRequest
7 голосов
/ 07 апреля 2011

(это не является дубликатом "Изменение переменной настроек Django динамически на основе запроса для нескольких сайтов" , поскольку этот предыдущий вопрос посвящен более серьезной реконфигурации во время выполнения)

Iиспользуйте sites.Site для привязки контента к доменам / хосту в моем проекте (через внешний ключ).Выбор подходящего Site на основе request.META['HTTP_HOST'] происходит в моем специальном промежуточном программном обеспечении.

Однако я знаю, что такое использование sites Framework не совсем канонический путь (у меня есть один экземпляр приложения, обслуживающий разные данные для разных доменов, тогда как sites - AFAIK - был разработан для работы с несколькими экземплярами, по одному на каждый домен).

элемент, который беспокоитменя больше всего settings.SITE_ID - статическая настройка, которая связывает текущий экземпляр приложения с одним Site (домен).Это используется в нескольких местах, например contrib.auth (для составления полного, абсолютного URL в электронном письме для сброса пароля).Таким образом, было бы здорово динамически изменить SITE_ID на основе request.META['HTTP_HOST'].

Поэтому мой вопрос:

Динамическое изменение SITE_ID (то есть в промежуточном программном обеспечении) считается хорошимидея?

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

(правка):

Локально работает как положено (тестовый клиент Django), но я рассматриваю параллельные запросы в производственной среде с несколькими потоками и / или процессами.

1 Ответ

3 голосов
/ 27 мая 2011

Почему бы тебе просто не выключить django.contrib.sites? Если вы удалите это из INSTALLED_APPS, все будет в порядке.

В частности, любые хорошо написанные приложения теперь должны использовать функцию get_current_site из django.contrib.sites.models. Когда приложение сайтов не установлено, эта функция просто возвращает экземпляр объекта RequestSite (не модель), который работает аналогично стандартному экземпляру Site.

Чтобы ответить на первоначальный вопрос, динамическое редактирование настроек - это никогда хорошая идея .

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