我正在建立一个过滤系统,您可以过滤产品的品牌和类别。用户在中选择过滤器,这将触发对后端API (Django Rest Framework )的请求,即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的选项。因此,这感觉非常错误,非常手动,很难成为一个“好”的解决方案(?)
另一种方法是使用post请求。但是,我从未将post请求用于在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) {
}发布于 2019-08-15 11:07:13
可以将值列表作为参数传递到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);https://stackoverflow.com/questions/57508472
复制相似问题