通过对非默认数据库使用登录(请求,用户)功能-Django?

时间:2019-02-04 21:35:17

标签: python django python-3.x django-2.1

在非默认数据库上使用login(request,user)函数-Django吗?

@Slf4j
@Component
@RequiredArgsConstructor
public class TopicListener {

  private final AvroKafkaMessageConverter messageConverter;

  @KafkaListener(topics = {"test-request"})
  public void listenForMessage(ConsumerRecord<?, ?> consumerRecord) {
    log.info("listenForMessage. got a message: {}", consumerRecord);
    Request request = messageConverter.convertFromInternal(
        consumerRecord, Request.class, MimeType.valueOf("application/vnd.*+avr"));
    log.info("request message: {}", request.getMessage());
  }
}

有没有可能

  

在请求完成之前,请求的会话已被删除。的   例如,用户可能已在并发请求中注销。

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',
    }
}

Middliware

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

整个问题是由于登录(请求,用户)错误导致未注册登录部分

谢谢大家的关注。

1 个答案:

答案 0 :(得分:0)

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