Django에서 커스텀 사용자(Custom User)를 정의할 때 UserManager 클래스를 사용하는 이유는 4가지가 있다.
사용자 관리 기능
인증 기능
유효성 검사
장고의 관례와 호환성
class UserManager(BaseUserManager):
def create_user(self, phone_number, password=None):
if not phone_number:
raise ValueError("Users must have a phone number")
user = self.model(
phone_number=phone_number,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, phone_number, password):
user = self.create_user(
phone_number=phone_number,
password=password,
)
user.is_staff = True
user.is_admin = True
user.save(using=self._db)
return user
is_admin
과 is_staff
필드는 False로 지정되어 있다. True
값으로 변경된다.is_supseruser
, is_staff
부분을 True
로 만들어 데이터베이스에 저장한다.using
은 Django의 데이터베이스 라우팅(Database Routing) 기능을 사용하여 명시적으로 데이터베이스를 지정하는 데 사용되는 매개변수이다.using
매개변수를 사용할 수 있다.self._db
는 현재 사용 중인 데이터베이스를 가리키는 속성이다. using=self._db
는 현재 데이터베이스를 사용하여 데이터를 저장하도록 지정한다. AbstractBaseUser를 상속받는 주된 이유는 Django에서 제공하는 기본 인증 시스템을 커스터마이즈하기 위해서이다.
유연한 사용자 모델 구성: AbstractBaseUser를 상속받으면 사용자 모델을 필요에 맞게 구성할 수 있다. 기본 User 모델과는 달리 사용자 이름, 이메일, 핸드폰 번호 등을 식별자로 사용하거나 필요한 추가 필드를 정의할 수 있다.
인증 시스템 커스터마이즈: AbstractBaseUser를 상속받으면 사용자 인증 시스템을 완전히 커스터마이즈할 수 있다. 비밀번호 저장, 로그인, 로그아웃, 액세스 권한 부여 등과 같은 인증 관련 기능을 필요에 맞게 구현할 수 있다.
Django의 기능과 통합: AbstractBaseUser는 Django의 다양한 기능과 원활하게 통합된다. 예를 들어, 관리자 사이트, 인증 백엔드, 세션 관리 등 Django의 기능을 사용하면서 커스텀 사용자 모델을 사용할 수 있다.
커뮤니티 지원: Django 커뮤니티는 주로 AbstractBaseUser를 기반으로 한 커스텀 사용자 모델을 지원하고, 관련된 문서와 자료를 제공한다. 커스텀 사용자 모델을 AbstractBaseUser를 기반으로 구현하면 커뮤니티 리소스에 쉽게 액세스하여 도움을 받을 수 있다.
따라서, AbstractBaseUser를 상속받는 것은 Django의 인증 시스템을 커스터마이즈하여 프로젝트의 요구사항에 맞는 사용자 모델을 구현하고, Django의 다양한 기능과 통합하여 효율적인 개발을 지원하는 데 도움을 준다.
class User(AbstractBaseUser):
phone_number = models.CharField(max_length=20, unique=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = "phone_number"