admin 회원가입 전화번호랑 비밀번호로 하기
공부를 하다가 django admin을 name이나 이메일이 아닌 전화번호
로 회원가입을 하고 싶어졌다.
방법은 무척 간단하다.
class UserManager(BaseUserManager):
def create_superuser(self, phone, password ):
user = self.create_user(
phone = phone,
password=password
)
user.is_admin = True
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
다음과 같이 BaseUserManager를 상속받는 UserManager를 만든다.
모든 항목을 True로 설정해서 http://127.0.0.1/admin/에 로그인할 수 있도록 만든다.
class User(AbstractBaseUser, PermissionsMixin):
name = None
phone = models.CharField(max_length=15, unique=True)
password = models.CharField(max_length=200)
# User 모델의 필수 field
is_active = models.BooleanField()
is_admin = models.BooleanField()
is_staff = models.BooleanField()
# 헬퍼 클래스 사용
objects = UserManager()
# 사용자의 username field는 phone으로 설정
USERNAME_FIELD = 'phone'
# 필수로 작성해야하는 field
REQUIRED_FIELDS = []
이제 BaseUser를 상속받는 유저 모델을 만든다. 아래 2개를 상속받는다.
AbstractBaseUser
: AbstractBaseUser모델을 상속한 User 커스텀 모델을 만들면 로그인 아이디로 이메일 주소를 사용하거나 Django 로그인 절차가 아닌 다른 인증 절차를 직접 구현할 수 있게 만들어준다.
PermissionsMixin
: The PermissionsMixin is a mixin for models. The PermissionsMixin [Django-doc] is a mixin for Django models. If you add the mixin to one of your models, it will add fields that are specific for objects that have permissions, like is_superuser , groups , and user_permissions .(슈퍼 유저를 만드는데 필요한 권한을 가진 오브젝트로 특정한 필드를 더해주는 역할)
user.is_admin = True
user.is_superuser = True
user.is_staff = True
is_active = models.BooleanField()
is_admin = models.BooleanField()
is_staff = models.BooleanField()
위에 3개 필드는 베이스유저를 만들때 True로 박아놔서 빈값을 둬도 된다.
# 헬퍼 클래스 사용
objects = UserManager()
핼퍼클래스를 사용하고 싶으면 클래스를 상속받아서 바로 사용가능하다.
# 사용자의 username field는 phone으로 설정
USERNAME_FIELD = 'phone'
이렇게 해야 로그인할 때 default = name으로 되어있던 것이 phone
으로 바뀐다.
이부분을 바꿔줘야한다.