Как динамически переключать базы данных для многопользовательской работы в Django без изменения основных настроек?

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

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

  1. Где изменить код: Какие файлы или области Django необходимо скорректировать, чтобы это заработало?
  2. Переключение базы данных: Как мне правильно переключиться на динамически создаваемую базу данных для каждого пользователя, не затрагивая другие запросы?
  3. Маршрутизаторы баз данных: Как мне использовать маршрутизаторы баз данных для динамического управления подключениями в моей пользовательской настройке?
  4. Рекомендации по наборам запросов и операциям: Что я должен иметь в виду при запросе данных или выполнении операций с динамически выбранной базой данных?

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

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

Вернуться на верх