django - 让 React-redux 从分页后端获取所有数据
问题描述
我有一个我一直在为我的公司开发的应用程序,用于将数据从旧系统转换为新系统。它有一个 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
用于休息框架的 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 个结果。它就像它只拉第一页。
解决方案
推荐阅读
- java - Spring boot 和 Tomcat 处理用户
- bouncycastle - 使用 BouncyCastle 时如何自定义 keyManagerFactory
- javascript - 如何在javascript中使用regularExpression查找特定的字符串块?
- perl - 打开管道上的缓冲问题,写入文件
- php - 无法在 codeigniter 上上传图片或 pdf
- c++ - C++ 中更快的算术运算
- here-api - 此处地理编码 API 在具有多个变音符号的地址上失败
- android - Android Studio 从 HashMap 获取值并分配给类
- tensorflow - tensorflow keras 模型为每个测试预测相似的值
- r - CV 的 R 代码省略了一个,仅拟合一个线性模型