Django Custom Model
django 에는 기본적으로 정의되어 있는 User 모델이 있다. migrations를 하게 되면 자동으로 테이블이 생성된다.
기본으로 정의되어 있는 모델은 처음 로그인을 할때 username 으로 로그인을 하게 되어 있다.
서비스를 개발할 때 다른 User 모델이 필요하게 된다. 기본적으로 정의되어 있는 모델보다 다양한 정보를 필요로 할때가 있다.
이럴 때는 커스텀 유저 모델을 사용해야 한다.
커스텀 유저 모델 생성
django에서 제공하는 AbstractBaseUser를 상속받아서 Custom User Model을 생성 할 것이다. django의 앱 폴더의 models.py를 아래와 같이 변경한다.
models.py
from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin
from django.db import models
class UserManager(BaseUserManager):
use_in_migrations = True
def create_user(self, email, nickname, password=None):
if not email :
raise ValueError('must have user email')
user = self.model(
email = self.normalize_email(email),
nickname = nickname
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, nickname,password ):
user = self.create_user(
email = self.normalize_email(email),
nickname = nickname,
password=password
)
user.is_admin = True
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
class User(AbstractBaseUser,PermissionsMixin):
objects = UserManager()
email = models.EmailField(
max_length=255,
unique=True,
)
nickname = models.CharField(
max_length=20,
null=False,
unique=True
)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'nickname'
REQUIRED_FIELDS = ['email']
커스텀 유저 모델을 사용하기 위해서는 BaseUserManager , AbstractBaseUser 두 클래스를 구현해야 한다.
BaseUserManager 클래스 : User를 생성할때 사용하는 클래스이고 AbstractBaseUser 클래스 : 상속받아 생성하는 클래스이다.
UserManager 클래스에는 2가지 함수가 있다.
1. create_user() : User 생성하는 함수
2. create_superuser() : 관리자 User 생성하는 함수
AbstractBaseUser 클래스를 들어가 보면 기본적으로 정의하고 있는 필드를 볼수 있다.
is_active , is_admin 컬럼은 django 유저 모델의 필수 필드이기 때문에 반드시 정의되어야 한다.
[참조]
docs.djangoproject.com/en/3.1/topics/auth/customizing/
dev-yakuza.posstree.com/ko/django/custom-user-model/
dev-yakuza.posstree.com/ko/django/custom-user-model/
'Development' 카테고리의 다른 글
MSA 아키텍처 (0) | 2023.05.31 |
---|---|
How to override methods in django (0) | 2021.03.10 |
django mssql 연결 (0) | 2021.03.05 |
아키텍처(Architecture) (0) | 2021.02.17 |
중복 데이터 찾기 (0) | 2020.10.23 |