inflearn logo
강의

Course

Instructor

Complete Guide to Python/Django Web Service Development with React

Implementing custom user designation and membership registration

User모델에 대하여 질문입니다.

298

colock1232765

49 asked

0

안녕하세요? 

현재 강의를 다시들으면서 헷갈리는 내용을 정리해 나가고 있습니다.

 

3분30~4분30초 즈음에 common.py에서 

AUTH_USER_MODEL = "accounts.User"로 바꿔주시면서,

원래 default값이 auth.user라고 해주시는데요

 

이 auth.user가

https://github.com/django/django/blob/6a80fd1465277d465c146cab57ffa41cbae1c5ce/django/contrib/auth/models.py#L402

있는 user클래스가 맞나요?

그래서 원래 장고내부적으로 설정을 하지 않으면 auth.user라는 user모델이 돌아가는 것이고(그래서 migration을 그냥 하면 auth.user로 만들어진 db가 생성되는 것이구요)

 

우리가 필요에 따라 커스터마이징한 User모델(accounts.user)을 만들어줄 경우 그 커스터마이징한 User모델이 장고프로젝트 내부에서 통용되는 Usermodel이라고 선언을 해주는 작업으로 이해해도 될까요?

+그러면 만약 get_user_model로 user모델을 가져올 경우, 들고와지는 user모델은 settings.AUTH_USER_MODEL에서 선언된 모델이 되는 것인가요?

 

늘 감사합니다!

 

 

 

 

react python docker django

Answer 2

0

colock1232765

헉.. 늘 빠른 답변에 정말로정말로 감사드립니다. 실례지만 하나만 더 여쭙고 싶은데요ㅠㅠ

 

최근에 파이썬을 공부하면서 abc(abstract base class)라는 개념을 배웟습니다. 자료구조의 뼈대가 되는 iterable이나 collections같은 클래스를 관리하면서 오로지 자료구조간의 '위계'를 세우기 위하여 사용하는 추상적인 클래스라고 배웠는데요

 

user모델역시 models.Model > AbstractBaseUser > AbstractUser > User라는식으로 클래스들간의 위계가 세워지더군요.

여기서 abstact라는 부분이 파이썬의 abc, 그러니까 User모델들의 원형(?)이라는 느낌을 주기 위해서 사용하는 것 같은데 맞을까요?(혹은 파이썬이나 개발전체에서 통용되는 abstact의 개념을 그냥 django가 차용한 것일까요?)

또 AbstractBaseUser같은 경우는 password를 관리하던데, AbstractUser에 비해 관리되는 정보가 조금 더 중요해서 Base라는 개념으로 나누어서 관리하는 것일까요?(혹은 password의 암호화와 같은 복잡한 내부로직이 존재하기 때문에 따로 분리해서 다루는 걸까요?)

가끔식 abstact와 Base라는 단어가 장고에서 보이는 것 같은데, 단어들을 볼때마다 비슷한 뉘앙스로 받아들일 수 있다면 훨씬 학습하기가 쉬울 것 같아서 여쭤봅니다..

이런부분은 정말 찾아봐도 나오지가 않더라구요.. 어쩌면 정답이 없을 수도 있는 질문같은데, 강사님의 의견이 궁금합니다!

시간 내주셔서 정말 감사합니다!

 

1

pyhub

파이썬의 abc(abstract class)는 부모 클래스의 미구현 추상메서드를 자식 클래스에서 반드시 구현하도록 **강제**하는 기능입니다. 핵심키워드가 **강제**인거죠. 강제할 목적이 없다면 abc없이 단순히 상속만 받으셔도 동작은 합니다.

장고 모델의 Meta.abstract = True 옵션은 위 abc와는 관련이 없구요.

Meta.abstract = True 옵션이 지정된 모델 클래스는 장고 마이그레이션 시에 데이터베이스 테이블을 생성하지 않는다는 선언입니다. 다른 모델 클래스의 부모 클래스로 사용될 클래스에서 주로 사용됩니다.

Abstract / Base 네이밍은 단순히 네이밍일 뿐이며, 이름만으로 어떤 특별한 동작을 하는 것은 아닙니다. 단독으로 사용되지 않고 부모 클래스로 사용된다는 의도를 모델 클래스 이름에 표현한 것입니다.

auth.User 는 다양한 계층으로 상속받아 User 모델을 만드는 데요. 계층 별로 User에 필요한 기능들을 쌓아가고 있습니다. 커스텀을 원하는 계층을 상속받아서 기능을 구현할 수 있도록 다양한 계층을 지원하는 것으로 보실 수 있습니다.

화이팅입니다. :-)

0

colock1232765

감사합니다~

0

pyhub

안녕하세요.

설명하신 내용과 보여주신 User 모델의 코드가 맞습니다.

AUTH_USER_MODEL의 디폴트 값은 "auth.User" 입니다. 그러니 말씀하신 대로 AUTH_USER_MODEL 값을 변경하지 않으면 "auth.User" 설정을 통해, auth 앱의 User 모델을 프로젝트의 User 모델로서 활용하게 되는 것입니다.

https://github.com/django/django/blob/4.0.3/django/conf/global_settings.py#L515

get_user_model 코드를 보시면 settings.AUTH_USER_MODEL을 참조하고 있음을 확인하실 수 있습니다.

https://github.com/django/django/blob/4.0.3/django/contrib/auth/__init__.py#L170

그러니 장고 프로젝트에서는 활성화된 User 모델 클래스가 변경될 수 있기에

get_user_model() 을 통해 현 프로젝트의 User 모델 클래스를 참조하여야하며,

외래키로 지정 시에는 get_user_model()을 지정하시거나 settings.AUTH_USER_MODEL을 지정하시는 것이 맞는 방법입니다.

화이팅입니다. :-)

안녕하세요.

0

44

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

267

1

useEffect 훅에서 else 유무에 따른 결과

0

207

1

useAxios 훅의 dependency array 설정

0

241

1

useEffect에서 변수 업데이트 관련 질문

0

378

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

262

1

bootstrap4

0

464

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

357

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

568

3

useState는 필수일까요?

0

256

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

589

4

Django allauth를 사용한 소셜 로그인 시 에러

0

648

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

548

2

useLocalStorage() 함수 사용여부

0

223

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

443

1

리듀서의 의미 재확인

0

423

1

simple-jwt Refresh Token 사용 노하우

0

894

2

docker compose 를 통한 배포 관련 오류 문의

0

664

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

357

1

is_like_user

0

227

1

related_name 오류

0

267

1

re_path 오류

0

252

1

re_path url

0

243

1

No post matches the given query

0

653

2