Как динамически переключать базы данных для многопользовательской работы в Django без изменения основных настроек?
Я работаю над внедрением мультитенантности для приложения Django, где у каждого арендатора будет отдельная база данных. Я создаю базы данных динамически при создании нового арендатора, и мне нужно переключаться на базу данных арендатора для каждого запроса. Поскольку базы данных создаются "на лету", я не могу зарегистрировать их в файле settings.py
.
Для достижения этой цели я планирую создать промежуточное программное обеспечение, которое перехватывает запрос, проверяет наличие аутентифицированного пользователя, извлекает соответствующую базу данных для этого пользователя и динамически переключается на нее для выполнения запроса. Однако я не уверен в том, как правильно реализовать это в Django, учитывая его поведение при обработке базы данных по умолчанию. Мне нужно руководство по:
- Где изменить код: Какие файлы или области Django необходимо скорректировать, чтобы это заработало?
- Переключение базы данных: Как мне правильно переключиться на динамически создаваемую базу данных для каждого пользователя, не затрагивая другие запросы?
- Маршрутизаторы баз данных: Как мне использовать маршрутизаторы баз данных для динамического управления подключениями в моей пользовательской настройке?
- Рекомендации по наборам запросов и операциям: Что я должен иметь в виду при запросе данных или выполнении операций с динамически выбранной базой данных?
Я ищу решение, которое не требовало бы от меня значительных изменений в основном приложении и позволяло бы мне плавно переключать базы данных в зависимости от аутентифицированного пользователя для каждого запроса.
Я внедрил промежуточное программное обеспечение для динамического переключения базы данных в зависимости от аутентифицированного пользователя. Я использовал пользовательскую функцию для получения имени подключения к базе данных и изменил ее, чтобы использовать базу данных пользователя. Я также создаю новые базы данных для клиентов на лету, но я не уверен, где еще мне нужно внести изменения, чтобы это работало без проблем в Django. Я ожидал, что приложение переключится на базу данных клиента после аутентификации, но логика переключения не работает должным образом для определенных операций.