Pagination in Django-Rest-Framework using API-View

后端 未结 4 806
刺人心
刺人心 2020-12-08 08:34

I currently have an API view setup as follows:

class CartView(APIView):
    authentication_classes = [SessionAuthentication, TokenAuthentication]
    permiss         


        
4条回答
  •  青春惊慌失措
    2020-12-08 09:18

    I prefer extending the Paginator class, here is how it would look:

    from rest_framework import status
    from rest_framework.exceptions import NotFound as NotFoundError
    from rest_framework.pagination import PageNumberPagination # Any other type works as well
    from rest_framework.response import Response
    from rest_framework.views import APIView
    
    class CustomPaginator(PageNumberPagination):
        page_size = 10 # Number of objects to return in one page
    
        def generate_response(self, query_set, serializer_obj, request):
            try:
                page_data = self.paginate_queryset(query_set, request)
            except NotFoundError:
                return Response({"error": "No results found for the requested page"}, status=status.HTTP_400_BAD_REQUEST)
    
            serialized_page = serializer_obj(page_data, many=True)
            return self.get_paginated_response(serialized_page.data)
    
    class CartView(APIView):
    
        def get(self, request, format=None):
            cart_details = Cart.objects.filter(user=request.user) # or any other query
            paginator = CustomPaginator()
            response = paginator.generate_response(cart_details, CartDetailSerializer, request)
            return response
    

提交回复
热议问题