DRF 9 - Pagination

Joey Lee·2020년 7월 13일
1

Django REST Framework

목록 보기
10/16

1. Setting pagination globally

퍼미션과 마찬가지로 settings.py에서 페이지네이션을 글로벌로 설정할 수 있다.

[settings.py]

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

페이지 적용 전에 http://localhot/api/ebooks에 가면 아래와 같은 모습으로 ebook의 전체 리스트가 한 번에 다 호출된다.

페이지네이션 적용 후에는 아래와 같은 화면으로 바뀐다.
가장 큰 변화는 count, next, previous 정보를 전달해 준다는 것이다. 전체 ebook의 갯수가 몇 개인지, 다음 페이지, 이전 페이지 정보를 별도의 코드 작성 없이 바로 뿌려주는 편리함이 생기는 것이다.

2. Setting pagination locally

퍼미션과 마찬가지로 로컬에서 페이지네이션을 작성하려면, 1) api/pagination.py에서 customized된 페이지네이션 클래스를 작성하고, 2) views.py에서 임포트해서 사용하면 된다.

1) pagination.py 작성

from rest_framework.pagination import PageNumberPagination

class SmallSetPagination(PageNumberPagination):
    page_size = 3

2) views.py 수정

SmallSetPagination을 임포트하고, 적용할 View에 pagination_class로 추가해 준다.
이 때 queryset의 order_by를 부여해서 어떤 순서로 보여줄지 명확히 하는 것이 좋다.

from ebooks.api.pagination import SmallSetPagination

class EbookListCreateAPIView(generics.ListCreateAPIView):
    queryset = Ebook.objects.all().order_by("-id")
    serializer_class = EbookSerializer
    permission_classes = [IsAdminUserOrReadOnly]
    pagination_class = SmallSetPagination
profile
안녕하세요!

0개의 댓글