Python/Django

[Django] User 모델 작성 방법 비교 (AbstractUser vs AbstractBaseUser)

yubi5050 2022. 6. 19. 14:51

👉 1. AbstractBaseUser vs AbstractUser 비교

  AbstractUser AbstractBaseUser
사용 시기 Django의 기본 유저 모델이 제공하는 다양한 인증 기능들을 사용 하는 경우

기존 필드에 추가 커스텀 필드만 필요시 사용

최소한의 User 필드만 상속 받아 커스텀하여 사용

로그인 방식도 변경(ex. 아이디를 email로), 할 수 있고, 인증 절차를 직접 구현하고 싶을 때 사용 가능

PermissionsMixin 을 함께 상속하여, Django의 기본 그룹, 허가권 관리 등을 사용 가능
생성 테이블 비교 myuser 테이블 (11개 필드)로 구성
id, username, password, last_login,
is_superuser, first_name, last_name,
email, is_staff, is_active, date_joined

myuser_groups 테이블
myuser_permissions 테이블 


myuser 테이블 (3개 필드) 로 구성
id, password, last_login



단 myuser2_groups나 myuser2_user_permissions 등의 테이블 등은 PermissionMixin과 같은 장고 인증 권한 클래스를 상속 받으면서 생김.
코드
(아래 예제 코드 비교)
AbstractUser는 settings.py에 AUTH_USER_MODEL 을 참조 설정을 필요로 함. 전적으로 AbstractUser 모델을 상속하여 따라가는 것이라, 만들고자 하는 User와 AbstractUser 간의 필드를 비교해 보는 것이 필요

 

👉 2. AbstractUser 예제 코드

models.py

from django.contrib.auth.models import AbstractUser
class myUser1(AbstractUser):
    # myuser (11개 필드): id, username, password, last_login.. 등
    # myuser_groups, myuser_permissions의 추가 테이블 생성
    # Django의 Default 사용자 인증 column들을 그대로 사용하는 경우.
    # 추가 필드 bio = models.CharField(max_length=20)
    pass

 

admin.py

from django.contrib import admin
from .models import myUser1

# Register your models here.
admin.site.register(myUser1)

 

settings.py

AUTH_USER_MODEL = 'user.myUser1'

 

👉 3. AbstractBaseUser 예제 코드

 

models.py

# models.py
from django.contrib.auth.models import AbstractBaseUser
class myUser2(AbstractBaseUser):
    # 기본적으로 id, password, last_login이 생성됨.
    # 자율적으로 custom 필드 추가하여 사용
    pass

 

admin.py

# admin.py
from django.contrib import admin
from .models import myUser2

# Register your models here.
admin.site.register(myUser2)

 

참고 문헌