목차
클래스 기반 뷰 (Class-Based Views, CBV)
🌪️ Django의 view는 HTTP 요청을 처리하고 HTTP 응답을 반환하는 역할을 합니다.
🌪️ 기본적으로 Django는 함수 기반 뷰(Function-Based Views, FBV)를 제공하지만,
더 구조적이고 재사용 가능한 코드를 작성하기 위해 클래스 기반 뷰(Class-Based Views, CBV)를 제공합니다.
🌪️ CBV는 객체 지향 프로그래밍(OOP)의 개념을 활영하여 뷰를 구성합니다.
클래스 기반 뷰란?
🌪️ 클래스 기반 뷰는 Python 클래스 형태로 작성된 뷰입니다.
🌪️ FBV에서는 하나의 함수로 요청을 처리하지만, CBV에서는 클래스를 사용하여 요청 매서드(GET, POST 등) 별로 로직을 분리하거나
재사용 가능한 코드를 작성할 수 있습니다.
🌪️ CBV는 다음과 같은 장점을 제공합니다:
- 코드 재사용성 : 공통 로직을 상속받아 사용할 수 있습니다.
- 구조적 설계 : 요청 메서드(GET, POST 등)를 명확히 분리할 수 있습니다.
🔝
2. CBV 기본 구조
2.1. View
🌪️ CBV는 django.views 모듈의 View 클래스를 상속받아 구현합니다.
🌪️ 기본 구조는 다음과 같습니다:
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request):
return HttpResponse('GET 요청에 대한 응답입니다.')
def post(self, request):
return HttpResponse('POST 요청에 대한 응답입니다.')
🌪️ 주요 메서드
- get(self, request, *args, **kwargs): GET 요청을 처리하는 메서드.
- post(self, request, *args, **kwargs): POST 요청을 처리하는 메서드.
- put(self, request, *args, **kwargs): PUT 요청을 처리하는 메서드.
- delete(self, request, *args, **kwargs): DELETE 요청을 처리하는 메서드.
2.2. APIView
🌪️ APIView는 Django REST Framework에서 제공하는 기본적인 클래스 기반 뷰입니다.
🌪️ django.views.View 클래스를 상속받아 HTTP 메서드(GET, POST, PUT, DELETE 등)에 대한 핸들러 메서드를 정의합니다.
# django-rest-framework
pip install djangorestframework
from rest_framework.views import APIView
from rest_framework.response import Response
class MyView(APIView):
def get(self, request):
return Response({'message': 'GET 요청에 대한 응답입니다.'})
def post(self, request):
return Response({'message': 'POST 요청에 대한 응답입니다.'})
🔝
3. URL 패턴에 CBV 연결
🌪️ CBV를 URL에 연결하려면 클래스 자체를 호출하는 것이 아니라 .as_view() 메서드를 사용해야 합니다.
🌪️ 이 메서드는 클래스를 호출 가능한 객체로 변환합니다.
🌪️ 예제:
from django.urls import path
from .views import MyView
urlpatterns = [
path('myview/', MyView.as_view(), name='myview'),
]
3.1. urls.py → views.py
3.2. Raw data → json : serializer
'🔥 공부 > 📘 Django, DRF' 카테고리의 다른 글
[📘 DRF] APIView 기반 CRUD (0) | 2025.02.11 |
---|---|
[📘 Django, DRF] API란? (0) | 2025.02.11 |
[📘 Django] 관계형 데이터베이스 (0) | 2025.02.10 |
[📘 Django] Django User 모델(Model) (0) | 2025.02.10 |
[📘 Django] Model (1) | 2025.02.10 |