jc.jang

14강 커스텀 User Model 만들기 본문

Django/Django - 인증편

14강 커스텀 User Model 만들기

jangstory 2019. 9. 5. 13:04

주제

  • 커스텀 User Model 만들기
  • 다양한 방법으로 User Model을 커스텀 할 수 있다.

노트

  • 예전에 프로젝트를 진행하다 필요에 의해 찾아본 적이 있다. 여러가지 방법이 있다.
  • 프로젝트 시작 전에, 적용 여부가 필요한 것도 있고 프로젝트 진행 중에 적용 가능한 것도 있다.
  • settings.AUTH_USER_MODEL 설정 값을 변경하여 기본 사용자 모델을 재정의 할 수 있다.

 

  • User를 확장하는 4가지 방법에 대해 알아보자.

첫번째, auth.User 모델과 1:1 관계에 있는 별도 모델 만들기

  • 이전 강의에서 Profile 모델을 만들고 OneToOneField로 User를 연결하는 것 처럼 새로운 모델을 만들면 된다.
  • 마이그레이션 과정이 필요함

 

두번째, Proxy User 모델: 제한적인방법

  • Proxy User 모델은 추가적으로 필드를 정의하지 않지만, 추가적인 함수를 구현하고자 할 때 사용한다.
  • 이걸 언제쓸까 싶지만 model methods, manager, ordering 등을 정의할 때 사용된다고 한다.
  • settings.AUTH_USER_MODEL에 지정 불가
  • 실제 데이터베이스 변경은 없지만, 마이그레이션 과정이 필요하다.

 

세번째, AbstractUser 모델 상속

  • 기본 User 클래스를 그대로 사용하고, 추가로 커스텀 필드/함수를 정의할 때사용
  • 마이그레이션 과정이 필요
  • settings.AUTH_USER_MODEL에 지정
  • 예를 들어, accounts 앱에서 성별 필드를 추가한 User 모델을 기본 사용자 모델로 지정하고 싶다면 다음의 과정이 필요하다.

 

  • accounts/models.py
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    sex = models.CharField(
            max_length=1,
            choices=(
                ('f', 'female'),
                ('m', 'male'),
            ))
  • AbstractUser를 상속받고 sex field를 지정한다.

 

  • 프로젝트/settings.py
AUTH_USER_MODEL = 'accounts.User'
  • 앱에서 만든 사용자 모델을 기본 사용자 모델로 지정한다.

 

  • accounts/admin.py
from django.contrib import admin
from .models import User


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    pass
  • 관리자 페이지에도 등록을 해주면 localhost/admin에서 확인 가능하다.
  • 프로젝트 시작 전에, 적용여부를 결정해야함
  • 이미 기본 유저 모델을 migrate했다면, migrate를 다 되돌리고 적용해야하므로 상당히 번거롭다.
  • 개인적으로, 첫번째 방법을 좋아한다.

 

네번째, AbstractBaseUser 모델 상속

  • 세번째 방법과 비슷하다.
  • 이 방법은 AbstarctUser 필드를 재정의하고 싶을 때 사용하면 된다.
  • 자세한 사용 방법은 wikidocs.net을 참고

질문

  • Proxy User는 언제 쓸까? 가입 환영 이메일을 여기서 작성하는건가? 이건 signupform에서 구현해도 될 것 같은데...? 흠... 언젠가 쓸 일이 있겠지!

요약

  • 첫번째 방법이 간단해서 좋은데 사용하지 않는 데이터들이 많거나 아예 새롭게 정의하고 싶다면 세번째 방법도 좋을 것 같다. 근데 나는 첫번째 방법이 간단하니까 이걸 쓸래요.

날짜

  • 오전 11시 30분, 20190905

 

Comments