Django 여러 레퍼런스를 본다거나
작성하게 되면
함수기반 , 혹은 클래스 기반으로 작성하는 경우가있다.
우선 이것들은 각각 FBV , CBV 라고한다.
이럴때 어떠한 상황에서 마땅히 무엇을 사용을 해야하는걸까 ?? 라는 궁금증이 든다.
우선그러면 두개는 무엇일까?? 라는것을 알아야한다.
Function Based View 는 간단히 사용할 수 있다 . 하지만 프로젝트가 커지게 될경우 함수의 길이가 더욱 길어지게 된다는 큰 단점이 생긴다.
@api_view(['GET', 'POST'])
def contact(request):
if request.method == 'POST':
elif request.method == 'GET':
함수 기반뷰에서는 django.views.View 클래스를 상속 받는 대신 ,
직접 함수를 작성하고 request 처리를 한다.
@api_view() 로 request 메소드가 무엇인지 명시해주고 ,
다수의 request 메소드를 사용할 경우 if 조건문으로 구분하여 처리한다.
코드 재사용성 - 다른 클래스에서 상속받을수 있으며 오버라이드 오버로딩이 가능하다.
코드 중복을 줄일수 있다.
코드 구조화가 가능하다.
from django.views import View
class ContactView(View):
def get(self, request):
return
def post(self, request):
return
이렇게 봤을때는 그냥 함수 기반 뷰를 사용해도 되지않나 ?? 라는 생각이 든다.
하지만 클래스기반 뷰를 사용하는 가장 큰 이유가 있다.
제네릭 클래스 기반 뷰는 새로운 객체 생성 , 폼처리 , 리스트 뷰 , 페이징 , 아카이브 뷰 등과 같은 같은 사용 사례를 해결하기 위해 도입되었다.
위그림 처럼 사용을 하면 되며 ,
개발 프로세스 속도를 높여준다.
Simple Generic Views
- View
- TemplateView
- RedirectView
Detail Views
- DetailView
List Views
- ListView
Editing Views
- FormView
- CreateView
- UpdateView
- DeleteView
Date-Based Views
- ArchiveIndexView
- YearArchiveView
- MonthArchiveView
- WeekArchiveView
- DayArchiveView
- TodayArchiveView
- DateDetailView
상황에 따라 적절하게 사용하면 될것같다.