언어/PYTHON
[Django] Custom User 적용
HmHjj
2022. 12. 2. 15:35
728x90
반응형
Django 프로젝트에 User 적용
Django 프로젝트에 User 적용하는 방법을 정리하겠습니다.
환경 구성 정보
ubuntu 20.04 LTS
Django 프로젝트에 User 구성 방법
- Proxy User model
- AbstractUser
- AbstractBaseUser
- User Model One To One
Proxy User
제공 된 User 의 Class를 그대로 Proxy Model 로 동일한 Table , column 구조를 연결해서 사용하는 방식
ParentUser.objects.all() 로 기본적인 User 조회가 가능해 진다.
class ParentManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(user_type=UserType.PARENT)
def create(self, **kwargs):
kwargs.update({'user_type': UserType.PARENT})
return super().create(**kwargs)
class CustomUser(CustomUser):
objects = ParentManger()
class Meta:
proxy = True
AbstractUser
제공 된 User model 에서 사용하는 field와 권한은 그대로 사용하며, 추가로 넣고 싶은 필드를 넣을수 있는 방법.
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
phone = models.CharField(max_length=20, blank=True, null=True)
createdDate = models.DateTimeField(auto_now_add=True)
updatedDate = models.DateTimeField(auto_now=True)
AbstractBaseUser
AbstractUser에서 중요한 필드만 password, last_login, is_active 제공 되고, 나머지는 직접 추가해야하는 방법.
User에 대한 식별자를 email 같은 다른 방식으로 로그인하게 할수 있는 방법이나 설정 해줘야하는 부분이 더 많다.
from django.contrib.auth.models import AbstractUser, PermissionsMixin
from django.db import models
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
User Model OneToOne
User 모델을 OneToOneField로 연결하여 사용하는 방법.
간단하고 추가 필드 설정하기에도 좋다.
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
location = models.CharField(max_length=30, blank=True)
createDate = models.DateTimeField(auto_now_add=True)
728x90
반응형