티스토리 뷰
서론
Django 프레임워크를 통해 웹 개발을 하다보면 유저관리를 위한 기능을 사용할 때가 있습니다. 이때 AUTH_USER_MODEL
과 get_user_model()
의 차이를 찾아보았습니다.
본론
AUTH_USER_MODEL
AUTH_USER_MODEL
은 프로젝트에서 사용하고 있는 유저 모델의 경로 문자열입니다.
그래서 코딩 컨벤션에 따라 대문자로 표기하는 것으로 보입니다.django.conf.settings
에서 사용하려는 유저 모델의 경로 문자열로 대체 가능합니다.
사용자화
프로젝트의 settings.py 에 AUTH_USER_MODEL = '나만의 유저 모델'
을 추가합니다.
# settings.py
...
AUTH_USER_MODEL = 'accounts.MyUser' # 나만의 User 모델인 MyUser모델로 AUTH_USER_MODEL을 설정
사용방법
뷰 혹은 다른 모델에서 유저 모델을 지정할 때 사용합니다.
# settings를 꼭 import 해주어야 합니다.
from django.conf import settings
class Profile(models.Model):
user = models.OneToOneField(to=settings.AUTH_USER_MODEL, ...)
주의사항
아래 그림은 Django 공식문서에서 제공되는 AUTH_USER_MODEL에 대한 설명입니다. 프로젝트 시작 후에 해당 값을 변경하지 말라고 하네요.
get_user_model()
get_user_model()
은 AUTH_USER_MODEL
의 모델 참조(reference) 입니다.
따라서 AUTH_USER_MODEL
의 값이 바뀌면 get_user_model()
로 반환되는 모델도 달라집니다.django.contrib.auth
에서 import할 수 있습니다.
사용방법
.objects
와 같은 모델 클래스 메서드에 접근하기 위해 사용합니다.
메서드 접근은 AUTH_USER_MODEL
또한 가능하긴 하나, get_user_model()
을 사용할 경우 IDE에서 자동완성을 지원하기 때문에 편의성이 높아집니다.
from django.conf.auth import get_user_model
queryset = get_user_model().objects.filter(is_superuser=False)
결론
두 개는 표현만 다를 뿐 기능은 같으므로 유저 모델에 접근해야 하는 상황에서 메서드가 필요하지 않다면 AUTH_USER_MODEL
을 사용하고 필요하다면 get_user_model()
을 사용하는 것이 좋을 것 같습니다.
'개발자 > 파이썬(Python)' 카테고리의 다른 글
[Django] Docker 컨테이너에서 createsuperuser 사용 (0) | 2024.01.17 |
---|---|
[Django] Django와 MySQL 혹은 MariaDB Docker로 연결 (0) | 2024.01.17 |
[Django] Docker로 Django 배포하기 (0) | 2024.01.15 |
[Django] static 파일 사용 (0) | 2024.01.15 |
[Django] CSV 파일 전송 뷰 만들기 (1) | 2024.01.03 |