Django - переключение базы данных во время выполнения

В моей работе мы хотим запустить сервер с несколькими базами данных. Переключение баз данных должно происходить, когда вы получаете доступ к URL, какhttp://myapp.webpage.com или жеhttp://other.webpage.com, Мы хотим запустить только один экземпляр сервера и в момент HTTP-запроса переключить базу данных и вернуть соответствующий ответ.

Мы искали приемлемое и «дружественное к Джанго» решение. В нашем исследовании мы нашли возможные способы сделать это, но у нас недостаточно информации о.

Вариант 1: промежуточное ПО Django

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

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

Другой вариант - установитьДжанго модель менеджер экземпляр в промежуточном программном обеспечении и заставить все модели переназначитьobjects атрибут из добавленного атрибута в пользовательском промежуточном программном обеспечении.

Мой последний вариант - создать новый атрибут в объекте запроса, полученном промежуточным ПО, которое возвращаетdatabase alias отsettings.py и в каждом запросе модели используйтеиспользуя метод.

Вариант 2: Mixin View на основе классов

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

Вариант 3: изменение настроек базы данных во время выполнения

Эта опция работает, ноНе рекомендуется и это слишком рискованно.

ОБНОВИТЬ:Как это работает?

middlewares.py

import django.conf as conf
import os.path


class SelectDB(object):

    def process_request(self, request):
        print request.META['HTTP_REFERER']
        file_database = open("booklog/database.txt", "r")
        database = file_database.read(10)
        file_database.close()
        if database != 'default':
            conf.settings.DATABASES['default']['NAME'] = database

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

Ответы на вопрос(1)

Ваш ответ на вопрос