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