Server/django

[Django] Pagination

또잉코딩 2020. 5. 25. 14:32

API 서버 상의 페이지네이션

API 서버의 페이지네이션의 의의

: 하나의 request만으로 처리하기 어려운 레코드들을 여러 request로 나누어 전송하기

 

DRF의 페이지네이션 구현 ( DRF 제공 클래스 )

1. PageNumberPagination

2. LimitOffsetPagination

3. CursorPagination

4. Customized Pagination

일반적으로 PageNumberPagination을 디폴트로 설정하고, 추가적인 Page 설정이 필요한 부분만 Customizing 시킨다.

 

PageNumberPagination

generics.py

GenericAPIView의 pagination_class에 디폴트 페이지네이션을 설정하도록 했는데, 이는 api_settings에서 설정되었다.

settings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 4
}

views.py

from .models import Post
from .serializer import PostSerializer
from rest_framework import viewsets


class PostViewSet(viewsets.ModelViewSet):
    # 페이지네이션을 할 적에는 반드시 레코드를 정렬한 상태에서 페이지네이션을 수행할 것
    queryset = Post.objects.all().order_by('id')
    serializer_class = PostSerializer

 

CustomizedPagination

views.py

from .models import Post
from .serializer import PostSerializer
from rest_framework import viewsets
from rest_framework.pagination import PageNumberPagination

class MyPagination(PageNumberPagination):
    page_size = 5

class PostViewSet(viewsets.ModelViewSet):
    # 페이지네이션을 할 적에는 반드시 레코드를 정렬한 상태에서 페이지네이션을 수행할 것
    queryset = Post.objects.all().order_by('id')
    serializer_class = PostSerializer
    pagination_class = MyPagination

또는 pagination.py 생성 후 views.py에서 import

from rest_framework.pagination import PageNumberPagination

class MyPagination(PageNumberPagination):
    page_size = 5
from .models import Post
from .serializer import PostSerializer
from rest_framework import viewsets
from .pagination import MyPagination

class PostViewSet(viewsets.ModelViewSet):
    # 페이지네이션을 할 적에는 반드시 레코드를 정렬한 상태에서 페이지네이션을 수행할 것
    queryset = Post.objects.all().order_by('id')
    serializer_class = PostSerializer
    pagination_class = MyPagination

 

 

참고 : django-rest-framework github - generics.py

 

encode/django-rest-framework

Web APIs for Django. 🎸. Contribute to encode/django-rest-framework development by creating an account on GitHub.

github.com

참고 : django-rest-framework documentation - pagination

 

Pagination - Django REST framework

pagination.py Django provides a few classes that help you manage paginated data – that is, data that’s split across several pages, with “Previous/Next” links. — Django documentation REST framework includes support for customizable pagination styl

www.django-rest-framework.org

'Server > django' 카테고리의 다른 글

[Django] Authentication & Permission  (0) 2020.05.29
[Django] Filtering & Search  (0) 2020.05.25
[Django] View of DRF ( Django Rest Framework )  (0) 2020.05.04
[Django] JSON 직렬화 - Serializer  (0) 2020.04.28
[Django] REST Architecture  (0) 2020.04.28