• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

DetailView 의 템플릿처리(기본 목적)를 확장 하는 방법

23.04.25 04:48 작성 23.04.25 04:49 수정 조회수 181

0

View 챕터 수강 중입니다.

View 의 CBV 부터는 뭔가 새롭고, 헤비하고 그만큼 공부시간도 늘어나고 있네요.

이번 수업에서 중간에 선생님께서 아래 이미지 처럼 말씀하셨는데,

질문

  1. 아래 이미지 처럼 CVB API:DetailView 기본목적인 템플릿 처리가 아니라 아래 이미지 처럼 다양한 응답 포맷으로 확장하려면 어디를 어떻게 어떻게 확장 해야하나요?

  2. 그리고 템플릿처리가 아닌 다른처리를 위해 Bulit-in API를 확장하는 방식이 자주 쓰이는 방식으로 잘 익혀놔야하는건지? 궁금하고요

  3. 향후 뒤쪽 수업에 더 자세히 배울수 있는내용인건지 궁금합니다.

답변 2

·

답변을 작성해보세요.

1

안녕하세요.

장고에서는 CBV가 마법이 아닙니다. 기본적으로 FBV로 구현할 수 있어야할 것이구요.

CBV는 단지 중복을 줄여주는 하나의 기능일 뿐입니다. 특별한 마법이 있는 것이 아닙니다.

FBV로 각 기능을 구현할 수 있다면, CBV의 각 메서드들을 하나하나 살펴보시면 그 역할을 이해할 수 있습니다.

BaseDetailView 코드를 보시면,
관련코드 : https://github.com/django/django/blob/879e5d587b84e6fc961829611999431778eb9f6a/django/views/generic/detail.py#L110

image

get 요청을 받으면 관련 object를 찾고, context data 사전을 구성한 후에, render_to_response를 통해 템플릿 응답을 합니다. 그러니 다양한 포맷의 응답을 하려 하신다면 render_to_response 메서드를 재정의해서 구현하실 수 있습니다.

혹은 django-rest-framework (이하 DRF)를 활용한다면, Renderer 기능을 통해 다양한 포맷의 응답을 하실 수도 있습니다. 써드파티 라이브러리로 drf-renderer-xlsx (엑셀) 와 같은 라이브러리도 있습니다.
관련 공식문서 : https://www.django-rest-framework.org/api-guide/renderers/


이에 대해서 특별히 더 깊게 다루진 않습니다. 직접 경험해보시고 CBV 이전에 FBV로 원하는 기능을 모두 구현할 수 있는 토대가 먼저 선행되어야 합니다.


그리고 Tip으로 처음에는 빠르게 강의를 진행하시고, 여러 번 강의를 반복해서 진행하시는 것을 추천드립니다. 반복해서 볼 때마다 처음에는 잘 보이지 않았던, 잘 들리지 않았던 부분들이 들리고 이해가 되시는 경험을 하실 수 있습니다.

화이팅입니다. :-)

0

네 감사합니다. 이해했습니다.

실제로 API 코드/다이어그램 으로 이해하면서 수강중이라 꽤 많이 도움되는것 같고 조언 주신것처럼 어느정도 빨리(? 개인차가 있어서..) 반복수강해보려구요.

TemplateResoponseMixin 클래스 render_to_response 메서드 이부분을 오버라이딩 하면 되는군요..ㅎㅎ

 

그리고

 

CBV는 단지 중복을 줄여주는 하나의 기능이고

FBV의 어드밴스 버전이 아니라 보완재 성격이라

경우에 따라서 적절히 취사선택 해야됨이 일단 와닿습니다.

 

그리고

FBV로 원하는 기능을 모두 구현할 수 있는 토대가 먼저 선행

까지요.