web/Django(장고)

[Django]장고 fbv vs cbv(cbv 이용 가이드 라인)

moonsun623 2021. 10. 31. 01:59
반응형

VIEW?

장고는 MTV(Model-Template-View) 패턴을 기반으로 하는 프레임 워크이다.

여기서 view는 MVC Framework에서 말하는 Controller와 비슷한 역활이다.(동일하지는 않다.)

view는 장고에서 모델로 부터 데이터를 불러오거나 저장하며 http request를 받아 결과인 http response를 리턴한다.

view의 작성 방법은 2가지가 존재한다.

1. fbv (함수 기반 뷰)

2. cbv (클래스 기반 뷰)

 

fbv (함수 기반 뷰)

# views.py
@api_view(['GET', 'POST'])
def index(request):
	if request.method == 'POST':
    		return HttpResponse("Post method")
    	else:
    		return HttpResponse("Get method")

cbv (클래스 기반 뷰)

from django.views import View
class ContactView(View):
    	def post(self, request):
    		return HttpResponse("Post method")
	def get(self, request):
    		return HttpResponse("Get method")

 

fbv, cbv 장단점

함수 기반 뷰

  • 장점: 구현이 간단하고 직관적이라 이해가 쉽다,데코레이터 사용이 간단하다
  • 단점: 코드 확장이나 재사용이 어렵다, 조건문으로 HTTP 메소드 구분한다

클래스 기반 뷰

  • 장점: 코드 확장이나 재사용이 용이하다, mixin(다중 상속) 같은 객체지향 기술을 사용 가능하다, 분리된 메소드로 HTTP 메소드 구분, 내장 제네릭 클래스 기반 뷰를 사용할 수 있다.
  • 단점: 코드가 직관적이지 않아 이해하기 어렵다,  부모 클래스/mixin에 코드를 찾아봐야한다. 데코레이터 사용이 어렵다.

=> 각각의 장단점이 존재 하기 때문에 코드 재사용이나 확장이 필요한 프로젝트에선 클래스 기반 뷰를 사용하고,

그렇지 않고 빠른 구현이 필요한 프로젝트에서는 함수 기반 뷰를 사용하면 된다.

 

클래스 기반 뷰를 이용할 때의 가이드라인

  • 뷰 코드의 양은 적으면 적을수록 좋다.
  • 뷰 안에서 같은 코드를 반복적으로 이용하지 말자.
  • 뷰는 프레젠테이션 로직에서 관리하도록 하자. 비즈니스 로직은 모델에서 처리하자. 매우 특별한 경우는 폼에서 처리하자.
  • 뷰는 간단 명료해야 한다.
  • 403, 404, 500 에러 핸들링에 클래스 기반 뷰는 이용하지 않는다. 대신 함수 기반 뷰를 이용하자.
  • 믹스인은 간단 명료해야 한다.