본문 바로가기
Library&Framework/Django

[django 기초] models 모듈 안에, User 클래스와 AbstractUser는 어떤 점이 다를까??

by 우지uz 2023. 4. 25.
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    age = models.IntegerField(blank=True, null=True)

1. 꼭 알아야 하는 내용!

 
참고 자료 : (https://whatisthenext.tistory.com/128)

[DJango] AbstractBaseUser vs AbstractUser 비교하기

AbstractUser vs AbstractBaseUser AbstractUser vs AbstractBaseUser AbstractBaseUser를 상속하게 되면 Class MyUser(AbstractBaseUser): pass 꼴랑 2개밖에 안던져준다(id는 자동생성 되는 필드니까). 이를 상속해서 유저 모델을

whatisthenext.tistory.com

 

먼저 User 클래스와 AbstractUser 클래스에 대해 간단히 설명하자면, 

User 클래스는 Django 에서 제공하는 기본 인증 모델이며
우리가 커스터 마이징 할 수 없는,
주어진 조건이 명확한 고정 클래스라고 할 수 있습니다. 
왜 고정 클래스냐 하면, 아래와 같이
모든 필드들의 종류와 크기가 이미 주어졌기 때문입니다!

  • username: 사용자 이름을 저장하는 필드.
    CharField로 정의되어 있고,
    최대 길이(max_length)는 150으로 설정되어 있습니다.
    이 필드는 유니크 필드입니다

  • first_name: 사용자의 이름(예: 성)을 저장하는 필드입
    이 필드는 CharField로 정의되어 있으며, 최대 길이(max_length)는 30입니다.

  • last_name: 사용자의 성(예: 이름)을 저장하는 필드.
    이 필드는 CharField로 정의되어 있으며,
    최대 길이(max_length)는 30으로 설정되어 있습니다.

  • email: 사용자의 이메일 주소를 저장하는 필드.
    이 필드는 EmailField로 정의되어 있습니다.

  • password: 사용자의 비밀번호를 저장하는 필드.
    이 필드는 CharField로 정의되어 있으며, 비밀번호는 암호화되어 저장됩니다.

  • is_staff: "사용자가 관리자 권한을 가지고 있는지 여부"를 저장하는 필드.
    이 필드는 BooleanField로 정의되어 있으며, 기본값은 False.

  • is_active: "사용자 계정이 활성화되어 있는지 여부"를 저장하는 필드.
    이 필드는 BooleanField로 정의되어 있으며, 기본값은 True.

  • date_joined: "사용자가 가입한 날짜"를 저장하는 필드.
    이 필드는 DateTimeField로 정의되어 있습니다.

그래서 User 클래스는, 이미 주어진 필드들을 활용하는 것이고
AbstractUser클래스는 이미 주어진 사용자 모델이 아닌
커스터마이징을 통해 필드를 추가하고 싶을 때 사용하는 클래스입니다!
 
집합으로 설명하자면, user.Model은 복소수 집합이고
AbstractBaseUser은 실수 집합이며
AbstractUser은 유리수 집합이고
User은 정수집합입니다. 
User라는 클래스는 이미 세번의 상속을 받은
필드들에 대한 것들이 주어져버린 클래스인 것이죠.