前端组队友要求几个DRF的接口,通过GET方法接收列表类型的参数再进行相关的处理
前言
我探索出两种处理方法:
一是将列表数据作为string类型的参数传入后端,在后端将string转为list再进行处理;
二是通过多个同名参数实现传入list,例如 url?city=济南&city=青岛,这样在后端接收到的city这个变量它本身就会是一个list.
我认为第二种应该是比较简洁且常规的方法,但是前端组队友要求用第一种,主要就是通过split将字符串转为列表。
在这里把两种方法都记录一下。
提示:以下是本篇文章正文内容,下面案例可供参考
一、通过string类型传递list
以其中一个接口为例,接口文档设计如下:
- 类视图
#获取指定年份多城市气温表
class Temp_of_CitiesAPIView(APIView):
def get(self,request):
year = request.query_params['year']
cities = request.query_params['checkedCities']
city_list = cities.split(',')
temp_list = []
for city in city_list:
climateinfos = Cityclimate.objects.filter(city=city, year=year)
serializer = CityClimateModelSerializer(instance=climateinfos,many=True)
if serializer.data!=[]:
temps = []
for dict in serializer.data:
temps.append(dict['temperature'])
city_temps = {'city':city,'list':temps}
temp_list.append(city_temps)
else:
return Response({"message": "数据为空"}, status=status.HTTP_204_NO_CONTENT)
return Response(temp_list,status=status.HTTP_200_OK)
- 使用Postman进行测试
二、通过多个同名参数传递list
- 类视图
class Temp_of_CitiesAPIView2(APIView):
def get(self,request):
year = request.query_params['year']
checkedCities = request.GET.getlist('checkedCities')
temp_list = []
for city in checkedCities:
climateinfos = Cityclimate.objects.filter(city=city, year=year)
serializer = CityClimateModelSerializer(instance=climateinfos,many=True)
if serializer.data!=[]:
temps = []
for dict in serializer.data:
temps.append(dict['temperature'])
city_temps = {'city':city,'list':temps}
temp_list.append(city_temps)
else:
return Response({"message": "数据为空"}, status=status.HTTP_204_NO_CONTENT)
return Response(temp_list,status=status.HTTP_200_OK)
- 使用Postman进行测试
总结
提示:
其实两种方法差别也不是很大,根据前端需要来就好了