진행 중인 프로젝트에서 로그인 기능 구현을 맡게 되어서 공부해보려고 한다. 😮
Django는 기본적으로 django.contrib.auth
앱을 통해 회원관리를 할 수 있는 기능을 제공하는데, auth
의 User model
을 통해 여러 인증을 구현할 수 있다.
class models.User
이
User
모델은 다음과 같은 필드들을 기본적으로 제공한다.
필수값! 150자 이하의 영숫자,
_
,@
,+
,.
,-
를 포함할 수 있다.
max_length
는 여러 케이스에 대해 충분해야 한다.선택값(
blank=True
). 150자 이하
선택값(
blank=True
). 150자 이하
선택값(
blank=True
). 이메일 주소
필수값! password에 대한 해시값과 메타데이터값
그룹에 대한 필드
유저의 권한을 설정하는 필드
Boolean 타입. 이 사용자가 관리자 사이트에 접근할 수 있는지 지정한다.
True
이면 접근 가능Boolena 타입. 이 사용자 계정을 활성으로 간주할지를 지정한다.
False
지정하는 것을 권장한다.Boolean 타입. 이 사용자에게 명시적으로 할당하지 않고, 모든 권한이 있음을 지정한다.
사용자의 마지막 로그인 날짜/시간 (
datetime
)
계정이 만들어진 날짜/시간 (
datetime
)
지금까지 Django가 기본적으로 제공하는 User
모델에 대해 알아보았으니 프로젝트에서 사용할 User
모델에 적용해보자!
프로젝트에 필요한 User
모델은 다음과 같다.
엇 근데
password
는 User 모델에 있는데nickname
,phone
이라는 필드가 없다..😨
이런 경우에는 어떻게 해야 할까?🙄
이를 대비하여 Django가 또 다른 방법들을 제공한다!
- Proxy Model
- User Model과 One-To-One 연결
- AbstractBaseUser
- AbstractUser
등의 방법이 있는데, 나는 이 중에서 AbstractUser
를 이용한 방법을 사용하려고 한다!
Django의 기본 User 모델의 동작은 그대로 하고, 필드만 재정의할 때 사용하는 방식!
사용 방법은 간단하다.
AUTH_USER_MODEL = 'account.User' # [app].[모델명]
먼저 AbstractUser
를 사용하기 위해 settings.py
에 코드를 추가해준다.
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
# 기본적으로 제공하는 필드 외에 원하는 필드를 적어준다.
nickname = models.CharField(max_length=50)
phone = models.PhoneNumberField(unique = True, null = False, blank = False)
이렇게 AbstractUser
를 import하여 User
가 AbstractUser
를 상속받도록 해준다. 그 다음 원하는 필드를 적어주면 된다!
✋🏻 잠깐!!!
AUTH_USER_MODEL
을 지정하기 전에manage.py migrate
는 절대!! 금지!!
마지막으로 admin.py
에 app 모델도 등록해주자.
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)