Django UserModel 확장 (feat. AbstractUser)

Huey_J·2021년 4월 7일
2

장고 프로젝트

목록 보기
2/2
post-custom-banner

📢 시작하기 전에...

🙄 확장이 왜 필요해?

Django에는 권한 및 인증에 대한 기본적인 기능들을 제공하고 있는데요. 사용자 정보가 담길 User Model 역시 이미 구현이 되어있기 때문에 쉽게 로그인 기능을 구현할 수 있습니다. 하지만 실제 서비스에서 저장해야 하는 사용자 데이터들이 대부분 다르기 때문에 해당 기능들을 수정해야할 필요가 있습니다.

이것 또한 Django에 준비가 되어있습니다. 무려 수정이 필요한 정도에 따라 4가지로 구분되어서 말이죠..! 이 4가지 방법에 대한 것은 요기에 제가 간단하게 정리했으니 확인하고 오셔도 좋습니다!

해당 글에서는 AbstractUser를 활용할 것입니다. AbstractUserDjango로그인 기능을 사용하면서 User Model의 칼럼(데이터)들을 수정할 수 있게 됩니다.

🧐 현재 상황은 어떠신가요

AbstractUser는 장고에서 기본적으로 제공되는 로그인 기능을 수정하는 것입니다. 즉 User Model 역시 기본적으로 제공되어 자동으로 DB에 테이블을 만들기 때문에 Django가 이 테이블을 만들기 전(migrate 전)에! 작업을 해야합니다.

아닛! 그럼 이미 Django녀석이가 이미 테이블을 만들었는데 전 AbstractUser 사용 안되나요??!?!?!😱😱

그래도 괜찮습니다. 당연히 프로젝트 초기에 하는게 깔끔하지만 방법은 있죠! 아래에 상황에 따라 구분지어서 진행할 것이니 잘 따라와 주세요!😤

기본적인 User Model

칼럼명설명필수여부데이터타입
1idPKOint
2username이름(전체)Ochar
3first_nameXchar
4last_name이름Xchar
5email이메일Xchar
6password암호화된 비밀번호Ochar
7is_staffadmin접속 가능 여부Obool
8is_activate계정 활성 여부Obool
9is_superuser모든 권한 활성 여부Obool
10last_login마지막으로 로그인한 시간Odatetime
11date_joined계정이 생성된 날짜Odatetime

User Model 확장!

테이블 생성이 이미 되어 있다면 (migate를 이미 한 경우)

  • 생성되어 있는 회원과 관련된 앱에 migrations폴더에서 __pycache__폴더__init__.py를 제외하고 다 지워주세요.
  • DB에서 살려야할 데이터를 백업해 주신 다음 과감하게 DROP해 줍니다.
  • 아래 작업을 한 다음 백업한 데이터를 새 DB에 넣어주시면 끝!

1. 우선 우리만의 User Model을 만들어 봅시다.

  • accounts 앱 안에 있는 models.py에 다음을 추가해 주세요.
  • 위에서 언급한 칼럼에서 사용하지 않을 데이터는 None으로 처리할 수 있습니다.
    (저는 앱 이름을 accounts, 모델 이름을 User로 했는데 바꾸셔도 됩니다:)
from django.db import models
from django.contrib.auth.models import AbstractUser	# AbstractUser 불러오기

class User(AbstractUser):
    test = models.CharField(max_length=20, default="")
    test2 = models.CharField(max_length=20, null=True)
    first_name = None

2. 이제 Django한테 우리가 User Model을 따로 정의했다고 알려줍시다.

  • settings.py에 다음을 추가해 주세요.
AUTH_USER_MODEL = 'accounts.User'
  • accounts앱 폴더 안의 admin.py에 다음을 추가해주세요.
    admin 페이지에서도 확인할 수 있어야 하니까요
from django.contrib import admin
from .models import User

admin.site.register(User)

3. 그럼 DB를 생성해 볼까요?

  • 콘솔창에 아래와 같이 실행해 줍니다.
python manage.py makemigrations
python manage.py migrate

4. 관리자계정을 만들고 생성된 DB를 확인해보세요!

python manage.py createsuperuser
python manage.py runserver

완성입니다! 🎉

이제 User Model의 데이터를 변경하면서 Django의 로그인 기능을 사용할 수 있게 되었습니다.👏👏👏👏

추가로 mysql을 사용하는 경우 한글을 저장할 때 charset 문제가 발생할 수 있으니 DB생성시 utf8로 꼭 설정해 주세요!

post-custom-banner

0개의 댓글