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
참고 : django-rest-framework documentation - pagination
'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 |