Обработка нескольких клиентов с их собственной базой данных в Django - PullRequest
0 голосов
/ 09 сентября 2011

Мне нужно разработать веб-приложение Django, которое может обрабатывать несколько клиентов со своими собственными базами данных.

Каждый клиент должен управлять своими различными пользователями и группами с соответствующими разрешениями и набором приложений Django.

Мне нужны отдельные базы данных в целях безопасности и масштабирования. Кроме того, каждый базовый размер может превышать 200 МБ. Помимо этих выделенных баз данных мне нужна «общая» база данных для хранения данных, общих для каждого клиента (и не должна реплицироваться для каждой базы данных клиентов).

Дело в том, что я не знаю, как обращаться с базами данных нескольких клиентов (и сохранять возможности аутентификации Django для каждого клиента независимо: пользователь / группа / привилегии).

Я нашел django-constance (https://github.com/comoga/django-constance), который позволяет менять настройки на лету, и я имею в виду авторизацию с идентификатором клиента + имя пользователя; таким образом, я могу загрузить нужную БД с идентификатором клиента и авторизуйтесь на этом с именем пользователя.

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

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

Большое спасибо за потраченное на это время.

1 Ответ

0 голосов
/ 09 сентября 2011

Keep It Simple - используйте то, что предлагает вам Apache (или nginx или что-то еще).

  1. Используйте mod_wsgi.

  2. Используйте Apache (или nginx или что-то еще), чтобы отделить URL-адреса клиентов друг от друга

    /cust1/path/to/resource
    /cust2/path/to/resource
    

    Если вы используете Apache (или nginx или что-то еще), чтобы разделить эти вещи, то каждый элемент пути верхнего уровня может направить запрос наконкретный экземпляр mod_wsgi

  3. Каждый экземпляр mod_wsgi имеет свой собственный settings.py, который имеет специальные учетные данные базы данных клиента.

  4. Каждый клиент settings.pyвероятно, следует начинать с from master_settings import *, чтобы у вас могли быть настройки «для всех клиентов», которые расширяются каждым конкретным клиентом.

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