С использованием функции входа в систему (запрос, пользователь) с базой данных, отличной от значения по умолчанию - Django? - PullRequest
0 голосов
/ 05 февраля 2019

При использовании функции входа в систему (запрос, пользователь) с базой данных, отличной от значения по умолчанию - Django?

user = authenticate(username=username, password=password)
login(request, user)

Есть ли возможность

Сеанс запроса был удален дозапрос выполненПользователь мог выйти из системы по параллельному запросу, например.

DATABASES = {
    'default':{
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),},
    'mw': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '01_sistema',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

Я создал маршрут, и он отлично работает с запросами.но с функцией login (запрос, пользователь) не работает.

class TenantRouter(object):

    def db_for_read(self, model, **hints):
        return get_thread_local('using_db', 'default')

    def db_for_write(self, model, **hints):
        return get_thread_local('using_db', 'default')

    def allow_relation(self, obj1, obj2, **hints):
        return True

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        return True

Middliware

def Multidb(get_response):
    def middleware(request):
        try:
            usuario = request.user
            empresa = usuario.empresa
            print('0')
        except:
            empresa = request.GET['empresa']
            print('1')

        @thread_local(using_db=empresa)
        def execute_request(request):
            return get_response(request)
        response = execute_request(request)
        return response
    return middleware

Вся проблема в том, что раздел входа в систему не зарегистрирован из-за ошибки влогин (запрос, пользователь)

спасибо всем за внимание.

1 Ответ

0 голосов
/ 05 февраля 2019
def tenant_middleware(get_response):
    def middleware(request):
        host = request.get_host().split(':')[0]
        subdomain = host.split('.')[0]

        response = get_response(request)
        return response
    return middleware


def multidb_middleware(get_response):
    def middleware(request):
        host = request.get_host().split(':')[0]
        subdomain = host.split('.')[0]

        @thread_local(using_db=subdomain)
        def execute_request(request):
            return get_response(request)

        response = execute_request(request)
        return response
    return middleware
...