전체 코드 내용
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
from django.contrib.auth.models import PermissionsMixin
from django.core.mail import send_mail
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
if not email:
raise ValueError('이메일을 설정해야 합니다')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email=None, password=None, **extra_fields):
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
return self._create_user(email, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True, blank=False)
name = models.CharField(_('name'), max_length=30, blank=False)
is_staff = models.BooleanField(_('staff status'), default=False, help_text=_('Designates whether the user can log into this admin site.'),)
is_active = models.BooleanField(_('active'), default=False, help_text=_('Designates whether this user should be treated as active. ' 'Unselect this instead of deleting accounts.'),)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
USERNAME_FIELD = 'email'
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
swappable="AUTH_USER_MODEL"
def email_user(self, subject, message, from_email=None, **kwargs):
"""
Sends an email to this User.
"""
send_mail(subject, message, from_email, (self.email), **kwargs)
코드 해석
create_user
새로운 사용자를 생성하는 사용자 모델 관리자 방식입니다.
이메일, 비밀번호, **extra_fields 매개변수를 허용합니다.
위에서 언급했듯이 extra_fields는 선택적으로 전달할 수 있는 일부 사용자 속성을 포함할 수 있는 사전입니다.
setdefault 함수를 사용하여 is_staff 및 is_superuser 속성을 기본값으로 설정합니다.
이들은 관리자 권한 또는 수퍼유저 권한입니다.
마지막으로 _create_user() 메서드를 호출하고 이메일, 비밀번호, **extra_fields 의 값을 전달합니다.
_create_user
새 개체를 만들고 저장하는 UserManager 클래스의 메서드 중 하나입니다.
이메일과 비밀번호는 필수 인수이며 extra_fields는 선택적으로 전달할 수 있습니다.
이메일이 비어 있는지 확인하고 이메일을 소문자로 정규화합니다.
이메일 주소는 대소문자를 구분하지 않으므로 모두 소문자로 작성하여 혼동을 피하고 일관성을 유지할 수 있습니다.
email 및 extra_fields를 사용하여 사용자 모델의 새 인스턴스를 만듭니다.
set_password를 사용하여 암호화된 암호를 저장하고 데이터베이스에 저장합니다.
create_superuser
슈퍼유저를 생성하는 Django의 User Model Manager 메소드. 이메일, 비밀번호 및 **extra_fields를 매개변수로 받습니다.
먼저 extra_fields 매개변수를 사용하여 관리자 및 수퍼유저 권한을 True로 설정합니다.
이는 super_user를 생성하는 메소드이므로 모두 true로 설정해야 합니다.
is_staff 또는 is_superuser가 False이면 ValueError가 발생하고 메시지가 표시됩니다.
마지막으로 이메일, 비밀번호, **extra_fields를 _create_user() 메서드에 전달합니다.
클래스 사용자
여기에는 이메일, 이름, is_employee, is_active 및 date_joined와 같은 필드가 포함되며 각각 이메일 주소, 이름, 직원 권한, 활성화 상태 및 가입 날짜가 표시됩니다.
objects 속성은 UserManager() 클래스의 인스턴스를 참조합니다.
– 모든 사용자 모델에서 요구하는 메서드를 구현하는 관리자.
USERNAME_FIELD는 사용자를 식별하는 필드입니다.
– 이메일로 본인 확인.
메타 클래스는 모델 클래스의 메타데이터를 지정합니다.
여기에서 모델 이름과 이름의 복수형을 설정하고 변수 AUTH_USER_MODEL을 사용하여 모델을 변경 가능한 사용자 모델로 표시합니다.
email_user는 이메일을 보내는 데 사용됩니다.
제목은 제목이고 메시지는 이메일의 본문입니다.
from_email은 보낸 사람의 이메일입니다.
**kwargs는 이메일을 보내는 데 사용되는 추가 매개변수를 전달합니다.
이 방법은 사용하기 쉬운 이메일 전송 기능을 제공합니다.