초보 개발자

django views class 본문

AI 웹개발 트랙 - 내배캠/6주차

django views class

taehyeki 2022. 1. 21. 23:07

클래스형 뷰 (CBV, Class-Based View)

뷰는 요청을 받아서 응답을 반환해주는 호출 가능한 객체이다. 장고에서는 뷰를 함수로도 작성할 수 있고 클래스로도 작성 할 수 있다. 함수형 뷰보다 클래스형 뷰가 장점이 많습니다. 클래스형 뷰를 사용하면 상속과 믹스인 기능을 사용해서 코드를 재사용할 수 있고, 뷰를 체계적으로 구성할 수도 있다. 간단한 경우에는 함수형 뷰로 신속하게 개발하는 것도 하나의 방법이지만, 로직이 복잡해지고 프로젝트가 커질수록 클래스형 뷰의 장점이 효과를 발휘한다. 

 

클래스형 뷰는 클래스로 진입하기 위한 as_view( ) (진입 메소드) 클래스 메소드를 제공한다. as_view( ) 진입 메소드의 역할은 클래스의 인스턴스를 생성하고, 그 인스턴스의 dispath( ) 메소드를 호출한다. dispath( ) 메소드는 요청을 검사해서 GET, POST 등의 어떤HTTP 메소드로 요청되었는지를 알아낸 다음, 인스턴스 내에서 해당 이름을 갖는 메소드로 요청을 중계해준다.

함수 기반에서는 일일이 post인지 get인지 다 살펴봐야했었음

 

뷰 클래스는 다음과 같은 형태로 정의된다.

MyView 클래스는 View 클래스를 상속받고 있으며 View 클래스에는 as_view( ) 메소드와 dispatch( ) 메소드가 정의되어 있다. 그래서 우리가 작성하는 MyView 클래스에서는 이 메소드들을 정의하지 않아도 사용 할 수 있다.

 

함수형 뷰 클래스형 뷰 차이

함수로 get post등을 만들어 주면 됨

 

클래스형 뷰에는 내부적으로 dispatch( ) 메소드가 있기 때문에 dispatch( ) 메소드가 GET, POST 등의 어떤 HTTP 메소드로 요청을 중계해주므로 가능한 것이다.

 

 

② 상속 기능 가능

 상속 기능을 이해하려면 그 전에 제네릭 뷰에 대해 알고 있어야 한다. 우리가 작성하는 클래스형 뷰의 대부분은 장고가 제공해주는 제네릭 뷰를 상속받아 작성하기 때문이다. 웹 애플리케이션을 개발하는 경우, 공통적으로 반복되는 과정들이 많이 발생한다. 장고에서는 특히 모델, 뷰, 템플릿 개발과정에서의 이러한 단순 반복 작업을 많이 없애주었는데, 제네릭뷰가 바로 뷰 개발과정에서 개발자의 단순 반복 작업을 덜어주는 기능이다. 즉 제네릭 뷰란, 뷰 개발 과정에서 공통적으로 사용할 수 있는 기능들을 추상화하고, 이를 장고에서 미리 만들어 기본적으로 제공해주는 클래스형 뷰를 말한다.

 

주요 제너릭 뷰 목록

기반 뷰(Base View)

  • View: 최상위 부모 제너릭 뷰 클래스
  • TemplateView: 주어진 템플릿으로 렌더링
  • RedirectView: 주어진 URL로 리다이렉트

제너릭 보기 뷰(Generic Display View)

  • DetailView: 조건에 맞는 하나의 객체 출력
  • ListView: 조건에 맞는 객체 목록 출력

제너릭 수정 뷰(Generic Edit View)

  • FormView: 폼이 주어지면 해당 폼을 출력
  • CreateView: 객체를 생성하는 폼 출력
  • UpdateView: 기존 객체를 수정하는 폼을 출력
  • DeleteView: 기존 객체를 삭제하는 폼을 출력

제너릭 날짜 뷰(Generic Date View)

  • YearArchiveView: 주어진 연도에 해당하는 객체 출력
  • MonthArchiveView: 주어진 월에 해당하는 객체 출력
  • DayArchiveView: 주어진 날짜에 해당하는 객체 출력
  • TodayArchiveView: 오늘 날짜에 해당하는 객체 출력
  • DateDetailView: 주어진 연, 월, 일 PK(또는 슬러그)에 해당하는 객체 출력
class TagCloudTV(TemplateView):
    template_name = 'taggit/tag_cloud_view.html'


class TaggedObjectLV(ListView):

 

TemplateView는 단순히 템플릿을 렌더하기 위한 역할을 한다.

그냥 한번에 url에서 해결할 수 도 있다.

 

와 같이 상속처럼 입력된다.

 

 

'AI 웹개발 트랙 - 내배캠 > 6주차' 카테고리의 다른 글

6주차 WIL  (0) 2022.01.22
AWS EC2 배포 및 가비아 연결  (0) 2022.01.21
django {% url %}  (0) 2022.01.21
many-to-many  (0) 2022.01.21
django sparta 강의 정리 및 의문점  (0) 2022.01.19