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})
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기