Сделайте так, чтобы React-redux получал все данные из разбитого на страницы бэкэнда - PullRequest
1 голос
/ 03 июня 2019

У меня есть приложение, которое я разрабатывал для своей компании, чтобы преобразовать данные из старой системы в новую.Он имеет серверную часть 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 результатов.Как будто он тянет только первую страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...