本篇共 1789 字

django如何自定义手机号或邮箱登录?

作者:admin   分类:Django   发布:6 月前   阅读量:1   浏览量:1

我这里的用户模型是继承了django的AbstractUser类

from django.contrib.auth.models import AbstractUser   # 继承系统用户类


class UserProfile(AbstractUser):
    """
    用户
    """
    # user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
    name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名")
    birthday = models.DateField(null=True, blank=True, verbose_name="出生年月")
    gender = models.CharField(max_length=6, choices=(("male", u"男"), ("female", "女")), default="female", verbose_name="性别")
    mobile = models.CharField(null=True, blank=True, max_length=11, verbose_name="电话")
    email = models.EmailField(max_length=100, null=True, blank=True, verbose_name="邮箱")

在settings中必须配置:AUTH_USER_MODEL = 'users.UserProfile'

 

在views.py中引入如下代码:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model

User = get_user_model()   # 无论是定制用户还是系统用户通用


class CustomBackend(ModelBackend):
    """
    自定义用户验证,继承ModelBackend, 重写authenticate方法
    """
    def authenticate(self, request, username=None, password=None):
        try:
            user = User.objects.get(Q(username=username)|Q(mobile=username))
            if user.check_password(password):   # 加密明文密码
                return user
        except Exception as e:
            return None

在settings.py中配置:

  • 其中users为用户相关的应用名称
# Application definition
AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
)
标签: django
本篇共 0 条评论

留言内容:

还没有任何评论!

还没有登陆,请登录后发表评论!