首页 > 解决方案 > 使用登录(请求,用户)功能与默认以外的数据库 - Django?

问题描述

使用登录(请求,用户)功能与默认以外的数据库 - 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(request, user) 不起作用。

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

中间件

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

整个问题是由于 login(request, user) 中的错误而未注册登录部分

谢谢大家的关注。

标签: pythondjangopython-3.xdjango-2.1

解决方案


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

推荐阅读