Как настроить django с уникальными настройками settings.py для SITE_ID

Я исследовал различные (а их много) способы иметь несколько сайтов в рамках одной структуры Django.

Я все еще не вижу решения, которое хорошо подходит для моего варианта использования. Вариант использования:

  • Единая база данных, так как большая часть данных (95%+) будет совместно использоваться двумя приложениями.
  • Два разных типа пользователей, каждый из которых входит в систему через разные домены и фактически по-разному взаимодействует с одними и теми же необработанными данными.

Чего я хочу добиться, так это:

Когда посетитель заходит на сайт example.com, действуют настройки SITE_ID = 1.

Когда посетитель заходит на training.example.com, действуют настройки для SITE_ID = 2.

Я хочу сделать это, потому что:

  • Я хочу использовать явно разные объекты UserProfile для разных пользователей.
  • Я хочу смешивать и сопоставлять представления и приложения по своему желанию между разными доменами

Документация Django по платформе Sites, похоже, мне не помогает, хотя в этой и некоторых других статьях я вижу несколько возможностей.

В настоящее время я думаю решить эту проблему с помощью сервера wsgi (в моем случае uWSGI), где я бы взял wsgi.py по умолчанию Django, продублировал его, и каждая конфигурация wsgi будет иметь свой собственный файл settings.py Django.

Тогда сервер фактически будет обслуживать два разных приложения wsgi, даже если они используют большую часть одного и того же кода.

Итак, в этом сценарии мой проект Django будет иметь:

  • example.com.settings.py (SITE_ID = 1)
  • training.example.com.settings.py (SITE_ID = 2)
  • example.com.wsgi.py (использует example.com.settings.py)
  • training.example.com.wsgi.py (использует training.example.com.settings.py)

Мой сценарий здесь должен работать, но это будет в два раза больше памяти, чем решение этого в одном и том же экземпляре Django.

Любая лучшая реализация для того, что мне нужно достичь?


person Community    schedule 15.10.2012    source источник


Ответы (1)


Насколько я знаю, settings.py уникален для каждого проекта django, и SITE_ID определяется на этом уровне. ИМХО, лучший подход - использовать множество проектов django с маршрутизаторами баз данных. В каждом проекте вы можете определить SITE_ID для использования с инфраструктурой сайтов django. https://docs.djangoproject.com/en/dev/topics/db/multi-db/#database-routers

person user1658078    schedule 16.10.2012
comment
settings находятся в области проекта, а не в области приложения. - person ; 17.10.2012
comment
Виноват. Имелись в виду проекты все время - person user1658078; 17.10.2012