Django REST Framework/DRF 일반

[DRF] ViewSet, GenericViewSet, ModelViewSet 페이지 네이션 사용 방법

bluebamus 2024. 1. 29. 23:29

 1. ViewSet

from rest_framework.viewsets import ViewSet
from rest_framework.pagination import PageNumberPagination

class CustomPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    max_page_size = 100

class MyViewSet(ViewSet):
    pagination_class = CustomPagination

    def list(self, request):
        queryset = MyModel.objects.all()
        paginator = self.pagination_class()
        result_page = paginator.paginate_queryset(queryset, request)
        serializer = MyModelSerializer(result_page, many=True)
        return paginator.get_paginated_response(serializer.data)

 

   - ViewSet은 기본적인 뷰 기능을 제공하는 클래스이다.
   - CustomPagination 클래스는 커스텀 페이지네이션 설정을 정의한 클래스이다. page_size는 한 페이지에 보여질 객체 수, page_size_query_param은 페이지 크기를 동적으로 설정하는 쿼리 파라미터 이름, max_page_size는 최대 페이지 크기를 의미한다.
   - MyViewSet은 ViewSet을 상속받은 뷰 클래스이다. pagination_class 속성을 CustomPagination 클래스로 설정하여 페이지네이션을 적용한다. list 메서드에서는 queryset을 가져오고, 페이지네이션 기능을 수행한 뒤 직렬화하여 응답한다.

 

 2. GenericViewSet

from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
from rest_framework.pagination import LimitOffsetPagination

class CustomPagination(LimitOffsetPagination):
    default_limit = 10
    limit_query_param = 'limit'
    offset_query_param = 'offset'
    max_limit = 100

class MyViewSet(GenericViewSet, ListModelMixin):
    pagination_class = CustomPagination
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

 

   - GenericViewSet은 일반적인 CRUD 기능을 제공하는 클래스이다.
   - CustomPagination 클래스는 커스텀 페이지네이션 설정을 정의한 클래스이다. default_limit는 한 페이지에 보여질 객체 수, limit_query_param은 페이지 크기를 동적으로 설정하는 쿼리 파라미터 이름, offset_query_param은 페이지 오프셋을 설정하는 쿼리 파라미터 이름, max_limit은 최대 페이지 크기를 의미한다.
   - MyViewSet은 GenericViewSet과 ListModelMixin을 상속받은 뷰 클래스이다. pagination_class 속성을 CustomPagination 클래스로 설정하여 페이지네이션을 적용한다. queryset은 필터링할 모델 데이터를 가져오고, serializer_class는 해당 모델에 대한 직렬화 클래스를 설정한다.

 

 3. ModelViewSet

from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import CursorPagination

class CustomPagination(CursorPagination):
    page_size = 10
    ordering = 'created_at'

class MyViewSet(ModelViewSet):
    pagination_class = CustomPagination
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

 

   - ModelViewSet은 모델에 대한 CRUD 기능을 제공하는 클래스이다.
   - CustomPagination 클래스는 커스텀 페이지네이션 설정을 정의한 클래스이다. page_size는 한 페이지에 보여질 객체 수, ordering은 페이지네이션 기준 필드를 의미한다.
   - MyViewSet은 ModelViewSet을 상속받은 뷰 클래스이다. pagination_class 속성을 CustomPagination 클래스로 설정하여 페이지네이션을 적용한다. queryset은 필터링할 모델 데이터를 가져오고, serializer_class는 해당 모델에 대한 직렬화 클래스를 설정한다.