본문 바로가기
IT/Django

Django, 함수 기반 뷰(FBV), 클래스 기반 뷰 호출(CBV)의 차이

by Cyber_ 2024. 4. 7.

0. 개요

Django에서 뷰(View)는 웹 요청을 받고 응답을 반환하는 기능을 담당하는데 뷰는 크게 두 가지 방식으로 구현

  • 함수 기만 뷰(Function_Based Views,FBV)
  • 클래스 기반 뷰(Class-Based Views, CBV)
    둘의 차이를 알아보자

1. FBV

1) FBV란?

  • 간단하게 하나의 함수로 요청을 처리하는 방식

2) 장점

  • 간결성: 작은 애플리케이션 또는 단순한 긴으을 구현할 때 코드가 간결
  • 직관성: 함수의 시작부터 끝까지 코드의 흐름을 쉽게 파악

3) 예시

from django.shortcuts import render

def my_view(request):
    return render(request, 'my_template.html', {'additional_data': 'This is additional data'})
from django.urls import path
from .views import my_view

urlpatterns = [
    path('example/', my_view),
]

2. CBV

1) CBV란?

  • 객체 지향 프로그래밍의 원칙을 사용하여 뷰를 구현하는 방식
  • 뷰의 기능을 클래스로 정의, 필요한 메서드를 오버라이딩하거나 확장

2) 장점

  • 재사용성과 확장성: 공통적인 기능을 가진 기본 클래스를 만들고, 일을 상속받아 다양한 뷰를 쉽게 구현
  • 유지보수 용이: 함수보다 구조화된 클래스를 사용함으써 코드의 가독성과 관리가 용이
  • 믹스인 활용: 믹스인 클래스를 사용하여 다양한 기능을 조합

3) 예시

from django.views.generic import TemplateView

class MyView(TemplateView):
    template_name = "my_template.html"
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['additional_data'] = 'This is additional data'
        return context
from django.urls import path
from .views import MyView

urlpatterns = [
    path('example/', MyView.as_view()),
]
  • as_view 메서드를 사용하여 클래스 기반 뷰를 호출,
  • get, post 등을 호출

3. 결론

  • 프로젝트에 요구 사항과 개발자의 선호에 따라 적절한 방식을 선택하는 것이 좋다
    무엇이 더 좋다고 하기엔 어려운 것 같다.