Адаптация глобальной настройки PAGE_SIZE в Django REST Framework's browsable API к другой локальной настройке PAGE_SIZE
Мы используем Django REST Framework с пагинацией и просматриваемым API.
Глобальный параметр для размера страницы в settings.py
установлен в 10000
для того, чтобы получить более высокую производительность при обращении к API через HTTP запросы, что работает хорошо:
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.TokenAuthentication",
],
"DEFAULT_FILTER_BACKENDS": ["django_filters.rest_framework.DjangoFilterBackend"],
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
"PAGE_SIZE": 10000,
}
Теперь проблема в том, что это напрямую связано с browsable API, который также перечисляет 10000
записи на странице. Это, конечно, занимает очень много времени или даже ломается в некоторых браузерах.
Есть ли способ изменить это поведение локально для просматриваемого API?
Заранее спасибо!
Я нашел решение, используя пользовательский класс пагинации, например, в utils.py
:
from rest_framework.pagination import PageNumberPagination
class AdjustableResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = "page_size"
max_page_size = 10000
, который можно использовать в views.py
:
from rest_framework import viewsets
from .utils import AdjustableResultsSetPagination
class RestrictedViewSet:
"""
Parent view that restricts viewers without authentication.
"""
# ...
pagination_class = AdjustableResultsSetPagination
class DeviceViewSet(RestrictedViewSet, viewsets.ModelViewSet):
# ...
pass
и позволяет установить page_size
вручную, например, через:
GET /api/addresses/?page_size=5
Спасибо Андрею за то, что направил меня в нужном направлении!