У вас есть куча возможностей, чтобы solche ваших проблемы - разделение кода/модель не является самой большой проблемой, так как, если вы упаковать их в некоторых многоразовых приложениях, которые вы должны быть в состоянии использовать их в разных проектах.
Использование Django's Sites framework: Так как сайты будут в основном работать с тем же кодом, использовать ту же базу данных. Объекты контента будут иметь ForeignKey
pointing to a Site
. Это хорошо работает, если ваши сайты имеют точно такую же функциональность, может быть, только другой дизайн. Если вам нужно будет копать глубже в коде Python, чтобы настроить один сайт, это, вероятно, не самая лучшая альтернатива.
Вы можете найти решение с базой данных для пользователей и по одному для каждого сайта и обмениваться пользователями с помощью DB routers. Основным недостатком этого является то, что пользовательские данные и другие данные живут в отдельных базах данных, то есть вы не можете выполнять JOINs или что-то в этом роде. (Это отделит ваши данные очень чисто, не нужно фильтровать, если какой-либо контент принадлежит сайту или нет)
Напишите свой собственный authentication backend, чтобы каждый проект не аутентифицировал пользователя в отношении собственной базы данных, а против некоторых внешняя служба.
Я думаю, что проще всего будет с рамками сайтов, хотя, если один сайт нуждается в более глубокие настройки, которые могут повлиять на другой сайт (например, другой БД схемы на экземпляр), это может получить сложно, и вы должны иметь в виду, что каждое изменение может также повлиять на другой сайт.
Чтобы настроить это решение, вам необходимо иметь отдельный файл настроек для каждого сайта (вам нужно как минимум установить SITE_ID
на сайт). Кроме того, вы можете указать дополнительные параметры, такие как разные папки шаблонов и т. Д. Отдельно для каждого сайта.
settings
__init__.py
base.py
site_a.py
# site_a.py
from base import *
SITE_ID = 1
# eg different templates for this site
TEMPLATE_DIRS = (('site_a/templates/'),)
Сервер разработки, который вы можете запустить, затем с manage.py --settings settings.site_a
. Вы можете, например. также используйте разные urls.py
на сайт, если вы укажете его в настройках. В процессе производства вам нужно иметь два экземпляра, один с настройками для каждого сайта и, например. иметь обратный прокси-сервер, отправляющий запросы в нужный экземпляр.
Ну, вы действительно ищете многоязычный Django, назначаете контент на сайт и запрашиваете на основе текущего рабочего сайта. Есть много примеров, которые могут быть скорректированы с учетом ваших потребностей: http://www.two-legs.com/2011/08/creating-a-dynamic-multisite-using-django/ – petkostas