일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- NeXT
- 파이썬
- git
- 중급파이썬
- crud
- 채팅
- AWS
- react
- Props
- flask
- wetube
- EC2
- 카톡
- MongoDB
- SSA
- RDS
- async
- pandas
- lambda
- 튜플
- Vue
- dict
- node
- socket io
- merge
- TypeScript
- Class
- SAA
- S3
- docker
- Today
- Total
초보 개발자
django views class 본문
클래스형 뷰 (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 |