FBV(Function Based View) - 함수형 뷰
CBV(Class Based View) - 클래스형 뷰
뷰를 작성할 때 함수 형식으로 작성하는 방식
# urls.py
urlpatterns += [
path('', views.index, name='index'),
]
# views.py
@api_view(['GET', 'POST'])
def index(request):
if request.method == 'POST':
return HttpResponse("Post Method")
else:
return HttpResponse("Get Method")
뷰를 작성할 때 클래스 형식으로 작성하는 방식
# urls.py
urlpatterns += [
path('', views.IndexView.as_view(), name='index'),
]
#views.py
class ContactView(View):
def post(self, request):
return HttpResponse("Post Method")
def get(self, request):
return HttpResponse("Get Method")
두 방법은 모두 같은 기능을 하는 View다. 차이점은 로직을 클래스 형으로 구현할 것인지, 함수형으로 구현할 것인지에 대한 차이다.
어느 상황에서 어떤 것을 쓰는 것이 좋다고 말할 수 없다.
FBV
장점 : 편하게 구현 기능, 읽기 편한 로직, 데코레이터 사용이 명료함
단점 : 확장/재사용이 어려움
CBV
장점 : 확장/재사용 용이, 다중 상속, Mixin 가능, HTTP Method가 클래스 안에서 나누어 처리, 강력한 Generic Class View
단점 : 읽기 어려움, 상속과 Mixin으로 인해 코드 이해를 위해 여러 곳을 찾아봐야 함
정리하자면, 상속과 재사용이 많이 필요한 프로젝트는 CBV, 그렇지 않은 경우에는 FBV를 사용하는 것이 좋다고 알려져 있다.
물론, 한 가지 기법만 사용해야 하는 것이 아니기에 섞어서 사용해도 무방하다.
장단점을 충분히 인지하고 적절하게 사용하면 그것이 맞는 방법일 것이다.