Ограничение элементов на страницу в Django Rest Framework
каков наилучший способ ограничить элементы на странице в Django Rest Framework? Я установил PAGINATE_BY = 20 и PAGINATE_BY_PARAM. Без параметра вы получаете 20 элементов, но также можно получить 4000 элементов по paginate param. Эти запросы очень тяжелые и не очень полезные, но идеально подходят для скриптовых детишек.
Jarus
4 ответов
Если вы хотите установить жесткий максимальный предел, посмотрите на переопределение get_paginate_by
метод для общих представлений.
необходимо указать PAGINATE_BY
as doc гласит:
PAGINATE_BY: размер страницы по умолчанию для разбиения на страницы. Если установлено Нет, разбиение на страницы отключено по умолчанию
PAGINATE_BY_PARAM
для пользователей, чтобы изменить размер по умолчанию. Поэтому, если вы боитесь его неправильного использования, просто не включайте его.
PAGINATE_BY_PARAM: имя параметра запроса, который может использоваться клиент для переопределения размер страницы по умолчанию для разбиения на страницы. Если значение None, клиенты не могут переопределять размер страницы по умолчанию.
Set 'MAX_PAGINATE_BY'
настройка глобальные максимальные результаты на страницу, как doc государства.
пример doc:
REST_FRAMEWORK = {
'PAGINATE_BY': 10, # Default to 10
'PAGINATE_BY_PARAM': 'page_size', # Allow client to override, using `?page_size=xxx`.
'MAX_PAGINATE_BY': 100 # Maximum limit allowed when using `?page_size=xxx`.
}
Set max_paginate_by
настройка на посмотреть основа для жесткого максимального ограничения на страницу.
пример из doc:
class PaginatedListView(ListAPIView):
queryset = ExampleModel.objects.all()
serializer_class = ExampleModelSerializer
paginate_by = 10
paginate_by_param = 'page_size'
# Set MAX results per page
max_paginate_by = 100
лучше пройти пагинации
на PageNumberPagination
класса включает в себя ряд attributes
это может быть переопределено для изменения стиля разбиения на страницы.
class ItemSetPagination(PageNumberPagination):
page_size = 1000
page_size_query_param = 'page_size'
max_page_size = 10000
pagination_class = ItemSetPagination