Python django用户中的多个登录字段
在使用Django用户时,是否可以使用多个登录字段?Python django用户中的多个登录字段,python,django,Python,Django,在使用Django用户时,是否可以使用多个登录字段? 就像在Facebook上一样,我们可以使用用户名、电子邮件和电话号码登录。是的,的确如此!您可以编写自己的身份验证后端,如本节所述: 我们假设您已经创建了一个应用程序帐户/在其中扩展了附加电话字段的用户模型。 在account/内创建auth backend backends.py,并编写自己的身份验证逻辑。例如: from account.models import UserProfile from django.db.models im
就像在Facebook上一样,我们可以使用用户名、电子邮件和电话号码登录。是的,的确如此!您可以编写自己的身份验证后端,如本节所述: 我们假设您已经创建了一个应用程序帐户/在其中扩展了附加电话字段的用户模型。 在account/内创建auth backend backends.py,并编写自己的身份验证逻辑。例如:
from account.models import UserProfile
from django.db.models import Q
class AuthBackend(object):
supports_object_permissions = True
supports_anonymous_user = False
supports_inactive_user = False
def get_user(self, user_id):
try:
return UserProfile.objects.get(pk=user_id)
except UserProfile.DoesNotExist:
return None
def authenticate(self, username, password):
try:
user = UserProfile.objects.get(
Q(username=username) | Q(email=username) | Q(phone=username)
)
except UserProfile.DoesNotExist:
return None
return user if user.check_password(password) else None
将自定义后端放在项目的settings.py中:
AUTHENTICATION_BACKENDS = ('account.backends.AuthBackend',)
然后在帖子的用户名字段中通过用户名、电子邮件或电话进行身份验证
from django.contrib.auth import authenticate, login
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# Redirect to a success page.
else:
# Return a 'disabled account' error message
...
else:
# Return an 'invalid login' error message.
...
见: