본문으로 바로가기

일반적으로 모델을 만드는 방법을 알고 난 후에 보는 것을 추천합니다.

 

🚀 built-in User 모델을 custom User 모델로 대체하기

 

 

Customizing authentication in Django | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

어떤 프로젝트들은 Django가 제공하는 built-in User 모델이 적절하지 않을 수 있습니다.

예를 들어 어떤 사이트는 유저 네임이 아닌 email로 유저 식별을 할 수도 있습니다. 

또, 기본적으로 주어지는 User에는 프로필 사진도 없습니다.

 

 

 

기본적으로 주어지는 Users 

 

장고에서는 AUTH_USER_MODEL 설정값을 제공함으로써 디폴트 유저 모델을 덮어쓰기(override)할 수 있습니다.

 

 

Django allows you to override the default user model by providing a value for the AUTH_USER_MODEL setting that references a custom model:

 

# config/setting.py에 들어가서 직접 입력해줍시다.

AUTH_USER_MODEL = 'myapp.MyUser'

 

생성한 App의 모델명을 적어주면 됩니다.

 

 


 

 

설정을 알았으므로 직접 유저 App을 만들고 대체해보도록하겠습니다.

 

# app 생성
django-admin startapp users
from django.db import models
from django.contrib.auth.models import AbstractUser

# models.Model을 상속하는 것이 아니라 django가 가지고 있는 AbstractUser를 상속
class User(AbstractUser):

    pass
# config/setting.py에 들어가서 직접 입력해줍시다.

AUTH_USER_MODEL = 'users.User'

 

모델이 수정되었기 때문에 새로 migration 해주어야 합니다. (굳이 지금 할 필요는 없습니다. 마지막에 해도 됩니다)

# migrate를 만들고
python manage.py makemigrations

# migrate를 해줍니다
python manage.py migrate

 

 

 

 

이제 어드민 페이지에 무엇을 어떻게 보여줄지는 설정해야 합니다. users/admin.py를 수정합시다.

from django.contrib import admin
from . import models

# 앞서 만든 User 모델을 불러와서 데코레이터로 연결해줍시다.
@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):
    pass

 

 

그리고, config/setting.py에 등록된 앱에 Config를 추가해줍시다. Django에게 새로 만든 App을 알리는 것입니다.

본래 INSTALLED_APPS만 존재했지만 다음과 같이 built-in App과 custom된 App을 분리하여 적어주었습니다.

# config/setting.py

DJANGO_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

PROJECT_APPS = [
    "users.apps.UsersConfig",
]

INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS

 

 

runserver를 돌려보면 Users 모델이 추가된 것을 볼 수 있습니다.

users라는 App 하위에 Users라는 모델이 있는 모습입니다.

 


덤으로, users/models.py를 수정해서 모델을 수정해보겠습니다.

 

from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):

    bio = models.TextField(default="")

 

당연히 모델이 수정되었으므로 migrate해주어야 합니다.

 

# migrate를 만들고
python manage.py makemigrations

# migrate를 해줍니다
python manage.py migrate

 

이제 어드민 패널로 들어가 모델을 확인해보면 Bio가 생겼음을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체