Django
Class based view
#
Find similar titles
-
최초 작성자
ympaik@insilicogen.com
-
최근 업데이트
bjpark@insilicogen.com
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} |