Динамически выбирать базу данных на основе запроса - PullRequest
1 голос
/ 06 февраля 2010

Я пытаюсь сохранить свой RESTful-сайт СУХИМЫМ, и я не могу придумать хороший способ выделить код для динамического выбора из отдельной базы данных каждого "пользователя". У нас есть отдельная база данных для каждого клиента. Это входит в состав URL-адреса и передается в каждое представление как ключевое слово arg. Я хочу дать каждому представлению поведение доступа к соответствующей базе данных, БЕЗ того, что каждый программист, пишущий представление, помнит, чтобы использовать

Thing.objects.using(user).all()

и

t = Thing()
t.save(using=user)

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

Thing.objects.all()

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

1 Ответ

1 голос
/ 06 февраля 2010

Мы делаем это по следующей методике.

  1. Apache отбирает первую часть пути и направляет ее к определенному демону mod_wsgi.

  2. Каждый демон mod_wsgi является установкой другого клиента.

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

Каждый клиент имеет отдельный settings.py со своей уникальной конфигурацией.

Они не знают (на самом деле не могут) друг о друге, потому что Apache отделил для нас верхний слой пути.

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