django admin 정리

이지훈·2022년 2월 3일
0

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으로 바뀐다.
이부분을 바꿔줘야한다.

profile
꾸준하게 🐌

0개의 댓글