📘 DRF - Generics
📘 Generics?
Django REST Framework (DRF)에서의 Generics는
API View를 작성할 때, 자주 사용되는 CRUD 작업을 간단하게 처리할 수 있게 도와주는 클래스를 제공합니다.
📘 DRF Generics의 장점
- 코드 간소화
- CRUD 작업을 처리하는 기본적인 로직을 제너릭 클래스가 자동으로 처리함
→ 반복적인 코드를 작성할 필요가 없음
- CRUD 작업을 처리하는 기본적인 로직을 제너릭 클래스가 자동으로 처리함
- 유지보수 용이
- 제너릭 클래스는 기본적인 기능을 잘 갖추어져 있음
→ 추가적인 복잡한 로직을 추가하는 것이 용이함
- 제너릭 클래스는 기본적인 기능을 잘 갖추어져 있음
- 성능 최적화
- 기본적인 뷰에 대한 최적화가 이미 되어 있음
→ 효율적인 API를 쉽게 작성할 수 있음
- 기본적인 뷰에 대한 최적화가 이미 되어 있음
🔝
📘 주요 제네릭 클래스 ‼️
API View | 기능 | |
1 | ListAPIView | 데이터를 목록 형태로 반환 |
2 | CreateAPIView | 데이터를 생성 |
3 | ListCreateAPIView |
목록 조회와 생성 기능을 동시에 처리 |
4 | RetrieveAPIView | 단일 객체를 반환 |
5 | UpdateAPIView | 데이터를 수정 |
6 | DestroyAPIView | 데이터를 삭제 |
7 | RetrieveUpdateDestroyAPIView | 조회, 수정, 삭제 기능을 동시에 처리 |
🔝
📘 DRF Generics 사용 예시
아래는 DRF에서 Generics를 사용하는 간단한 예시입니다.
이 예시에서는 Book 모델에 대한 CRUD API를 작성합니다.
⚙️ models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
def __str__(self):
return self.title
⚙️ URL 설정
from django.urls import path
from .views import BookListView, BookDetailView
urlpatterns = [
path('books/', BookListView.as_view(), name='book-list'), # 책 목록 확인
path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'), # 책 상세 목록 확인
]
- BookListView에서는 책 목록을 볼 수 있음과 동시에 생성하는 로직으로 구성할 거예요
- BookDetailView에서는 특정 책의 내용과 수정, 삭제를 동시에 수행하는 로직으로 구성할 거예요
⚙️ Serializer 정의
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']
- id, title, author, published_data를 다루게끔 설정하였어요
⚙️ View 정의 (Generics 사용)
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
# 책 목록을 조회하는 API 뷰
class BookListView(generics.ListCreateAPIView):
queryset = Book.objects.all() # 어떤 데이터베이스 모델을 사용할지
serializer_class = BookSerializer # 직렬화를 사용하여 데이터 처리
# 책을 상세 조회하는 API 뷰
class BookDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all() # 어떤 데이터베이스 모델을 사용할지
serializer_class = BookSerializer # 직렬화를 사용하여 데이터 처리
- BookListView는 책 목록을 조회하고, 새로운 책을 생성할 수 있는 API입니다.
- generics.ListCreateAPIView를 통해서 구현 가능합니다.
- BookDetailView는 특정 책을 조회하고, 수정하거나 삭제할 수 있는 API입니다.
- generics.RetrieveUpdateDestroyAPIView를 통해서 구현 가능합니다.
🔝
🤔 각 뷰에 대한 설명
- BookListView (ListCreateAPIView):
- GET 요청: 모든 책을 조회하여 리스트 형식으로 반환합니다.
- POST 요청: 새로운 책을 생성합니다.
- BookDetailView (RetrieveUpdateDestroyAPIView):
- GET 요청: 특정 책의 정보를 조회합니다.
- PUT/PATCH 요청: 특정 책의 정보를 수정합니다.
- DELETE 요청: 특정 책을 삭제합니다.
📘 커스터마이징 예시
가끔 제너릭 뷰만으로는 충분하지 않을 수 있습니다.
이럴 경우, perform_create()나 get_queryset() 메서드를 오버라이드하여 추가적인 로직을 처리할 수 있습니다.
# views.py
class BookListView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
def perform_create(self, serializer):
# 책을 생성할 때, 특정 로직을 추가 (예: 특정 작가로 책이 생성되는 것)
serializer.save(author="Default Author")
이처럼, perform_create() 메서드를 오버라이드하면, 책이 생성될 때마다 특정 작가로 자동으로 설정될 수 있습니다.
🔝
'🔥 공부 > 📘 DRF 공부' 카테고리의 다른 글
[DRF] generics.GenericAPIView? (0) | 2025.02.17 |
---|---|
[DRF] serializer_class? (0) | 2025.02.17 |
[DRF] Django REST framework simple JWT (1) | 2025.02.15 |
[DRF] Django Deploy with AWS, 배포 (0) | 2025.02.06 |
[DRF] 외부 API 연동하기 (feat. ChatGPT) (0) | 2025.02.05 |