목차
1. AbstractBaseUser
2. AbstractUser
3. User 모델 사용법 #AUTH_USER_MODEL
장고에선 고객(계정)을 표현하는 다양한 클래스를 기본적으로 제공한다. 가벼운 것에서 무거운 순으로 알아보자. 가벼울 수록 기본적으로 제공해주는 코드가 적어 개발자 입맛에 맞춰 커스텀이 쉽다(자유도가 높다). 하지만 한땀한땀 설정해줘야하기에 생산성은 떨어진다는 단점도 있다.
해당 클래스의 주요 필드는 다음과 같다.
password
last_login
is_active
https://github.com/django/django/blob/main/django/contrib/auth/base_user.py#L39
from django.contrib.auth.base_user import AbstractBaseUser
class User(AbstractBaseUser, PermissionsMixin):
pass
좀더 많은 기능을 제공하지만, 자유도는 낮은 AbstractUser를 상속 받는 경우도 있다. AbstractUser는 AbstractBaseUser과 PermissionsMixin을 상속받은 뒤, 약간의 필드, 설정과 매소드를 추가한 것이다. 여기서 약간의 필드란 다음과 같다.
username
first_name
last_name
is_staff
is_active
date_joined
추가적인 주요 설정은 다음과 같다.
EMAIL_FIELD = "email"
USERNAME_FIELD = "username"
REQUIRED_FIELDS = ["email"]
https://github.com/django/django/blob/main/django/contrib/auth/models.py#L335
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
기본적으로 장고 내부에는 AUTH_USER_MODEL = 'auth.User'이 설정되어 있다.
이를 수정하여 settings.py에 AUTH_USER_MODEL = 'accounts.User' 라고 정의한다.
그후 사용하고 싶은 곳에서 다음과 같이 설정하면 된다.
from django.contrib.auth import get_user_model
User = get_user_model()