장고 제너릭 뷰의 믹스인

매일 공부(ML)·2023년 2월 25일
0

Fluent Python

목록 보기
85/130

객체지향 상용구

내장 자료형 상속과 다중 상속

장고 제니릭 뷰의 믹스인

제너릭뷰는 검색 엔진의 검색 결과에선 자세한 정보 페이지에 대한 링크를 여러 페이지에 걸쳐 나열하는데, 장고의 리스트 뷰와 상세 뷰는 이러한 문제를 해결하기 위해서 설계가 되었고, 리스트 뷰는 검색 결과를 보여주고, 상세 뷰는 각 항목에 대한 페이지를 생성한다.

그러므로, django.views.generic 패키지의 base 모듈에 기반 클래스와 믹스인이 있다.


View는 모든 뷰의 기반 클래스로서(ABC), 다양한 HTTP 동사를 처리하는 구상 서브클래스가 구현한 get(), head(), post()등의 처리 메서드를 호출하는 dispatch() 메서드와 같은 핵심 기능을 제공하고, RedirectView 클래스는 View 클래스만 상속하며, get(),head(), post()등의 메서드를 구현한다.


TemplateView는 내용을 화면에 출력하기 위해 사용하고, get()메서드만 구현한다.
HTTP Post 요청을 TemplateView에 보내면 상속된 View.dispatch()메서드는 post() 처리기가 없다는 것을 확인하고 "HTTP 405 Method Not Allowed"응답을 생성한다.


ListView 클래스로서 자기 자신만의 코드는 전혀 없는 집합 클래스로 생성된 ListView 객체에는 object_list라는 속성이 있는데, 탬플릿은 페이지의 내용을 보여주기 위해서 이 속성을 반복한다.

여러 객체를 반환하는 데이터베이스 쿼리 결과가 object_list에 저장된다.

템플릿을 렌더링하지 않지만]SON 형식으로 객체의 리스트를 생성하는 뷰가 필요하다고 가정해보자.

이런 용도에 BaselistView 클래스가 제공된다. 이 클래스는 템플릿 구성의 부담 없이 View MultipleObj ectMixin을 쉽게 통합할 수 있는 확장 지점을 제공한다.

다중 상속의 예를 보여주기예는 장고의 클래스 기반 뷰 API 가 Tkinter보다 좋다.

특히 장고의 믹스인은 용도가 분명하고 클래스명이 Mixin으로 끝나므로 쉽게 알아볼 수 있다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글