Django에는 두 가지 유형의 뷰가 있음
- 함수 기반 뷰 (FBV)
- 클래스 기반 뷰 (CBV)
Django는 원래 FBV로만 시작했지만 기능을 템플릿 화하는 방법으로 CBV를 추가하여 상용구
(즉, 동일한 코드) 코드를 반복해서 작성할 필요가 없음
Django View의 요구사항
- CBVs method 상속 as_view()를 사용하는 방법에 따라 HTTP Method( GET, POST, PUT, DELETE)
- HttpRequest 객체를 첫 번째 위치 인수로 받아야함
- HttpResponse 객체를 반환하거나 예외를 발생시켜야함
기능기반
장점
- 간단한 구현
- 읽기 쉬움
- 명시적 코드 흐름
- 데코레이터의 간단한 사용법
- 일회성, 특수 기능에 적합
단점
- 코드를 확장하고 재사용하기 어렵
- 조건부 분기를 통한 HTTP 메서드 처리
def my_create_view (request, pk) :
template_name = 'form.html'form_class
= MyForm
form = form_class
if request.method == 'POST':
form = form_class (request.POST)
if form.is_valid () :
form.save ( )
return HttpResponseRedirect (reverse ( 'list-view'))
return render (request, template_name, { 'form': form})
클래스기반
장점
- 코드 재사용성
- dry함(중복코드를 줄일 수 있음)
- 코드 확장성이 유리함
- 코드 구조화에 유리함
단점
- 읽기 어려움
- 뷰 데코레이트 사용시 추가 가져오기 또는 메서드 정의가 필요
class MyCreateView (View) :
template_name = 'form.html'form_class
= MyForm
def get (self, request, * args, ** kwargs) :
form = self.form_class
return render (request, template_name, { 'form': form} )
def post (self, request, * args, ** kwargs) :
form = self.form_class (request.POST)
if form.is_valid () :
form.save ()
return HttpResonseRedirect (reverse ( 'list-view'))
else :
return render (request, self.template_name, { 'form': form})
반응형
'SW ENGINEERING > Django' 카테고리의 다른 글
Django REST Framework에서 제공하는 Authentication의 종류 (0) | 2021.06.10 |
---|---|
Django REST Framework에서 제공하는 Permission의 종류 (0) | 2021.06.10 |
최근댓글