我想出了如何在辅助数据库中创建用户,但是在查看用户是否存在时,我无法弄清楚应该使用什么来使数据库使用辅助数据库而不是默认数据库然后可以通过身份验证。
说我有:
user = authenticate(username=username, password=password)
如何告诉django使用名为secondary的数据库而不是使用默认数据库?
另外,我假设这些方法遵循相同的方法,但我如何使用辅助数据库来使用login()或logout()。
答案 0 :(得分:1)
身份验证只接受凭据,并且是在您获得用户之前在后端调用身份验证的快捷方式:
https://github.com/django/django/blob/master/django/contrib/auth/init.py#L39
假设您使用的是默认后端(https://github.com/django/django/blob/master/django/contrib/auth/backends.py#L4),我认为无法使用此后端并选择非默认数据库。
from django.contrib.auth.backends import ModelBackend
class NonDefaultModelBackend(ModelBackend):
"""
Authenticates against django.contrib.auth.models.User.
Using SOMEOTHER db rather than the default
"""
supports_inactive_user = True
def authenticate(self, username=None, password=None):
try:
user = User.objects.using("SOMEOTHER").get(username=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.using("SOMEOTHER").get(pk=user_id)
except User.DoesNotExist:
return None
我认为这会给你与默认后端相同的行为但是使用非默认的db。然后,您可以将后端添加到设置中或直接替换默认后端。
AUTHENTICATION_BACKENDS = (
'path.to.mybackends.NonDefaultModelBackend',
'django.contrib.auth.backends.ModelBackend',)
左右。