Django

Chapter 5-1 📌 Django Class-Based Views (CBV) 완전 정복 가이드

Chansman 2025. 5. 8. 10:00

📌 Django Class-Based Views (CBV) 완전 정복 가이드


1️⃣ CBV란?

Django에서 뷰(View)를 클래스 기반으로 정의하는 방식입니다.
**Class-Based View (CBV)**는 함수형 뷰(FBV)보다 재사용성, 구조화, 확장성 면에서 뛰어납니다.

✔️ CBV의 장점:

  • 재사용성: 상속과 Mixin을 활용해 중복 코드 제거
  • 구조화: 뷰 로직을 클래스 내 메서드로 명확히 분리
  • 확장성: ListView, DetailView, CreateView 등의 제너릭 뷰 제공

🔗 공식 문서 바로가기

🧚 제너릭 뷰를 배우면 유지보수가 쉬워지고 생산성이 향상됩니다! 한 번 익숙해지면 빠져나오기 힘든 마법같은 기능 💫


2️⃣ TemplateView - 정적 페이지 구성 흐름

📌 Step 1. URL 연결

from django.views.generic import TemplateView

urlpatterns = [
    path('about', TemplateView.as_view(template_name='about.html'), name='about'),
]
  • TemplateView.as_view()로 뷰 인스턴스 생성
  • template_name에 렌더링할 HTML 파일 지정

📌 Step 2. HTML 템플릿 작성

<!-- templates/about.html -->
<h1>어바웃 페이지 입니다.</h1>
  • 단순한 정적 HTML 출력

3️⃣ TemplateView를 클래스 형태로 작성하기

📌 클래스 정의 방식

class AboutView(TemplateView):
    template_name = 'about.html'

urlpatterns = [
    path('about', AboutView.as_view(), name='about'),
]
  • TemplateView를 상속받아 명시적으로 클래스 작성
  • as_view()로 클래스 인스턴스를 호출

4️⃣ RedirectView - 리다이렉트 흐름 처리

📌 두 가지 방식

from django.views.generic import RedirectView
from django.shortcuts import redirect

urlpatterns += [
    path('redirect/', RedirectView.as_view(pattern_name='about'), name='redirect'),
    path('redirect2/', lambda req: redirect('about')),  # lambda 방식 (참고용)
]
  • RedirectView: Django가 제공하는 CBV
  • pattern_name: 이동할 URL name 지정
  • lambda: 짧은 방식이지만 유지보수에는 비추천

5️⃣ TestView - GET/POST 요청 분리 흐름

📌 CBV 직접 상속 방식

from django.views import View

class TestView(View):
    def get(self, request):
        return render(request, 'test_get.html')

    def post(self, request):
        return render(request, 'test_post.html')
  • View 클래스를 상속
  • get()은 GET 요청, post()는 POST 요청 시 실행

📌 URL 연결

urlpatterns += [
    path('test/', TestView.as_view(), name='test'),
]
  • /test/ 경로에서 요청 방식에 따라 다른 템플릿 반환

📌 HTML 구성

<!-- test_get.html -->
<h1>테스트 겟</h1>
<form method="post">
  {% csrf_token %}
  <button>포스트</button>
</form>
  • GET 요청 시 이 페이지 출력, 버튼 누르면 POST 요청 발생
<!-- test_post.html -->
<h1>테스트 포스트</h1>
  • POST 요청 시 출력되는 페이지

✅ 흐름 요약 (코드 → 결과)

요청 처리 함수 반환 템플릿

GET /test/ get() test_get.html
POST /test/ post() test_post.html
/about TemplateView about.html
/redirect/ RedirectView /about으로 이동

✅ 정리

  • TemplateView: 정적인 페이지를 빠르게 구성할 때 사용
  • RedirectView: 다른 페이지로 이동할 때 유용
  • View: 요청 방식(GET/POST)에 따라 처리 분기 가능

💡 CBV를 익히면 더 적은 코드로 깔끔하게 웹 페이지를 구성할 수 있습니다.
함수형 뷰보다 구조가 명확해서 유지보수도 훨씬 쉬워집니다!