Django는 메일과 핸드폰 번호로 로그인을 합니다.

1607 단어 Django
1. 원래의 User 모델에는 핸드폰 번호 필드가 없기 때문이다.따라서 User 모델을 확장합니다.
AbstractUser 클래스만 상속하면 됩니다.
from django.db import models
from django.contrib.auth.models import AbstractUser


class UserProfile(AbstractUser):
    nick_name = models.CharField(max_length=50, verbose_name="  ", default="")
    birthday = models.DateField(verbose_name="  ", blank=True, null=True)
    mobile = models.CharField(max_length=11, verbose_name="  ", default="")
    address = models.CharField(max_length=50, verbose_name="  ", default="")
    image = models.ImageField(verbose_name="    ", upload_to="users/%Y/%m", default="")

    class Meta:
        verbose_name = "    "
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username
2、  ModelBackend        
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q

from .models import UserProfile


class CustomBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            user = UserProfile.objects.get(Q(username=username) | Q(email=username) | Q(mobile=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

3、settings를 수정합니다.py, 추가
AUTHENTICATION_BACKENDS,      CustomBackend
AUTHENTICATION_BACKENDS = [
    'users.views.CustomBackend',
]

좋은 웹페이지 즐겨찾기