Как создать SaaS-приложение с Python и Django - PullRequest
22 голосов
/ 29 марта 2012

Можете ли вы посоветовать мне несколько статей / приложений, позволяющих создавать приложения SaaS (ПО как услуга) с Python и Django.

На данный момент общие темы, которые я не понимаю:

  1. У вас есть одно рабочее приложение для всех клиентов или одно приложение для каждого клиента
  2. Как вы управляете доступом к базе данных, разрешениями или различными БД для каждого клиента
  3. Существуют ли инструменты, позволяющие конвертировать одно приложение в SaaS

Ответы [ 4 ]

36 голосов
/ 17 апреля 2013
  1. один проект, это облегчит обслуживание.Я управляю разрешением хоста с помощью промежуточного программного обеспечения в django-ikari.
  2. Вы не делаете.см. # 1
  3. Я использую следующее:

  4. Покане обязательно, в долгосрочной перспективе поможет следующее:

    • django-hunger : частные бета-регистрации
    • django-waffle: функция flip
    • django-classy-tags: красивое, простое и аккуратное создание тегов-шаблонов
    • django-merchant: абстрактная структура шлюза оплаты
    • django-mockups: быстрое тестирование с моделями
    • django-мерлин: лучшие многошаговые формы (мастера)
  5. Наконец, приятно иметь

8 голосов
/ 29 марта 2012

Очень простой, элементарный пример того, как вы бы это сделали.

Предположим, у вас есть простое приложение, предназначенное для решения конкретного бизнес-кейса. Например, вы создали приложение для обработки бронирования номеров в вашем офисе.

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

Вот как будет конвертирован внешний интерфейс. Вы можете создать переменные для хранения логотипа, заголовка, тизера, цветовой схемы приложения; позволяя каждому пользователю настраивать свой экземпляр.

Пока что ваше приложение может настраивать себя на внешнем интерфейсе. Он все еще использует ту же базу данных, которая была разработана на первом этапе.

Теперь встает вопрос показа только тех полей, которые относятся к конкретному пользователю. Это будет параметризация базы данных. Таким образом, вы можете добавить столбец, который идентифицирует каждую строку как принадлежащую конкретному пользователю; затем создайте представления или хранимые процедуры, которые фильтруют записи на основе зарегистрированного пользователя.

Теперь приложение можно «сдавать в аренду»; так как вы можете настроить экземпляр на основе пользователя.

Затем он становится больше - в зависимости от масштаба, типа и предполагаемой настройки вашего приложения. Вы можете решить, что ваше приложение работает лучше, когда у каждого пользователя есть собственная выделенная база данных вместо хранимой процедуры + просмотр комбинированного списка.

Вы можете решить, что для некоторых типов пользователей (или «пакетов») вам нужен выделенный экземпляр вашего приложения. Таким образом, для «премиум» или «ультра» пользователей вы хотите иметь свою собственную выделенную систему.

Если вашему приложению требуется много места для хранения - вы можете решить отдельно взимать плату за хранение.

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

7 голосов
/ 29 марта 2012

Программное обеспечение как услуга - это просто маркетинговое слово, оно технически ничем не отличается от сервера, доступного через Интернет. Так что вопрос 3 не имеет смысла. Это оставляет нас с вопросами 1 и 2:

  1. Что вы подразумеваете под «приложением» в этом контексте? Ваше веб-приложение (созданное с помощью Python и Django) может иметь несколько приложений Django (компонентов, составляющих веб-приложение), но я думаю, что вы не это имеете в виду. Вы можете создать свой сайт на Python / Django и иметь различные параметры настройки в зависимости от того, какой пользователь (клиент) вошел в систему. Например, в премиум-клиенте может быть включено несколько расширенных параметров, но он все еще является частью той же кодовой базы. Просто некоторые параметры (кнопки / элементы управления и т. Д.) Не отображаются для определенных клиентов

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

2 голосов
/ 28 декабря 2017

У меня есть сообщение в блоге , описывающее мое предложение о создании мультитенантного веб-приложения SAAS с использованием Django.Мультитенантность здесь означает, что когда пользователи регистрируются, они имеют свой поддомен.Напомним:

  • Все арендаторы совместно используют одну базу данных, но у каждого свои схемы.Представьте, что у вас есть веб-сайт abc.com , и кто-то зарегистрировал арендатора xyz , чтобы они могли получить доступ к своей странице через xyz.abc.com , а затем для арендатора xyz у вас есть отдельная схема, содержащая все таблицы, таким образом инкапсулируя данные, относящиеся только к xyz арендатору.Есть и другие способы, например, иметь одну базу данных и одну схему для всех или даже отдельные базы данных.Но подход схем - лучший компромисс.Документация библиотеки django-tenants содержит более подробную информацию, если вам интересно
  • Используйте библиотеку django-tenants для абстрагирования работы с арендаторами.Когда кто-то обращается к xyz.abc.com , вам необходимо знать, что xyz является арендатором и что вам следует использовать схему xyz . django-tenants библиотека делает это для вас, поэтому при каждом запросе вы можете получить объект-арендатор, просто выполнив current_tenant = request.tenant
  • . Необходимо различать общие таблицы и таблицы, специфичные для клиента.Например, наличие таблицы со списком заказов зависит от арендатора.У каждого арендатора может быть своя собственная база данных, содержащая все его заказы.Эта таблица должна быть внутри xyz схемы.В то же время у вас будет несколько основных таблиц Django, таких как user .Данные могут быть разделены, например, чтобы запретить двум пользователям регистрироваться с одним и тем же адресом электронной почты.
  • Вам необходимо настроить DNS для перехвата подстановочного выражения *. Abc.com , для которого вы можете добавить запись A внутри вашей CPanel с помощью *.abc.comссылка на IP вашего сервера
...