Обслуживание отдельной базы данных на пользователя django - PullRequest
0 голосов
/ 26 марта 2019

Я создаю базу данных в соответствии с этим сейчас: Saperate PostgreSQL db для каждого клиента, с автоматизированными миграциями при создании клиента в одном приложении Django и на одном сервере

Теперь я хочу обслуживатьдБ на пользователя.Мы можем вернуть дБ из дБ-маршрутизаторов, только если они существуют в переменной DATABASES в файле настроек.

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

Settings.py
DATABASE_ROUTERS = ['app.router_middleware.DataBaseRouter']
DATABASES = {'default':
    {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'abc',
    'USER': 'xyz',
    'PASSWORD': '*****',
    'HOST': 'localhost',
    'PORT': '5432',
    }
}

import django
django.setup()
from Client.views import ALL_DB
DATABASES.update(ALL_DB)


Client.views
ALL_DB = { x.db_name: {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': x.db_name,
    'USER': 'xyz',
    'PASSWORD': '****',
    'HOST': 'localhost',
    'PORT': '5432',
 } for x in Client.objects.all()}

router_middleware.py

db_name = 'default'
class RouterMiddleware(CoreSessionMiddleware):

    def process_request(self, request):
        if request.user.is_authenticated() :
            user = request.user
            if ClientEmployee.objects.filter(user=user).exists():
               client_employee = ClientEmployee.objects.get(user=user)
               db_name = client_employee.client.db_name

class DataBaseRouter(object):
    def db_for_read(self, model, **hints):
    return db_name

def db_for_write(self, model, **hints):
    return db_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...