- 내일배움캠프 28일 목차
[오늘 한일]
- 팀 첫회의 진행
- 개인 과제 시작
- 장고 심화강의 수강
[오늘 배운점]
역시 과제를 시작하니, 배운 내용을 다시 보게 된다.
심화 강의를 다시 들어가며 익힌 내용을 적어본다.
<AbstractUser와 AbstractBaseUser는 어떻게 다른가>
개인 과제는 회원가입 기능부터 시작했다.
유저 모델을 만들때 나는 AbstractUser가 익숙한데,
강의에서는 AbstractBaseUser와 BaseUserManager를 사용했다.
두개는 어떻게 다르고 과제의 요구사항을 어떻게 충족할수 있을지 고민해봤다.
AbstractUser는 기본 유저모델을 상속하면서 커스텀 모델을 만드는걸 도와준다.
그리고 AbstractBaseUser와 BaseUserManager조합도 같은 역할을 한다.
내가 인지한 대표적인 차이는 AbstracrtUser는 기본 유저모델의 필드를 모두 가져오고,
AbstractBaseUser는 원하는 필드만 만들도록 지원한다.
AbstractUser는 비교적 간편한 상속이고,
AbstractBaseUser 더 상세한 커스텀을 지원한다는 느낌이다.
과제에서 User모델에 대한 요구사항은,
이메일을 아이디로 삼아야 한다는 것이다.
강의에서 짚어주시는 링크에는
https://docs.djangoproject.com/en/dev/topics/auth/customizing/#a-full-example
AbstractBaseUser를 이용해 이메일을 아이디로 삼는걸 샘플로 보여주고있다.
그래서 AbstractBaseUser를 사용하면 과제를 충족할수 있다.
AbstractUser로는 불가능 할지 궁금했다.
인터넷으로 알아보니, 이런 Username필드를 바꾸는 기능을,
AbstractUser에서도 지원한다고 한다.
작성법도 똑같다.
class UserModel(AbstractUser):
email = models.EmailField(unique=True)
username = models.CharField(max_length=30, blank=True)
genders = (("M", "male"), ("F", "female"),)
gender = models.CharField(choices=genders, max_length=1, blank=True)
age = models.IntegerField(blank=True, null=True)
introduction = models.TextField(blank=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
def __str__(self):
return self.email
작성한 Model의 코드.
USERNAME_FIELD와 REQUIRED_FIELDS를 적어줬다.
(두개는 함께 있어야 한다. 위만 적고 아래를 생략하면 에러가 난다.)
또한 username은 username대로 상속해 blank=True를 부여해서,
필수 작성 속성을 제외했다.
결론적으로, 나는 AbstractUser로 작성했다.
추후 기능이 추가될 가능성등을 고려한다면,
AbstractBaseUser, BaseUserManager 조합을 선택하는게 좋을것이다.
중간에 유저모델을 바꾸는건 어렵다고도 하니 더 그렇다.
두 방법의 차이를 알고 알맞은 방법을 선택하는게 중요할것 같다.
(※ AbstractBaseUser, BaseUserManager는 꼭 동반되어야 한다.
AbstractBaseUser에 BaseUserManager를 지정하는 부분이 들어간다.)