728x90
반응형

Django REST Framework(DRF)의 mixins 클래스는 공통적인 CRUD(생성, 읽기, 업데이트, 삭제) 동작을 구현하는 데 필요한 재사용 가능한 코드를 제공한다. mixins는 DRF에서 제네릭 뷰와 결합하여 API 엔드포인트를 효율적으로 구현할 수 있도록 설계된 추상 클래스이다.
개념
Mixins는 객체 지향 프로그래밍(OOP)에서 다중 상속을 통해 특정 기능을 재사용할 수 있도록 설계된 클래스이다. DRF의 mixins 클래스는 API에서 흔히 사용되는 작업을 수행하도록 메서드를 제공하며, 개발자가 전체 기능을 직접 구현하지 않아도 되도록 한다.
주요 mixins 클래스
DRF에서 제공하는 mixins 클래스는 다음과 같다:
- CreateModelMixin
- 객체를 생성하는 동작(POST 요청)을 처리.
- perform_create 메서드를 통해 저장 로직을 커스터마이징 가능.
- RetrieveModelMixin
- 특정 객체를 조회하는 동작(GET 요청)을 처리.
- UpdateModelMixin
- 객체를 수정하는 동작(PUT 또는 PATCH 요청)을 처리.
- perform_update 메서드를 통해 수정 로직을 조정 가능.
- DestroyModelMixin
- 객체를 삭제하는 동작(DELETE 요청)을 처리.
- ListModelMixin
- 객체의 목록을 조회하는 동작(GET 요청)을 처리.
사용법
mixins는 단독으로 사용되지 않고, 제네릭 뷰 클래스와 함께 사용된다.
기본 예제:
from rest_framework import mixins, generics
from .models import Article
from .serializers import ArticleSerializer
class ArticleListView(
mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView
):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
주요 특징과 동작
- 재사용성
- CRUD와 관련된 공통 동작을 mixins에 정의하여 코드 중복을 줄임.
- 유연성
- 필요한 동작만 포함할 수 있도록 여러 mixins 클래스를 선택적으로 조합 가능.
- GenericAPIView와 결합
- DRF의 GenericAPIView와 함께 사용되며, URL 매칭, 쿼리셋 설정, 직렬화 등을 추가로 제공.
- 메서드 오버라이딩 가능
- 각 mixins에서 제공하는 메서드(예: perform_create, perform_update)를 오버라이딩하여 커스터마이징 가능.
실제 활용 예제:
게시글 목록 조회 및 생성
from rest_framework import mixins, generics
from .serializers import PostSerializer
from .models import Post
class PostListCreateView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
특정 게시글 조회, 수정 및 삭제
from rest_framework import mixins, generics
from . import Post
from api.serializers import PostSerializer
class PostRetrieveUpdateDeleteView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs)
장점
- 효율성: 자주 사용하는 CRUD 동작을 쉽게 추가.
- 재사용성: 특정 기능을 구현한 코드를 다른 클래스에서 재사용 가능.
- 유연성: 필요한 mixins만 선택하여 원하는 조합으로 동작 구현 가능.
주의사항
- 제네릭 뷰와 비교
- ListCreateAPIView, RetrieveUpdateDestroyAPIView 같은 제네릭 뷰는 mixins를 이미 포함하고 있으므로, mixins를 별도로 사용하는 경우는 커스터마이징이 필요한 상황에 더 적합.
- 중복 사용 방지
- 필요 없는 mixins를 상속받으면 코드가 불필요하게 복잡해질 수 있음. 필요한 동작만 추가해야 함.
결론
DRF의 mixins 클래스는 기본적인 API 동작을 효율적으로 구현할 수 있도록 돕는다. 이를 통해 코드 중복을 줄이고, 필요한 기능을 커스터마이징하면서도 간결한 코드 작성이 가능하다. GenericAPIView와 조합하여 사용하면 더욱 강력한 RESTful API를 구현할 수 있다.
728x90
반응형
'코딩' 카테고리의 다른 글
| 데코레이터; 가마솥에 온도계를 꽂다 (1) | 2024.12.12 |
|---|---|
| Codeium (3) | 2024.12.12 |
| @api_view 데코레이터 (3) | 2024.12.05 |
| 파이썬 자료형; Data Types (1) | 2024.12.05 |
| 파이썬 출력 예쁘게 하기; python Format (2) | 2024.12.05 |