[django] View 2 - Flow of Generic View

Hyeseong·2020년 12월 22일
0

django

목록 보기
15/35

들어가기전

Class inheritance, method overriding기능이 가능한 generic view는 하위 클래스에서 오버라이딩이 쉽고 여러가지 어플리케이션에 다양하게 사용 되도록 설계 되었다는거 아시나유?

그런 측면에서 특히 generic view의 메소드들은 단위 기능으로 잘게 나누어 method의 응집도를 높이고, 템플릿 메소드의 design pattern을 적용해 개발자가 generic view의 처리 흐름을 쉽게 예상할 수 있도록 해요.

만약 generic view를 상속받아 하위 클래스형 view를 개발하는 경우, 개발하고자 하는 로직에 맞는 generic view의 처리흐름에 맞춰 설계하며, 그 과정에서 어느 메소드를 변경해야 할지, 즉, 어느 메소드를 오버라이딩해야 할지 결정하게 되요.

따라서 이런 과정에서는 generic view의 처리 흐름을 파악하는 것이 IMPORT!!

그래서 어쩌라고요?
ListView와 DetailView의 Flow를 한번 보조. 흐름에 몸을 맡겨~!

ListView

ListView 2개 이상의 객체에 대한 목록을 보여주는 View에요.

  • Client의 http request GET 메소드에 따라 get() 메인 메소드가 실행!
  • 해당 table(model)로부터 조건에 맞는 여러개의 객체를 가져와요.
  • 필요시, 해당 객체들에 추가 로직을 반영해요.
  • 템플릿 파일에 따라, 최종 HTML 응답을 만들고 이를 클라이언트에 응답해요.

ListView Flow Table

DetailView

DetailView는 객체 하나에 대한 상세 정보를 보여주기 위한 View에요.

  • client의 HTTP 요청 GET 메소드에 따라 get() 메인 메소드가 실행되유
  • 해당 테블로부터 조건에 맞는 객체 하나!를 가져와요
  • 필요시 해당 객체에 추가 로직 반영
  • 최종 결과 객체를 object라는 컨택스트 변수에 넣어 템플릿에 전달해요.
  • 템플릿 파일에 따라, 최종 HTML 응답을 만들고 이를 클라이언트에 응답해요.

DetailView Flow Table

대상 객체를 구현하기 위해 ListViewget_queryset() 메소드를 사용하는 반면 DetailView는 get_object() 메소드를 사용한다는점!!!!

그라고~ DetailView는 get_object() 메소드 내에서 get_queryset() 메소드를 호출한다는 점이 가!장~~! 큰 차이가 있겠습니당.

또또! 이 두 generic View에서 사용하는 메소드들이 이름은 동일해도 내부 로직은 다른 별개의 메소드라는 점도 주의~~하세요.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글