2010-02-05 5 views
1

Я пытаюсь сохранить мой сайт RESTful DRY, и я не могу придумать, как отличить код от динамического выбора из каждой отдельной «пользовательской» базы данных. У нас есть отдельная база данных для каждого клиента. Это входит как часть URL-адреса и передается в каждое представление как ключевое слово arg. Я хочу, чтобы дать каждому посмотреть поведение доступа к соответствующей базе данных, не должны убедиться, что каждый программист писать вид помнит использоватьДинамически выбирайте базу данных по запросу

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

и

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

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

Thing.objects.all() 

Это также будет преимущество факторизации всего кода разрешения пользователя в более подходящем месте.

ответ

1

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

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

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

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

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

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

+0

Это было мое предложение. –

Смежные вопросы