Study/Django

[Django] 장고 유저 기능 구현하기 #2 ( 유저 모델 정의하기)

SoShin_ 2021. 12. 15. 00:24
반응형

2021.12.14 - [Study/Django] - [Django] 장고 유저 기능 구현하기 #1 (allauth와 contrib.auth의 차이)

 

[Django] 장고 유저 기능 구현하기 #1 (allauth와 contrib.auth의 차이)

Django에는 기본적으로 유저 기능을 구현하기 위한 Django.contrib.auth라는 패키지가 포함되어 있습니다. contrib은 contributed ( 기여하다 )의 약자이고 auth는 authentication( 유저 인증 )의 약자입니다. 직..

programmers-sosin.tistory.com

유저 기능을 구현하기 위해 가장 먼저 해야 할 일은 유저 모델을 정의하는 것입니다.

앞 게시글에서 모델을 django.contrib.auth로 만든다고 하였는데 이때, contrib.auth는 기본 유저 모델과 상속받아 사용할 수 있는 유저 모델 두 가지를 제공해줍니다.

 

그래서 선택할 수 있는 옵션은 총 3가지입니다.

  1. 기본 유저 모델 사용하기
  2. AbstractUser모델을 상속받아서 사용하기
  3. AbstractBaseUser 모델을 상속받은 후 커스터마이징 하기

이렇게 3가지의 옵션이 있는데 이 중 첫 번째는 장고에서 권장되지 않습니다.

그 이유는 장고에서 유저 모델을 한번 정의하면 다른 모델로 바꾸는 것이 어렵기 때문입니다.

 

그럼 AbstractUser모델과 AbstractBaseUser모델의 차이를 알고, 그중에서 선택하면 되겠죠?

AbstractUser모델은 있는 기능을 정의만 해서 사용하면 되는 반면에 AbstractBaseUser모델은 유저를 만들기 위한 틀만 제공하고, 유저에게 필요한 모든 필드를 직접 정의해줘야 합니다.

 

즉 그냥 있는 것을 가져다 쓰고 싶다면 AbstractUser모델을 사용하고, 자신이 모든 기능을 커스터마이징 해서 사용하고 싶다면 AbstractBaseUser모델을 사용하면 됩니다.

AbstractUser 모델과 AbstractBaseUser모델 차이

하지만 저는 기본적으로 설정된 필드를 사용할 것이기 때문에 2번 옵션인 AbstractUser모델을 사용하겠습니다!

# models.py
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

위와 같이 models.py에 AbstractUser를 상속받고 모델을 생성해줍니다!

현재 바로 모델을 사용할게 아니기 때문에 내용엔 pass로 넣어놨습니다.

# settings.py
AUTH_USER_MODEL = '앱이름.모델이름'
AUTH_USER_MODEL = 'coplate.User'

그 후 settings.py 에 가서 위의 내용을 추가해줍니다! 저의 경우엔 앱 이름은 coplate이고, 모델 이름은 User이기 때문에 위와 같이 적어주었습니다.

이렇게 설정을 해주어야 migration을 했을 때 저의 커스텀 유저 모델을 참조해서 테이블을 만들어 주고, allauth가 저의 커스텀 모델을 사용할 수 있기 때문입니다.

 

그 후 변경된 모델을 저장해주고 적용시켜 주면 이번 게시글에서 할 일은 끝!입니다!

 

다음 게시글에선 드디어 allauth를 세팅해보겠습니다!

 

반응형