Django pagination

Jimin·2023년 2월 6일
0

settings.py REST_FRAMEWORK에 추가

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ], # 이건 기존에 있는 내용
    'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE' : 5,  # 한 page 당 보여줄 개수
}

PageNumberPagination을 상속 받아서 사용하기

from .models import House2
from rest_framework.views import APIView
from rest_framework.pagination import PageNumberPagination

class Houses(APIView, PageNumberPagination):
    def get(self, request):
        all_houses = House2.objects.all()

        results = self.paginate_queryset(all_houses, request)
        serializer = HouseSerializer(results, many=True)
        return self.get_paginated_response(serializer.data)

# url
urlpatterns=[
    path("", views.Houses.as_view()),
]

ViewSet을 상속 받아서 사용

from rest_framework.viewsets import ModelViewSet
from .models import House2

class HouseViewSet(ModelViewSet):
    serializer_class = HouseSerializer
    queryset = House2.objects.all()

# url
urlpatterns = [
    path("", views.HouseViewSet.as_view(
            {
                "get": "list",
                "post": "create",
            }
        ),
    ),
    path("<int:pk>", views.HouseViewSet.as_view(
            {
                "get": "retrieve",
                "put": "partial_update",
                "delete": "destroy",
            }
        ),
    ),
]

LimitOffsetPagination 사용

from .models import House2
from rest_framework.views import APIView
from rest_framework.pagination import LimitOffsetPagination 

class Houses(APIView, LimitOffsetPagination):
    def get(self, request):
        all_houses = House2.objects.all()

        results = self.paginate_queryset(all_houses, request)
        serializer = HouseSerializer(results, many=True)
        return self.get_paginated_response(serializer.data)
profile
https://github.com/Dingadung

0개의 댓글