#django #django-sites
#django #django-сайты
Вопрос:
У меня есть общее представление о том, что такое фреймворк сайтов, но после долгих исследований я не могу подтвердить, возможно ли то, чего я пытаюсь достичь.
Вот чего я хочу достичь (упрощенно). Это будут три отдельных сайта и отдельные проекты Django. Возможно ли это?
Сайт / проект 1: Customers.ourdomain.com
- Этот сайт управляет всем, что касается наших клиентов.
- Будет называться модель
Contact
, в которой хранится вся информация о клиентах (имя, адрес, электронная почта и т. Д.) - Иметь представления, предназначенные для просмотра объектов
Contact
модели, редактирования их деталей и т. Д
Сайт / проект 2: WorkOrders.ourdomain.com
- Этот сайт будет управлять всеми вещами, относящимися к рабочим заказам
- была бы
WorkOrder
модель для создания / редактирования / управления рабочими заказами для выполнения установок и обслуживания и т. Д. - Чтобы создавать рабочие задания для наших клиентов,
WorkOrder
модель должна знать оCustomer
модели с другого сайта. Сайту заказа на работу не нужно редактировать данные клиента — просто необходимо иметь доступ на чтение для всех клиентов
Сайт / проект 3: Accounting.ourdomain.com
- Сайт учета для обработки всех учетных данных, таких как счета, дебиторская задолженность, выручка и т. Д.
- Было бы множество моделей, связанных с учетом, например
Invoice
,Payment
, и т.д. - Сайт учета должен знать и получать доступ (только для чтения) ко всем записям как на сайте контактов (чтобы знать, кому выставлять счет), так и ко всем моделям заказов на выполнение работ, чтобы указать, сколько труда и материалов было использовано для определения причитающейся суммы.
Таким образом, будет три отдельных сайта, каждый из которых является отдельным приложением Django, но некоторые модели должны быть видны другим другим сайтам.
Возможно ли это?
У нас есть какое-то конкретное обоснование варианта использования для такого разделения функциональных блоков. Я знаю, что все это намного проще с отдельными приложениями, но для нас это не идеально.
Комментарии:
1. Конечно. Просто используйте ту же БД.
2. Это кажется простым ответом. Но как насчет миграции? Как перенос моделей клиентов влияет на рабочие задания?
3. Вы могли бы использовать повторно используемое приложение для определения всех моделей и включения его в каждый сайт. Если он
sys.path
включен, вам нужна только 1 копия, в которой должны быть размещены все его собственные миграции.4. Разве это не противоречит цели создания нескольких сайтов?
5. Зачем вам несколько сайтов?
Ответ №1:
В настоящее время я работаю над чем-то подобным. Наш проект Django включает в себя 3 приложения. Модели хранятся в соответствующих приложениях, но при необходимости используются совместно (импорт).
У нас есть три живых сайта, которые запускаются тремя приложениями.
___.something.com
___2.something.com
___3.something.com
Я не знаю, как это будет работать, если у вас будет три проекта для трех сайтов. Вам нужно будет убедиться, что модели и миграции всегда синхронизированы. Это стало бы очень непрактичным.
Вот почему в Django есть приложения в первую очередь. Итак, если вам нужно масштабироваться или расширяться, вы можете сделать это в том же проекте.
Комментарии:
1. Правильно — и у меня на самом деле есть отдельный проект с той же настройкой, которую вы описываете. Два отдельных домена, все в одном приложении Django, но с разными
settings.py
файлами (с общей базой). Я просто пытаюсь понять, что дальнейшее разделение возможно не только на уровне приложения. Я где-то читал, что пример в официальной документации Djangosites
на самом деле представляет собой два отдельных проекта Django, а не только различные приложения в рамках одного проекта. Это то, что заставило меня задуматься.
Ответ №2:
Это идеальный вариант использования для платформы сайтов. Определенно возможно сделать то, что вы описываете.
Преимущества:
- У вас будет одна база данных, доступная со всех трех доменных имен.
- Django может адаптировать шаблоны / данные, представленные пользователю, на основе поддомена.
- Вы можете сделать все это с помощью одного сервера…просто используйте виртуальные хосты на вашем сервере NGINX или Apache.
Комментарии:
1. Да, я все запустил и запустил, и это отлично работает. Два разных домена, очень разные возможности / цели, одна база данных для них обоих.