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

2025. 5. 8. 10:00·Django

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

'Django' 카테고리의 다른 글

Chapter 5-3 📌 Django CBV - DetailView로 블로그 상세 페이지 구현 및 커스터마이징  (0) 2025.05.08
Chapter 5-2 📌 Django CBV - ListView로 블로그 목록 + 검색 + 페이지네이션 구현하기  (0) 2025.05.08
Chapter 4-6 Django 블로그 검색 기능 구현하기  (0) 2025.05.07
Chapter 4-7 Django 블로그 삭제 기능 만들기  (0) 2025.05.07
Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기  (0) 2025.05.07
'Django' 카테고리의 다른 글
  • Chapter 5-3 📌 Django CBV - DetailView로 블로그 상세 페이지 구현 및 커스터마이징
  • Chapter 5-2 📌 Django CBV - ListView로 블로그 목록 + 검색 + 페이지네이션 구현하기
  • Chapter 4-6 Django 블로그 검색 기능 구현하기
  • Chapter 4-7 Django 블로그 삭제 기능 만들기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (800) N
      • Python (32)
      • 프로젝트 (115) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bts
    lawsuitculture
    btsjungkook
    americaparty
    titaniumcase
    travel ban
    trumpmuskclash
    livebroadcast
    뷔
    college reunions
    gpterror
    classaction
    urbantrends
    self-growth
    newpoliticalparty
    RM
    btscomeback
    basalcellcarcinoma
    global politics
    life reflection
    chatgpterror
    hotcoffeecase
    homebartrend
    btsreunion
    btsdischarge
    smartphonedurability
    chinanightlife
    youngprofessionals
    americanlaw
    remittance
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 5-1 📌 Django Class-Based Views (CBV) 완전 정복 가이드
상단으로

티스토리툴바