기술블로그-Django편
🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리
Chansman
2025. 5. 14. 15:23
🧭 Django CBV(Class-Based View) + 요청/응답 흐름 정리
1️⃣ CBV란?
**CBV(Class-Based View)**는 Django에서 뷰를 클래스 기반으로 구현할 수 있게 해주는 기능입니다.
✅ 장점
- 코드 재사용성 ✅
- 명확한 역할 분리 ✅
- 유지보수 편의성 ✅
CBV는 함수형 뷰(FBV)보다 더 구조적이며, CRUD 로직에 적합합니다.
2️⃣ View 클래스 기본 구조
from django.views import View
from django.http import HttpResponse
class MyView(View):
def get(self, request):
return HttpResponse("GET 요청")
def post(self, request):
return HttpResponse("POST 요청")
📌 get(), post() 등 HTTP 메서드에 따라 동작 분리
3️⃣ Generic Views 종류
Django는 CBV에서 자주 쓰는 CRUD 패턴을 추상화한 Generic View를 제공합니다.
클래스 역할
ListView | 전체 목록 조회 |
DetailView | 단일 객체 상세 조회 |
CreateView | 새 객체 생성 |
UpdateView | 기존 객체 수정 |
DeleteView | 객체 삭제 및 리디렉션 |
TemplateView | 단순 HTML 렌더링 용도 |
FormView | 폼 처리 중심 뷰 |
예시: CreateView
from django.views.generic import CreateView
from .models import Post
class PostCreateView(CreateView):
model = Post
fields = ['title', 'content']
template_name = 'post/create.html'
success_url = '/posts/'
4️⃣ request 객체에서 정보 가져오기
🔑 사용자 정보
request.user # 현재 로그인한 사용자 객체
📦 POST/GET 데이터
request.POST.get('title')
request.GET.get('page')
🔗 URL 파라미터 (Path Parameter)
# urls.py
path('post/<int:pk>/', PostDetailView.as_view(), name='detail')
# views.py
class PostDetailView(DetailView):
def get_object(self):
pk = self.kwargs['pk']
return Post.objects.get(pk=pk)
❓ 쿼리 파라미터 (Query Parameter)
/posts/?page=2
page = request.GET.get('page')
5️⃣ response 구성 요소
✅ HttpResponse
from django.http import HttpResponse
return HttpResponse("페이지 응답")
🔁 HttpResponseRedirect
from django.http import HttpResponseRedirect
return HttpResponseRedirect('/login/')
- 주로 POST 요청 후 GET 이동(리다이렉션)에 사용
📡 status code 변경
return HttpResponse("권한 없음", status=403)
📤 JSON/데이터 응답
from django.http import JsonResponse
return JsonResponse({'result': 'success'})
✅ 요약표
항목 설명
CBV | 클래스 기반 뷰 (코드 구조화 및 재사용 가능) |
Generic Views | CRUD 중심 뷰 제공 (List, Create 등) |
request.user | 현재 로그인한 사용자 객체 |
request.GET/POST | 입력 데이터 가져오기 |
URL/Query 파라미터 | kwargs / request.GET.get() 방식으로 활용 |
response | HttpResponse, Redirect, JsonResponse 등 제공 |
📌 CBV를 활용하면 구조적이고 재사용성 높은 뷰 구성이 가능하며, 다양한 요청 처리 및 응답 반환을 유연하게 구현할 수 있습니다!