hotamul의 개발 이야기

[Django] User Model 커스터마이징 #1 본문

Dev./Django

[Django] User Model 커스터마이징 #1

hotamul 2022. 6. 29. 23:45

DjangoModel 클래스인 User 클래스를 내가 원하는데로 커스터마이징 해보자.
(username을 사용하지 않고 email을 사용하고 싶기 때문..)

User 모델 이외에 다른 Model을 커스터 마이징 하는데에도 많은 도움이 될 거 같다.

먼저 사용할 클래스들은 AbstractBaseUser, PermissionsMixin 이다.


AbstractBaseUser

AbstractBaseUser 클래스는 User 모델을 커스터 마이징 하기 위해 필요한 클래스이다. 하지만 fields 들은 포함되지 않는다. (기본적으로 제공하는 fields가 없다는 뜻)

따라서 내가 원하는 fields들을 직접 정의해줘야 한다.


PermissionsMixin

PermissionsMixin 클래스는 django permission system 에 사용되는 클래스로 각각의 다른 유저들에게 permissions을 할당해주기 위해 사용한다 (authentication). 기본적인 fields, methods를 제공하고 있다.


Design custom model user

Fields

아래 4개의 fields가 필요하다.

  • email (EmailField)
  • name (CharField)
  • is_active (BooleanField)
  • is_staff (BooleanField)

추가적으로 만들어줘야 할 User model manager에 대해서도 간략하게 알아보자

User model manager

  • Used to manage objects (user model manager는 user model로 부터 생성될 객체를 관리한다)
  • Creating objects (따라서 객체 생성 로직 또한 커스터마이징 해줘야 한다)
    • Hash password
  • Used by Django CLI
    • Create superuser (CLI를 이용해 superuser를 만들 때에도 user model manager가 사용된다)

위처럼 user model manager는 user model 객체 생성/관리, superuser 생성 (using CLI) 등을 한다는 것을 알 수 있다. 따라서 User model manager 또한 커스터마이징 해줘야 한다.

BaseUserManager

  • Base class for managing users
  • Useful helper methods
    • noramlize_email: for storing emails consistently
  • Methods we'll define
    • create_user: called when creating user
    • create_superuser: userd by the CLI to create a superuser (admin)
Comments