我正在构建一个过滤系统,您可以在其中按品牌和类别过滤产品。用户在React应用程序中选择过滤器,这将触发对GET或Post的后端API(Django Rest Framework-DRF)的请求。理想情况下,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端没有序列化器或表单的东西使用过post请求。因此,我不知道如何验证传入的帖子数据并将其转换为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) {
}
答案 0 :(得分:0)
值列表可以作为以下参数通过URL传递:
http://localhost:8000/?categories=first,second,third
Axios在发布,获取等内容时使用params
自变量(documentation):
const params = new URLSearchParams();
params.append('categories', [1, 2, 4, 76]);
axios.post('/foo', params);