django - 如何使用 React 向 DRF 发送未知数量的过滤器值?获取还是发布?
问题描述
我正在构建一个过滤系统,您可以在其中按品牌和类别过滤产品。用户在 React 应用程序中选择过滤器,这会触发对后端 API(Django Rest Framework - DRF)的请求,即 GET 或 Post。理想情况下,Django 会接收过滤器名称作为它可以迭代的值。
我对如何实现这一目标非常迷茫。
GET 请求是可能的。但是为了使 DRF 能够处理请求,它需要具有这样的 uri 格式:
http://127.0.0.1:8000/filter/?categories=proviant&categories=multipower&brands=kellogs
然后我可以使用这样的视图来获取值。
class ProductFilterListView(APIView):
def get(self, request):
for el in request.GET.getlist('categories'):
print(el)
return Response('')
这是一个相当大的挑战,因为 axios(用于发出 JS 请求的库)没有根据 DRF 的要求格式化 url 的选项。所以这感觉非常错误且非常手动,并且几乎不是一个“好”的解决方案(?)
另一种方法是使用发布请求。但话又说回来,我从来没有对没有序列化程序或 Django 端的表单的东西使用过发布请求。所以,我不知道如何验证传入的帖子数据并将其转换为 Django 可以使用的格式。
解决这个问题的“正确”方法是什么?
更新:::
我发现 axios 有一个 paramsSerializer 选项,允许将 uri 格式化为我需要的格式。这是解决方案的一个片段。所以我猜 GET 请求在路上…… (?)
try {
const res = await axios.get(`${baseURL}product/filter/`, {
params: {
categories: filterArr
}, paramsSerializer: (params) => {
return Qs.stringify(params, {arrayFormat: 'repeat'})
},
})
} catch(e) {
}
解决方案
值列表可以通过 URL 作为参数传递,如下所示:
http://localhost:8000/?categories=first,second,third
params
当您发布、获取等(文档)时, Axios 需要一个参数:
const params = new URLSearchParams();
params.append('categories', [1, 2, 4, 76]);
axios.post('/foo', params);
推荐阅读
- java - 无法启动 bean 'taskLifecycleListener';嵌套异常是 java.lang.IllegalArgumentException: Invalid TaskExecution, ID 1 not found
- bash - 我的代码一直卡在这个while循环中,说明目录不存在,这是为什么呢?
- html - 如何删除底部输入字段?
- angular - 如何将 dx 按钮放在 dxo-export 旁边?
- node.js - 如何在 Firebase 中进行降序排列
- javascript - 允许使用 index.html 和 web.config 访问特定页面的匿名客户端
- javascript - 有没有办法确保函数从上到下执行?
- apache-spark - 访问不可变广播变量的可变属性
- json - Microsoft 自定义视觉 API:404,找不到资源
- python - pip install package with --user and without --user,现在我想卸载没有--user安装的包