무엇을 공부했나요?
Two scoops of Django 10장 클래스 기반 뷰의 모범적인 이용에 대해 알아보았습니다. 제가 10장의 자료를 요약하였고, 동현님께서 심화자료를 준비하셨습니다.
스터디중 다루었던 이야기들은 아래와 같습니다.
10장 클래스 기반 뷰의 모범적인 이용
클래스 기반 뷰 이용의 가이드라인
- 뷰 코드의 양은 적으면 적을수록 좋다.
- 뷰 안에서 같은 코드를 반복적으로 이용하지 말자.
- 뷰는 프레젠테이션 로직에서 관리하도록 하자. 비지니스 로직은 모델에서 처리하자. 매우 특별한 경우에는 폼에서 처리하자.
- 뷰는 간단 명료해야한다.
- 403, 404, 500 에러 핸들링에 클래스 기반 뷰는 이용하지 않는다. 대신 함수 기반 뷰를 이용하자. 믹스인은 간단 명료해야한다.
믹스인과 클래스 기반 뷰를 이용하는 방법
- 믹스인은 실체화된 클래스가 아닌, 상속해 줄 기능들을 제공하는 클래스를 의미한다.
- 상속에 관한 규칙
- 왼쪽에서 오른쪽의 순서로 처리한다
- MRO의 old style 과 new style
어떤 작업에 장고의 클래스 기반 뷰가 이용되어야 하는가
이름 | 목적 |
---|---|
View | 어디에서든 이용 가능한 기본 뷰 |
RedirectView | 사용자를 다른 URL로 리다이렉트 |
TemplateView | 장고 HTML 템플릿을 보여줄 때 |
ListView | 객체 목록 |
DetailView | 객체를 보여줄 때 |
FormView | 폼 전송 |
CreateView | 객체를 만들 때 |
UpdateView | 객체를 업데이트 할 때 |
DeleteView | 객체를 삭제 할 때 |
generic date view | 시간 순서로 객체를 나열해 보여줄 때 |
클래스 기반 뷰 사용에 대한 일반적인 팁들
- 인증된 사용자에게만 접근 허용하기
- braces.views 의 LoginRequiredMixin 활용
- 뷰에서 valid_form(), invalid_form()을 이용하여 커스텀 액션 구현하기
-
커스텀 액션을 구현할 때
form_valid()
,invalid_form()
은 제네릭 클래스 기반 뷰가 요청을 보내는 곳에 위치한다.class FlavorCreateView(LoginRequiredMixin, CreateView): models = Flavor fields = ('title', 'slug', 'scoops_remaining') def form_valid(self, form): # 커스텀 로직이 이곳에 위치 return super(FlavorCreateView, self).form_valid(form)
-
- 뷰 객체 이용하기
- 콘텐츠를 렌더링에 클래스 기반 뷰를 이용한다면, 자체적인 메서드와 속성을 제공하는 뷰 객체를 이용해 다른 메서드나 속성에서 호출이 가능하다.
베이스 django.view.generic.View 이용하기
모든 뷰에서 django.views.generic.View만 이용하여 장고 프로젝트를 전부 구성할 수도 있다.
심화학습
class based view 쓰세요. 두번 쓰세요 (목적에 맞게)
django-extra-view
상황에 따라 유용한 CBV를 제공하는 라이브러리인 django-extra-veiws 에 대한 소개.
기본 view와 django-braces 라이브러리에서도 제공하지 않는 복잡한 구성의 경우, django-extra-views를 사용하면 효과적이라는 것을 알게 되었습니다.
MRO 알고리즘에 대한 이해
이날 따라 유난히 땀을 많이 흘리신 동현님은 손으로 한땀 한땀 MRO의 알고리즘을 그려가며 설명해 주셨습니다.
MRO에 대한 자료를 찾아보면서 품었던 의문(그래서 MRO가 어떻게 순서를 정하는 건가요?)이 풀리면서 찝찝했던 기분을 날려버릴 수 있었습니다.
어땠나요?
무더운 여름, 다 함께 땀 흘리며 스터디 모임을 진행한 것도 벌써 7회차가 되었습니다. 매주 수요일 저녁에는 스터디에 늦을까 종종걸음으로 퇴근하며 정기적인 모임에 참여한다는 것이 마냥 쉬운 일은 아니라는 것을 느낍니다. 하지만 스터디가 끝나고 집으로 돌아갈 때는 ‘아! 역시 참여하길 잘했어!’ 라는 뿌듯한 마음과 함께 발걸음이 가벼워집니다.
이번 스터디에서도 여러 가지 이야기들을 나누었지만, 책에서 이야기하는 효과적인 제네릭 뷰 사용 방법(django.views.generic.View
만으로 프로젝트 구성하기)에 대한 호성님과 남홍님의 의견을 들었던 것이 기억에 남습니다. 책에 적혀있는 것이 무조건 왕도는 아니라는 것을 알지만, 아무래도 경험이 부족하다 보니 새로운 정보에 대해 (추천! 필수! 효과적!이라는 말이 붙으면 더더욱) 비판 없이 받아들이곤 하는 저에게 이러한 의견을 듣는 것은 매우 소중한 시간이었습니다.
함께 공부한다는 것은 매우 느리게 가는 것처럼 보일 수 있지만, 함께 더 멀리 나아가는 방법이라고 생각하며 두 숟갈 스터디의 완주를 기대해봅니다!