代码之家  ›  专栏  ›  技术社区  ›  marcelo.delta

使用登录(请求、用户)功能和数据库而不是默认的-django?

  •  1
  • marcelo.delta  · 技术社区  · 7 年前

    使用登录(请求、用户)功能和数据库而不是默认的-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
    

    整个问题是由于登录中的错误(请求、用户),登录部分没有注册。

    谢谢大家的关注。

    1 回复  |  直到 7 年前
        1
  •  0
  •   marcelo.delta    7 年前
    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