У меня есть приложение, которое я разрабатывал для своей компании, чтобы преобразовать данные из старой системы в новую.Он имеет серверную часть Django Rest Framework с интерфейсом с реактивным / избыточным питанием.Функционально программа делает то, что я хочу, но она не хочет извлекать все данные.Внутренний API-интерфейс разбит на страницы размером 200. Внешний интерфейс имеет свою собственную нумерацию страниц, поэтому он не показывает все результаты ~ 40k одновременно.Однако я хочу, чтобы он загрузил все эти результаты в реквизит, чтобы можно было найти именно тот элемент, который они хотят.Возможно, это не лучший способ решить эту проблему, но это мое первое приложение с полным стеком, так что пока оно будет работать.
Я попытался просто удалить размер страницы из серверной части, поскольку никто из моих пользователейвсе равно увидим.На небольших наборах данных это работало нормально.Однако, как только я начал извлекать данные из более крупного набора данных, он жалуется, что параметры запроса не соответствуют ожидаемым по какой-то причине, если я не разбираюсь на страницы.
Вот код, который я считаю релевантным.Если вам нужно больше, пожалуйста, дайте мне знать.
Фронтенд:
//Get request sent out to the back end.
//Returns 200 results to my state right now
//Should be returning 40k results total and paginating
export const getQuotes = () => dispatch => {
axios
.get("http://localhost:8000/api/quotes/")
.then(res => {
dispatch({
type: GET_QUOTES,
payload: res.data.data
});
})
.catch(err => console.log(err));
};
Бэкэнд:
#this is just the viewset used. I filter and pre-fetch some data.
#currently on the backend I can see 200 pages of 200 results each
#as well as specify an ID to get a single detailed view
class QuoteinfoApiViewset(viewsets.ModelViewSet):
queryset = Quoteinfo.objects.all()
serializer_class = QuoteinfoSerializer
def get_queryset(self):
self.queryset = Quoteinfo.objects.prefetch_related('lines', 'lines__lineasm', 'lines__linemat').filter(quotedate__gte= datetime(2017,1, 1))
return self.queryset
Настройки Django для остальной структуры
#right here is where I set the page size
#somewhere between here and the front end
#it mistakes this for me only wanting 200 results total
#even though the backend returns the proper results
REST_FRAMEWORK = {
'PAGE_SIZE': 200,
'EXCEPTION_HANDLER':
'rest_framework_json_api.exceptions.exception_handler',
'DEFAULT_PAGINATION_CLASS': 'rest_framework_json_api.pagination.JsonApiPageNumberPagination',
'DEFAULT_PARSER_CLASSES': (
'rest_framework_json_api.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_json_api.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.OrderingFilter',
),
'ORDERING_PARAM': 'sort',
'TEST_REQUEST_RENDERER_CLASSES': (
'rest_framework_json_api.renderers.JSONRenderer',
),
'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}
По сути, у меня есть размер конечной страницыиз 200. В моем бэк-энде у меня есть 200 страниц с 200 пунктами каждая.На моем фронте у меня всего 200 результатов.Как будто он тянет только первую страницу.