퍼미션과 마찬가지로 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의 갯수가 몇 개인지, 다음 페이지, 이전 페이지 정보를 별도의 코드 작성 없이 바로 뿌려주는 편리함이 생기는 것이다.
퍼미션과 마찬가지로 로컬에서 페이지네이션을 작성하려면, 1) api/pagination.py에서 customized된 페이지네이션 클래스를 작성하고, 2) views.py에서 임포트해서 사용하면 된다.
from rest_framework.pagination import PageNumberPagination
class SmallSetPagination(PageNumberPagination):
page_size = 3
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