
Django에서 ViewSet은 RESTful API를 쉽게 구축할 수 있도록 도와주는 기능입니다.
ViewSet은 일반적인 뷰를 그룹화하여 공통적인 CRUD 작업을 처리합니다.
ViewSet은 기본적인 ViewSet 클래스입니다. 이 클래스는 ModelViewSet, ReadOnlyModelViewSet 등에서 상속받아 사용되며, HTTP 메서드에 따라 동작하는 CRUD 작업을 명시적으로 정의하지 않고 직접 구현하는 데 사용할 수 있습니다.
모든 HTTP 메서드(GET, POST, PUT, DELETE 등)를 지원할 수 있도록 메서드를 직접 정의해야 합니다.
기본적으로 아무 동작도 하지 않으며, 사용자가 직접 메서드를 정의해야 합니다.
class CustomViewSet(viewsets.ViewSet):
def list(self, request):
pass
def create(self, request):
pass
ModelViewSet은 가장 많이 사용되는 ViewSet으로, 기본적인 CRUD(Create, Retrieve, Update, Delete) 작업을 모두 처리할 수 있는 기능을 제공합니다.
queryset과 serializer_class를 정의하면 자동으로 리스트, 생성, 조회, 업데이트, 삭제 기능을 제공합니다.
모든 CRUD 작업을 하나의 ViewSet에서 처리하고자 할 때 사용합니다.
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
ReadOnlyModelViewSet은 읽기 전용 ViewSet입니다. 이 ViewSet은 list와 retrieve 작업만 지원하며, 생성, 업데이트, 삭제 작업은 허용하지 않습니다.
데이터 조회만 필요한 경우에 사용합니다.
데이터의 수정이나 삭제를 막고자 할 때 유용합니다.
class MyReadOnlyModelViewSet(viewsets.ReadOnlyModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
GenericViewSet은 다른 믹스인 클래스와 결합하여 사용되는 ViewSet입니다. GenericAPIView에서 파생된 기능을 활용할 수 있으며, 원하는 기능만 조합할 수 있습니다.
CRUD 작업 중 특정 기능만 필요할 때, 해당 작업에 맞는 믹스인을 추가하여 사용할 수 있습니다.
mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin 등과 함께 사용하여 세밀하게 조정할 수 있습니다.
from rest_framework import mixins, viewsets
class MyCustomViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
시간이 없는 직장인을 위해
ViewSet: 가장 기본적인 ViewSet으로, 모든 메서드를 직접 구현해야 합니다.
ModelViewSet: CRUD 작업을 모두 지원하는 ViewSet으로, queryset과 serializer_class만 정의하면 됩니다.
ReadOnlyModelViewSet: 조회 작업만 지원하는 ViewSet으로, 데이터의 수정이나 삭제가 필요 없는 경우에 사용됩니다.
GenericViewSet: 필요한 기능만 믹스인 클래스로 조합하여 사용할 수 있는 ViewSet입니다.
이들 ViewSet을 통해 Django REST Framework에서는 효율적으로 API를 구성할 수 있습니다. 필요에 따라 적절한 ViewSet을 선택하면 코드의 가독성과 유지보수성을 높일 수 있습니다.