커스텀 유저 모델
유저 모델
- 장고 기본 모델 django.contrib.auth.models.User
- 기존 모델 확장 또는 새로 정의
user 앱 만들기
python manage.py startapp user
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user.UserConfig',
]
커스텀 유저 모델 만들기
- AbstractUser 또는 AbstractBaseUser를 상속
- 유저 모델의 기본 만을 제공
- (예시 : 암호화된 비밀번호, 정규화된 이메일)
- 유저 매니저 클래스 정의
- 모델을 관리하는 클래스인 매니저 만들기
- 모든 장고 모델은 Manager를 통하여 QuerySet을 받음
- 기본 Manager는 모든 모델에 objects 라는 이름으로 존재
- 장고가 유저 모델 관리를 위해 UserManager라는 매니저 클래스 제공
- 만약 유저 모델이username, email, is_staff, is_active, is_superuser, last_login, date_joined 필드를 정의한다면 그냥 UserManager 사용 가능
- 다른 필드들이 존재한다면 BaseUserManager를 상속해 매니저 클래스를 정의
- 커스텀 매니저는 create_user, create_superuser 두 개의 메소드를 구현
user/models.py
class MyUserManager(BaseUserManager):
def _create_user(self, email, password=None, **kwargs):
if not email:
raise ValueError('이메일은 필수입니다.')
user = self.model(email=self.normalize_email(email), **kwargs)
user.set_password(password)
user.save(using=self._db)
def create_user(self, email, password, **kwargs):
"""
일반 유저 생성
"""
kwargs.setdefault('is_admin', False)
return self._create_user(email, password, **kwargs)
def create_superuser(self, email, password, **kwargs):
"""
관리자 유저 생성
"""
kwargs.setdefault('is_admin', True)
return self._create_user(email, password, **kwargs)
class MyUser(AbstractBaseUser):
# 사용자 ID로 email을 사용
email = models.EmailField(unique=True, verbose_name='이메일')
name = models.CharField(max_length=20, verbose_name='이름')
date_joined = models.DateTimeField(auto_now_add=True, verbose_name='가입일')
is_active = models.BooleanField(default=True, verbose_name='활성화 여부')
is_admin = models.BooleanField(default=False, verbose_name='관리자 여부')
# 모델 매니저
objects = MyUserManager()
class Meta:
db_table = 'users'
verbose_name = '유저'
verbose_name_plural = '유저들'
커스텀 유저 모델 설정
- settings.py
- AUTH_USER_MODEL = 'users.MyUser'
- USERNAME_FIELD = 'email'
- unique identifier (unique=True 옵션이 설정)
- str 타입
- REQUIRED_FIELDS = ['name']
- 명령어로 관리자 계정 만들시 필수 요소 입력
- USERNAME_FIELD와 password는 기본 필수 (지정하지 않아도 됨)
settigns.py
AUTH_USER_MODEL = 'users.MyUser'
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
수퍼유저 만들기
$ python manage.py createsuperuser
이메일: asdf@asdf.com
이름: adsfasdf
Password:
superuser created successfully
'인터페이스 개발 > Django' 카테고리의 다른 글
Django - 아바타 (0) | 2020.10.07 |
---|---|
Django - 콘텐츠 편집 기능 - 파일 업로드, 다운로드 (0) | 2020.10.07 |
Django - 콘텐츠 편집 기능 - TinyMCE (0) | 2020.10.07 |
Django - 콘텐츠 편집 기능 - Blog (0) | 2020.10.07 |
Django - 콘텐츠 편집 기능 - Bookmark (0) | 2020.10.07 |
댓글