我有一个正在为公司开发的应用程序,可以将数据从旧系统转换为新系统。它具有Django Rest Framework后端,该前端具有react / redux支持的前端。从功能上讲,程序可以执行我想要的操作,但是它不想提取所有数据。后端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
REST框架的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个结果。就像只拉第一页一样。