궁금한게 많은 개발자 노트

django 핵심 기능 - View 본문

카테고리 없음

django 핵심 기능 - View

궁금한게 많은 개발자 2022. 5. 20. 11:43

뷰는 웹 요청을 받아서 최종 응답 데이터를 웹 클라이언트로 반환하는 함수(정확히는 호출 가능한 객체 callable)입니다.

# callable객체란 : 스페셜 메소드인 __call__메소드를 가지고 있는 class를 객체화 -> 객체를 함수처럼 사용 가능

웹 요청을 분석하고 데이터베이스 처리 등 필요한 로직을 수행하고, 템플릿을 통해 화면에 표시할 데이터를 만들어서, 최종 데이터를 우베 클라이언트에게 응답해줍니다.

 

django에서는 뷰를 함수로도 작성할 수 있고, 클래스로도 작성할 수 있습니다. 간단한 로직인 경우 함수형 뷰로 신곡하게 개발하는 것도 하나의 방법이지만, 로직이 복잡해지고 프로젝트가 커질수록 클래스형 뷰의 장점이 효과를 발휘.

django에서는 잘 준비된 generic view를 제공하고 있어서, 클래스형 뷰로 시작하는 것을 권장합니다.

 

클래스형 뷰 (CBV, Class-Based View)
클래스형 뷰는 상속과 믹스인 기능을 이용하여 코드 재사용하고 뷰를 체계적으로 구성할 수 있다.

CBV의 장점
GET, POST 등 HTTP 메소드에 따른 처리 코드를 작성할 때 if 함수 대신에 메소드 명으로 코드의 구조가 깔끔하다.
다중상속 같은 객체지향 기법을 활용해 제너릭 뷰, 믹스인 클래스 등을 사용해 코드의 재사용과 개발 생산성을 높여준다.

 

 

 

 

 

[ 제네릭 뷰 선택 ]

클래스형 뷰를 작성하기 위해서는 클래스형 제네릭 뷰를 상속받아서 필요한 속성과 메소드를 오버라이딩하는 작업이 필요합니다. 우리가 개발하고자 하는 로직에 가장 알맞은 제네릭 뷰를 선택할 수 있어야 합니다.

제네릭 뷰를 선택한 다음에는 그 제네릭 뷰에서 어떤 속성과 메소드를 오버라이딩할지 판단해야 합니다.

 

# 제네릭 뷰 요약 : 웹 프로그램 개발시 공통적으로 사용하는 로직을 미리 개발해 놓고, 기본 클래스로 제공하고 있는데 이를 제네릭 뷰라고 합니다. 제네릭 뷰의 종류와 역할을 이해하는 것이 클래스형 뷰를 사용하기 위한 첫걸음입니다.

 

Base View View, TemplateView, RedirectView
Generic Display View DetailView, ListView
Generic Edit View FormView, Createiew, Updateiew, Deleteiew
Generic Date View ArchiveIndexview, YearArchiveView, MonthArchiveView, WeekArchiveView,
DayArchiveView, TodayArchiveView, DateDetailView

 

View:

모든 클래스형 뷰의 기본이 되는 최상위 뷰입니다. 모든 클래스형 뷰는 해당 View클래스를 상속받습니다.

이 뷰를 직접 상속받아 코딩하는 경우는 많지 않지만, 원하는 로직에 맞는 제네릭 뷰가 없는 경우는 이 뷰를 상속받아 클래스형 뷰를 작성할 수도 있습니다.

 

TemplateView:

단순하게 화면에 보여줄 템플릿 파일을 처리하는 정도의 간단한 뷰입니다. 간단하게 템플릿 파일 지정만 해줄 수도 있습니다. 주어진 템플릿으로 렌더링해주는 뷰 ex) template_name = "home.html"

 

RedirectView:

주어진 URL로 리다이렉트시켜주는 제네릭 뷰입니다. URL속성이 필수입니다. (URL패턴 명이 주어져도 가능합니다.)

URL을 알 수 없다면 HttpResponseGoene 에러 응답을 발생시킵니다. 복잡한 로직 없이 리다이렉트만을 원할 시 사용

 

DetailView:

다음 절의 ListView와 더불어 가장 많이 사용되는 제네릭 뷰입니다. DetailView는 특정 객체 하나에 대한 정보를 보여주는 뷰입니다. 자주 사용되는 예는 테이블에서 기본 키(PK)로 지정된 레코드 하나에 대한 정보들을 보여주는 것입니다.

DetailView는 특정 객체에 대한 상세 정보를 보여주는 제네릭 뷰이므로, DetailView와 매핑된 URL을 get_absolute_url메소드를 사용해 구할 수 있기 때문입니다. 항상 정의해주면 좋습니다.

 

 

Comments