Django User Class 알아보기(1) : User, AbstractUser, AbstractBaseUser

GYUBIN ·2022년 10월 23일
0

장고 톺아보기

목록 보기
1/3

1. django.contrip.auth.models

from django.contrib.auth.models import User, AbstractUser, AbstractBaseUser

장고에서 유저모델을 생성한다면 User AbstractUser AbstractBaseUser을 사용하게 될 것이다.

User 클래스를 그대로 사용하는 경우는 거의 없고 보통 AbstractUser AbstractBaseUser 클래스를 상속받아 개발 목적에 맞게 커스텀하여 사용하게 된다.

필드를 분석해 장고 기본 모델은 어떤 기능을 제공하는지 알아보자

class User

User클래스는 AbstractUser클래스를 상속받아 생성된다.

클래스 설명을 해석하면 아래와 같다.

Django 인증 시스템 내의 사용자는 이 모델로 표현됩니다.
사용자 이름과 암호가 필요합니다. 다른 필드는 선택 사항입니다.

해당 클래스가 장고의 기본 유저 모델로 선정되어 있기에 커스텀 유저를 생성하고 기본 모델로 변경하고 싶다면 settings.py에서 변경해줘야 한다.

# project_name/settings.py

AUTH_USER_MODEL = 'accounts.User' # 'app_name.class_name'

class AbstractUser

AbstractUser클래스는 AbstractBaseUser클래스와 PermissionMixin클래스를 상속받아 생성된다.

관리자 호환 권한이 있는 완전한 기능을 가진 User 모델을 구현하는 추상 기본 클래스입니다.
사용자 이름과 암호가 필요합니다. 다른 필드는 선택 사항입니다.

해당 클래스에는 username first_name last_name email is_staff is_active date_joined 필드를 정의하고 있다.

class AbstractBaseUser

AbstractBaseUser클래스는 models.Model클래스를 상속받아 생성되고 password last_login is_active 필드를 정의하고 있다.

class PermissionMixin

ModelBackend를 사용하여 그룹 및 권한 모델을 지원하는 데 필요한 필드와 메서드를 추가합니다.

해당 클래스를 상속하면 장고의 기본 그룹, 허가권 관리 기능을 재사용할 수 있게 된다.


2. Custom User

1번에서 장고의 기본 유저 모델은 AbstractBaseUser -> AbstractUser -> User의 관계로 이루어져 있는 것을 확인했다.

커스텀 유저 모델을 만들기 위해선 장고의 기본 기능을 어디까지 유지하면서 사용할 것이냐에 따라 AbstractUser AbstractBaseUser 중 하나를 선택하게 된다.

장고의 경우 새롭게 프로젝트를 시작할 때 커스텀 유저 모델을 정의하고 시작하는 것을 추천하고 있다.
https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project

AbstractUser 상속

AbstractUser 클래스를 상속 받으면 장고 유저 모델의 기존 필드와 권한 등을 모두 사용하면서 필요한 필드를 추가할 수 있다.

유저 모델을 커스텀하는 가장 빠르고 간단한 방법이라고 할 수 있다.

AbstractBaseUser 상속

AbstractBaseUser 클래스를 상속 받으면 password last_login is_active 필드와 패스워드 관련 함수(해시 등)만 제공된다.

이렇게 커스텀 유저 모델을 만들면 최소한의 필드만 제공해주기에 자유도가 훨씬 높아진다.

다만, BaseUserManager를 상속 받는 새로운 클래스를 만들어줘야 하고 USERNAME_FIELD REQUIRED_FIELDS 등 필수적으로 정의해야할 내용이 존재한다.
https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#a-full-example


장고 유저 모델과 관련된 클래스들에 대해 간단하게 먼저 알아보았다.

다음 시리즈에선 모델을 직접 만들어 보면서 Django User Class에 대한 내용을 정리해보겠다.

0개의 댓글