[django] Extending User Model

김기용·2021년 1월 13일
0
post-thumbnail

사용자모델을 확장하는 방법

  1. Proxy Model
  2. One-To-One Link with User Model
  3. AbstractBaseUser
  4. AbstractUser

Proxy Model

Proxy Model, 프록시 모델은 Database schema 변경없이 장고에서 제공하는 기존의 User Model을 상속받아 만든다.

Method 를 추가하고 싶거나 사용자정의 Model's query Manager 를 추가할때 사용한다.


일대일 관계를 사용해 유저모델을 확장한다.

class Profile(models.Model):
		user = models.OneToOneField(User, 
																on_delete=models.CASCADE)

확장된 Profile 모델은 User 모델과 일대일 관계를 맺으며 추후 signals 를 이용해 User Instance가 만들어 질때마다 Profile Model 을 생성할수 있다.


AbstractBaseUser

장고가 지원하는 Auth(인증기능)이 프로젝트와 맞지 않을때 상속받아 사용한다. 예) 이메일을 아이디로 써야하는경우

  1. 사용자 정의 유저모델 만들기
  2. User Model Manager() 만들기

AbstractUser

기본적으로 장고가 지원하는 기본 유저에대한 기능을 가지고 있다. Auth 기능을 바꿀 필요없이 기존 유저모델에 필요한 필드들을 추가할때 사용하며 모델 작성후 꼭 settings.py 에 있는 AUTH_USER_MODEL 을 적절히 수정해주어야한다.


메모:

💡 Proxy Model: 장고가 기본적으로 제공하는 User Model이 완벽할때. 다른 정보를 추가하지 않아도 괜찮을때 사용한다.

💡 User Profile: 장고가 지원하는 Auth 기능에 만족하고, Auth 에 영향을 받지 않는 User Model과 밀접한 관계를 가지고 있는 분리된 모델을 생성할때 사용한다.

💡 AbstractUser: 장고가 기본적으로 제공하는 모델에 만족하지만 추가 필드가 필요할때 사용한다

💡 AbstractBaseUser: 장고의 Auth 기능이 프로젝트의 의도와 다를때사용한다.

reference

https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#proxy

profile
매일 새로운 배움을 통해 꾸준히 성장하는 것을 목표를 두고 있습니다. 논리적인 사고로 문제해결 하는것에 희열을 느끼고 언젠가 제가 만든 결과물들이 사람들에게 편이를 제공하며 사용되는 날을 간절히 소망하고 있습니다. 🙏

0개의 댓글