Function-Based View Class-Based View

BackEnd_Ash.log·2020년 12월 6일
0

Django 여러 레퍼런스를 본다거나
작성하게 되면

함수기반 , 혹은 클래스 기반으로 작성하는 경우가있다.
우선 이것들은 각각 FBV , CBV 라고한다.

이럴때 어떠한 상황에서 마땅히 무엇을 사용을 해야하는걸까 ?? 라는 궁금증이 든다.

우선그러면 두개는 무엇일까?? 라는것을 알아야한다.

https://yuda.dev/245

Function Based View

장점

  • 간단한 구현
  • 가독성 좋음
  • 명시적 코드 흐름
  • 데코레이터를 간단히 사용할 수 있다.
  • 일회성에 적합하다.

단점

  • 코드를 확장하고 재사용하기 어렵다
  • 조건부 분기를 통한 HTTP 메서드 처리하기 어렵다

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 조건문으로 구분하여 처리한다.

Class Based View

장점

  • 코드 재사용성 - 다른 클래스에서 상속받을수 있으며 오버라이드 오버로딩이 가능하다.

  • 코드 중복을 줄일수 있다.

  • 코드 구조화가 가능하다.

단점

  • 읽기 어렵다
  • 암시적 코드 흐름
  • 뷰 데코레이터를 사용하려면 추가 가져오기 또는 메서드 재정의가 필요하다.
from django.views import View

class ContactView(View):
	def get(self, request):
    	return
        
	def post(self, request):
    	return

이렇게 봤을때는 그냥 함수 기반 뷰를 사용해도 되지않나 ?? 라는 생각이 든다.

하지만 클래스기반 뷰를 사용하는 가장 큰 이유가 있다.

Generic Class-Based View

제네릭 클래스 기반 뷰는 새로운 객체 생성 , 폼처리 , 리스트 뷰 , 페이징 , 아카이브 뷰 등과 같은 같은 사용 사례를 해결하기 위해 도입되었다.

위그림 처럼 사용을 하면 되며 ,

개발 프로세스 속도를 높여준다.

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

상황에 따라 적절하게 사용하면 될것같다.

profile
꾸준함이란 ... ?

0개의 댓글