기술블로그-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를 활용하면 구조적이고 재사용성 높은 뷰 구성이 가능하며, 다양한 요청 처리 및 응답 반환을 유연하게 구현할 수 있습니다!