Django
에는 권한 및 인증에 대한 기본적인 기능들을 제공하고 있는데요. 사용자 정보가 담길 User Model
역시 이미 구현이 되어있기 때문에 쉽게 로그인 기능을 구현할 수 있습니다. 하지만 실제 서비스에서 저장해야 하는 사용자 데이터들이 대부분 다르기 때문에 해당 기능들을 수정해야할 필요가 있습니다.
이것 또한 Django
에 준비가 되어있습니다. 무려 수정이 필요한 정도에 따라 4가지로 구분되어서 말이죠..! 이 4가지 방법에 대한 것은 요기에 제가 간단하게 정리했으니 확인하고 오셔도 좋습니다!
해당 글에서는
AbstractUser
를 활용할 것입니다.AbstractUser
는Django
의 로그인 기능을 사용하면서 User Model의 칼럼(데이터)들을 수정할 수 있게 됩니다.
AbstractUser
는 장고에서 기본적으로 제공되는 로그인 기능을 수정하는 것입니다. 즉 User Model
역시 기본적으로 제공되어 자동으로 DB에 테이블을 만들기 때문에 Django
가 이 테이블을 만들기 전(migrate 전)에! 작업을 해야합니다.
아닛! 그럼 이미 Django
녀석이가 이미 테이블을 만들었는데 전 AbstractUser
사용 안되나요??!?!?!😱😱
그래도 괜찮습니다. 당연히 프로젝트 초기에 하는게 깔끔하지만 방법은 있죠! 아래에 상황에 따라 구분지어서 진행할 것이니 잘 따라와 주세요!😤
기본적인 User Model
칼럼명 설명 필수여부 데이터타입 1 id PK O int 2 username 이름(전체) O char 3 first_name 성 X char 4 last_name 이름 X char 5 이메일 X char 6 password 암호화된 비밀번호 O char 7 is_staff admin접속 가능 여부 O bool 8 is_activate 계정 활성 여부 O bool 9 is_superuser 모든 권한 활성 여부 O bool 10 last_login 마지막으로 로그인한 시간 O datetime 11 date_joined 계정이 생성된 날짜 O datetime
테이블 생성이 이미 되어 있다면 (migate를 이미 한 경우)
- 생성되어 있는 회원과 관련된 앱에 migrations폴더에서
__pycache__폴더
와__init__.py
를 제외하고 다 지워주세요.- DB에서 살려야할 데이터를 백업해 주신 다음 과감하게
DROP
해 줍니다.- 아래 작업을 한 다음 백업한 데이터를 새 DB에 넣어주시면 끝!
accounts
앱 안에 있는 models.py
에 다음을 추가해 주세요.None
으로 처리할 수 있습니다.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
Django
한테 우리가 User Model을 따로 정의했다고 알려줍시다.settings.py
에 다음을 추가해 주세요.AUTH_USER_MODEL = 'accounts.User'
from django.contrib import admin
from .models import User
admin.site.register(User)
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
이제 User Model
의 데이터를 변경하면서 Django
의 로그인 기능을 사용할 수 있게 되었습니다.👏👏👏👏
추가로 mysql을 사용하는 경우 한글을 저장할 때 charset 문제가 발생할 수 있으니 DB생성시 utf8로 꼭 설정해 주세요!