무엇을 공부했나요?
이번 시간에는 Two scoops of Django 18장 django core 교체하기, 19장 django admin, 20장 django UserModel을 함께 살펴보았습니다. 동현님께서 세 장의 내용을 요약하셨고, 제가 심화(라고 쓰고 조금 더 알아보기 라고 읽습니다.)를 준비했습니다.
18장 Django core 교체하기
짧은 대답: 할 이유가 없다.
긴 대답: 이 책에서 이야기하는 core module의 장점을 포기해도 괜찮다면 시도해 볼 수 있다.
1. Franken Django를 만들고 싶은 유혹
유행에 민감한 개발자들은 django component를 새로운 것으로 교체하길 원한다. 하지만 단순히 유행을 좇기보다 설득력 있는 이유가 존재하는지 생각해보아야 한다.
2. Non-Relational Databases vs. Relational Databases
- 대부분 비관계형 database는 ACID 속성이 약하거나 없기 때문에 데이터가 오염될 위험이 높다.
- 관계형 작업에 비관계형 database를 사용하지 마라.
- 유행을 무시하고 스스로 연구해보자. (성공-실패 사례조사와 충분한 실험이 필요하다)
- 우리는 비관계형 database를 django와 어떻게 이용하는가?
- cache, queue 혹은 비정규화가 필요한 데이터를 다뤄야 할 때
- 짧은 순간 데이터를 저장할 때
- 장기적인 데이터 보관과 비정규화 데이터가 필요할 때
19장 Django Admin
1. End User를 위한 것은 아니다.
2. 커스터마이징 하는 것보다 새로운 View를 만드는 것이 더 편할 수도 있다.
3. Django admin page에서는 기본적으로 객체의 이름을 문자열로 표현하여 보여준다.
__str__()
메서드를 사용하여 읽기 쉽게 변경해주자
4. Django ModelAdmin에 호출 가능한 메서드나 함수를 추가할 수 있다.
5. Django admin에는 Lock을 거는 기능이 없기에 여러 사용자가 이용하는 환경에서는 주의를 기울여야 한다.
6. django.contrib.admindocs 패키지를 통해 문서화 할 수 있다.
7. Custom Skin 사용하기
- django-grapelli
- django-suit
- django-admin-bootstrapped
8. Django admin은 관리자의 권한이 막대하기 때문에 보안을 철저히 하는 것이 좋다.
20장 Django UserModel
1. get_user_model()로 user model 찾기
from django.contrib.auth import get_user_model
get_user_model()
- User Foreign key에는 settings.AUTH_USER_MODEL 을 사용하자
- 스택오버플로우: [get_user_model vs settings.AUTH_USER_MODEL]를 참고.
2. Django 1.11에서의 Custom User fields
- Subclass AbstractUser
- django user model을 그대로 이용하면서 필요한 필드만 추가하여 사용하는 방법
- Subclass AbstractBaseUser
- 가장 최소한의 base 모델로 시작하는 방법
- 관련된 모델로 부터 Linking back
심화
19장 Django admin에 대한 내용을 다루었습니다. 심화학습이라고 하기에는 다소 민망하지만 제가 Django admin을 다루면서 마주했던 내용을 정리하며 함께 이야기를 나누었습니다.
1. 어드민을 등록할 때 어떤 일들이 일어날까?
매번 무심코 지나쳤던 admin.site.register()
의 내부를 살펴보았습니다.
2. Action 정의하기
3. Model Admin의 queryset을 변경하여 admin page에 노출할 데이터 필터링하기
4. inlines
속성으로 상위모델과 같은 페이지에서 편집하기
5. Form 변경하기
- 추가/변경시 다른 폼 사용하기
- 폼에 초기 값 설정하기
- forms.ChoiceField에서 쿼리셋 조작하기
6. 추가/수정/삭제의 권한 변경
7. 하나의 모델에 대해 두 개의 어드민 페이지 만들기
어땠나요?
이번에는 초초보인 제가 심화를 맡아 진행하였습니다. 처음에는 ‘내가 심화를 준비할 수 있을까?’, ‘이런 것들이 다른 분들에게도 도움이 될까?’ 와 같은 고민을 하였습니다. 하지만 이내 밀도 높은 심화 내용을 준비하지 못하더라도, 제가 이해하고 있는 것들을 공유하는 시간도 의미가 있을 것이라는 생각을 하였습니다.
이번 스터디에서는 간단한 예제 코드에서도 ‘왜 이렇게 사용하나요?’라는 질문을 받은 순간이 가장 좋았습니다. 제가 예제를 작성할 때, 수상한 코드에 의문을 갖지 않았다는 사실을 알게 되었기 때문입니다.
코드를 작성하거나 공부를 할 때 모든 것을 의심하자
고 생각하지만 그 순간이 지나고 나서야 수상한 것들을 발견하는 경우가 많습니다. 역시 코드를 바라보는 눈은 많을수록 좋다는 생각이 들었습니다.
책의 목차를 다시 훑어보니 앞으로 다룰 내용은 아직 저에게 낯설어 보이네요. 그만큼 앞으로의 스터디도 기대가 됩니다!