PageNumberPagination, задают класс пагинации и размер страницы, после чего list-endpoint возвращает ссылки на страницы, общее число объектов и результаты.
Как реализовать пагинацию в DRF?
Подробный ответ
Зачем нужна пагинация
Пагинация ограничивает число объектов в одном API-ответе. Она снижает нагрузку на базу и сеть, делает ответы предсказуемыми и позволяет клиенту загружать большой список частями.
Глобальная настройка
Пагинацию можно включить для всего DRF в settings.py.
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20,
}Собственный класс пагинации
from rest_framework.pagination import PageNumberPagination
class ArticlePagination(PageNumberPagination):
page_size = 20
page_size_query_param = 'page_size'
max_page_size = 100Затем класс указывают в ViewSet через pagination_class.
class ArticleViewSet(ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
pagination_class = ArticlePaginationВиды пагинации
DRF предоставляет PageNumberPagination, где используется номер страницы, LimitOffsetPagination, где передают limit и offset, и CursorPagination, которая использует курсор и хорошо подходит для больших, стабильно отсортированных списков.
Как ответить на собеседовании
В DRF я обычно задаю PageNumberPagination и PAGE_SIZE глобально или для конкретного ViewSet. Если API работает с очень большими списками и стабильной сортировкой, рассматриваю CursorPagination.
Оцени свой прогресс