django drf viewset

요매·2024년 8월 28일

python-django

목록 보기
2/3

Django에서 ViewSet은 RESTful API를 쉽게 구축할 수 있도록 도와주는 기능입니다.
ViewSet은 일반적인 뷰를 그룹화하여 공통적인 CRUD 작업을 처리합니다.

ViewSet

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

ModelViewSet은 가장 많이 사용되는 ViewSet으로, 기본적인 CRUD(Create, Retrieve, Update, Delete) 작업을 모두 처리할 수 있는 기능을 제공합니다.

특징

queryset과 serializer_class를 정의하면 자동으로 리스트, 생성, 조회, 업데이트, 삭제 기능을 제공합니다.
모든 CRUD 작업을 하나의 ViewSet에서 처리하고자 할 때 사용합니다.

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

ReadOnlyModelViewSet

ReadOnlyModelViewSet은 읽기 전용 ViewSet입니다. 이 ViewSet은 list와 retrieve 작업만 지원하며, 생성, 업데이트, 삭제 작업은 허용하지 않습니다.

특징

데이터 조회만 필요한 경우에 사용합니다.
데이터의 수정이나 삭제를 막고자 할 때 유용합니다.

class MyReadOnlyModelViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

GenericViewSet

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을 선택하면 코드의 가독성과 유지보수성을 높일 수 있습니다.

profile
머리속에서 정리가 안돼...

0개의 댓글