如何在Django通过手机号码或电子邮件地址登录?

2024-06-15 00:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我最初使用电子邮件和密码登录,但现在想更改它,以便我们可以使用手机号或电子邮件地址和密码登录。我不知道我的代码要更改的部分,因为我不想删除已经存在的用户和数据。在

在表单.py在

from django.contrib.auth.models import User
from django import forms


class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email', 'password']

在视图.py在

^{pr2}$

请考虑到我是Django新手。提前感谢:)


Tags: django代码namefrompyimport密码电子邮件
1条回答
网友
1楼 · 发布于 2024-06-15 00:33:29

在视图的post方法中,确定用户给了您什么。如果是电子邮件,则向Django的authenticate()方法提供电子邮件。如果不是,那么假设它是一个电话号码(您也可以在那里运行额外的验证),并在身份验证过程中使用这个号码。在

另一种方法是创建一个自定义的authenticate()方法,如下所示:

from django.contrib.auth.backends import ModelBackend


class MobilePhoneOrEmailModelBackend(ModelBackend):

    def authenticate(self, username=None, password=None):
        # the username could be either one of the two
        if '@' in username:
            kwargs = {'email': username}
        else:
            kwargs = {'mobile_phone': username}
        try:
            user = User.objects.get(**kwargs)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

    def get_user(self, username):
        try:
            return User.objects.get(pk=username)
        except User.DoesNotExist:
            return None

让我知道这对你是否有效。在

此线程中的用户user3282276也获得了积分:Log in user using either email address or username in Django

相关问题 更多 >