Skip to content

Django Class based view #
Find similar titles

Structured data

Category
Programming

장점 #

상속과 Mixin 기능을 통해 코드를 재사용할 수 있고, 체계적으로 뷰를 구성할 수 있습니다. 이는 함수형 뷰와 비교하여 다음과 같은 장점을 가능케 합니다.

  • GET, POST등의 HTTP 메소드에 따른 처리 기능을 코딩할 때, IF 함수를 사용하지 않고 메소드명으로 구분할 수 있으므로 코드의 구조가 깔끔해집니다.
  • 다중 상속과 같은 객체 지향 기술이 가능하므로, 클라스형 generic view 및 mixin class등을 사용할 수 있고, 이는 코드의 재사용성이나 개발 생산성을 획기적으로 높여줍니다.

상속기능 #

상속 기능이 가능하게 함은 개발과정에서의 공통적으로 사용할 수 있는 기능들을 추상화하고, 이를 미리 django에 만들어 기본적으로 class view로 만듦으로서 줄여주는데에 큰 역할을 합니다. 또한 뷰가 class이기 때문에 상속이 가능하고, 이는 우리가 작성한 클래스형 뷰를 상속받아서 또 다른 클래스형 뷰를 작성할 수 있음으로 확장성도 증가합니다.

아래의 예시로 더 자세히 알아보겠습니다.

```
# some_app/urls.py
from django.conf.urls import url
urlpatterns = [
    url(r'^introduction/$',
    IntroductionView.as_view(),
    name='introduction'),
] 
------------------------------------------------------
# some_app/views.py
from django.views.generic import TemplateView

class IntroductionView(TemplateView):
    template_name = 'intro.html'
```

views.py에서 단 2줄로 로직을 완성함을 볼 수 있는데, 이는 django에서 제공하는 TemplateView라는 generic view를 상속받아 사용하기 때문입니다. TemplateView에서는 request object를 분석하고 템플릿 시스템에 넘겨줄 컨택스트 변수를 구성하는 것을 처리합니다. 우리는 이에 템플릿 파일만 알려주면 됩니다. 한가지 유의해야 할 점은 class based view에 있는 methods 를 overwriting을 통해서 재정의 혹은 커스터마이징을 할 수 있습니다.

Generic View #

공통된 로직을 미리 개발해 놓고 제공하는 view를 generic view라고 부릅니다. generic view는 크게 4가지로 나뉘어 있으며 이에대한 리스트 일부를 소개하겠습니다.

분류 이름 기능/역할
Base View View 가장 기본이 되는 최상위 generic view
TemplateView 템플릿이 중어지면 해당 템플릿을 렌더링해줍니다.
RedirectView URL이 주어지면 해당 URL로 redirect시켜줍니다.
Generic Display View DetailView 객체하나에 대한 상세정보를 보여줍니다.
ListView 조건에 맞는 여러개의 객체를 보여줍니다.
Generic Edit View FormView 폼이 주어지면 해당 폼을 보여줍니다.
CreateView 객체를 생성하는 폼을 보여줍니다.
UpdateView 기존 객체를 수정하는 폼을 보여줍니다.
DeleteView 기존 객체를 삭제하는 폼을 보여줍니다.
# Suggested Pages
* 0.025 JDK
{.noli}
* 0.025 PyDev
{.noli}
* 0.025 파이썬
{.noli}
* 0.025 Jython
{.noli}
* 0.025 자이썬
{.noli}
* 0.025 인터프리터
{.noli}
* 0.025 이클립스
{.noli}
* 0.025 HTML
{.noli}
* 0.025 MVT
{.noli}
* 0.025 Eclipse
{.noli}
* More suggestions...
{.more-suggestions}
0.0.1_20140628_0