User / UserManager
- manager 클래스를 통해 DB와 데이터를 주고 받는다.
- User와 함께 BaseUserManger를 만들어 주어야 한다.
- 장고가 만들어준 필수사항이 존재한다.
(settings.py)
#users 앱의 User 모델
AUTH_USER_MODEL = "user.Users"
(app - models.py)
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
# User를 생성할 때 사용하는 헬퍼 클래스
class UserManager(BaseUserManager):
# 사용자를 생성
def create_user(self, email, name, gender, age, bio, password=None):
if not email:
raise ValueError("이메일을 입력하세요")
user = self.model(
email=self.normalize_email(email),
name=name,
gender=gender,
age=age,
bio=bio,
)
# 장고에서 제공하는 password 설정 함수
user.set_password(password)
user.save(using=self._db)
return user
# 관리자 생성
def create_superuser(self, email, name, gender, age, bio, password=None):
user = self.create_user(
email,
name=name,
gender=gender,
age=age,
bio=bio,
password=password,
)
user.is_admin = True
user.save(using=self._db)
return user
class Users(AbstractBaseUser):
GENDER_CHOICE = {
('male', 'Male'),
('female', 'Female'),
}
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=30)
gender = models.CharField(max_length=10, choices=GENDER_CHOICE, blank=True)
age = models.PositiveIntegerField(default=0, blank=True)
bio = models.TextField(blank=True)
# User 모델의 필수 field
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
# 헬퍼 클래스 사용
objects = UserManager()
# 쉽게 말해 login ID
USERNAME_FIELD = "email"
# 이거 없으면 cratesuperuser 만들때 에러남
REQUIRED_FIELDS = ["name", "gender", "age", "bio"]
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
"Does the user have a specific permission?"
return True
def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
return True
@property
def is_staff(self):
"Is the user a member of staff?"
return self.is_admin
'Python > Django' 카테고리의 다른 글
[DRF] 07. 유저 API (0) | 2023.04.26 |
---|---|
[DRF] 06.5 admin 커스텀 (0) | 2023.04.25 |
[DRF] 05. 기본 JWT 토큰 (0) | 2023.04.24 |
[DRF] 04.5 Fetch API, CORS 에러 (0) | 2023.04.24 |
[DRF] 04. 클래스 뷰(CBV) (0) | 2023.04.24 |