본문 바로가기

Web + APP/Django

커스텀 유저 모델

반응형
SMALL

본 글은 https://docs.djangoproject.com/en/3.0/topics/auth/customizing/에서 번역한 글입니다.

 

다른 블로그들 번역이 너무 답답해서 제가 직접 올립니다. (왤케 빠진게 많고, 입 맛대로 올려요..)

진짜 설명 못하는 글 볼 때마다 답답

근데 저도 설명 못하는게 함정 ㅋ


Django에서 워낙 좋은 Built-in User model 있다고 해도, 그게 모든 프로젝트에 적합하진 않습니다. 예를들어 Username 대신 이메일 주소로 identification token(로그인 토큰)을 대신하고 싶을 때가 있겠죠.

 

그래서 Django는 User model Override를 가능하게 만들어 놨습니다 !

 

*Override : 상속받은 Class의 메소드, 인자를 재정의하는 것, 즉 자기 입 맛대로 지지고 볶고 할 수 있는 것입니다. 물론 Override 안하더라도 상속받은 메소드, 인자 사용도 가능, 자주 등장하는 개념이니까 다들 잘 알고 넘어가세요.

 

단, User model을 Override를 하기 위해선 settings.py에 아래와 같은 코드를 넣어야합니다.

AUTH_USER_MODEL = 'myapp.MyUser'

# 여기서 myapp은 여러분들이 만든 app 이름을 넣으면 되고
# MyUser는 myapp 안에 있는 models.py의 User Class 명을 넣으면 됩니다.

# 저 같은 경우엔 app 이름이 users
# models.py의 class 이름이 User이기에
# AUTH_USER_MODEL = 'users.User' 입니다.

여기까지 했다면, Django가 '응, 그래. 너 입 맛대로 지지고 볶고 해보렴'이라고 허락을 해줍니다.

Project에 사용을 해보자

만약, 새로운 프로젝트를 시작했다면, 기본으로 주어지는 User 모델이 좋더라도 Custom User Model을 사용하시는 것을 추천합니다. 프로젝트가 진행되다보면 필요성이 느껴지실거니까, 애초에 그냥 해놓으세요.

from django.contrib.auth.models import AbstractUser

# AbstractUser를 상속 받음으로써, User id, admin 여부 등 다양한 것을 아래 class에서 사용이 가능합니다.
# 참고로 Abstract는 추상화 개념으로써, Abstract model은 DB에 직접적으로 영향을 주지 않는 model입니다.
# 보통 추상화 모델은 반복되는 model 항목을 간략하게 만들려고 사용됩니다.
class User(AbstractUser):
	pass

settings.py에 AUTH_USER_MODEL를 등록하는거 잊지 마시고, mirgations을 해보세요. 될거에요.

 

아 물론 User를 관리해야하는 admin 페이지에 user를 등록도 해야겠죠.

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

# admin.site.register(User, UserAdmin) 얘도 되지만

# 얘도 됩니다.
# 보통 얘로 하시는 것을 추천합니다. 나중에 손 볼 일이 많거든요.
# 예를들어서, admin 페이지에 원하는 데이터들을 보고 싶을 때, 아래를 손보기 편합니다.
@admin.register(models.User)
class CustomUserAdmin(UserAdmin):
	pass
    
# 위의 뜻은 admin 패널에서 models.User를 보고 싶어서 등록을 하는 것이고,
# models.User를 컨트롤 할 class를 CustomUserAdmin으로 선언해봤어 입니다.

이상 커스텀 유저 모델였습니다. ^_^

반응형
LIST

'Web + APP > Django' 카테고리의 다른 글

Get, Post 요청을 모두 알아서 처리하는 FormView !  (4) 2020.05.30
Class Based View  (0) 2020.05.10
Managers와 QuerySets의 이해  (0) 2020.05.02
추상 모델  (0) 2020.04.29
Django Setting 하기 !  (0) 2020.04.18