DRF中获取前端的参数为QueryDict类型—已解决
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRF中获取前端的参数为QueryDict类型—已解决相关的知识,希望对你有一定的参考价值。
参考技术A 问题描述:前端传递对象数组给后端实现新增问卷的功能,后端打印 print(request.data) 得到的是 QueryDict类型的数据。原因:封装的post请求设置了Content-Type为application/x-www-form-urlencoded类型,所以request.data拿到的是QueryDict类型。
解决方法:
1. 将Content-Type设置为application/json
2. 将请求数据对象或值转换为 JSON 字符串
结果:正确获取数据,添加成功!
参考文章: django rest framework 获取前端参数的几种方式
python DRF获取参数介绍
DRF获取参数的方式 例如url url(r‘^demo/(?P<word>.*)/$‘, DemoView.as_view()) 在类视图中获取参数 url:http://127.0.0.1:8000/demo/aaa/?bbb=bbb&ccc=ccc&ccc=CCC form:{"body":"body"} JSON:{"body":"body"} class DemoView(APIView): def post(self, request, aaa): aaa = aaa # 获取url路径中的参数 bbb_str = request.query_params.get(‘bbb‘) # 获取一个查询字符串的参数 ccc_list = request.query_params.getlist(‘ccc‘) # 获取多个查询字符串参数 # 请求体中的参数 # 如果通过form表单传递,获取出来是QueryDict,通过.dict()转换成python的字典 form_body = request.data # 如果通过JSON传递,获取出来就是字典,例如{‘body‘:‘body‘} # json_body = request.data print(aaa) print(bbb_str) print(ccc_list) print(form_body.dict()) # print(json_body) return Response({‘message‘: ‘OK‘}) 结果 aaa bbb [‘ccc‘, ‘CCC‘] {‘body‘: ‘body‘} URL路径参数/查询字符串不区分请求方式,GET/POST/PUT等都一样 serializer中获取参数 # view class DemoView(GenericAPIView): serializer_class = DemoSerializer def post(self, request, aaa): serializer = self.get_serializer(data=request.query_params) serializer.is_valid(raise_exception=True) return Response({‘message‘: ‘OK‘}) # serializer class DemoSerializer(serializers.Serializer): bbb = serializers.CharField() ccc = serializers.ListField() # List def validate(self, attrs): aaa = self.context[‘view‘].kwargs.get(‘aaa‘) # 获取路径参数 bbb = attrs[‘bbb‘] # 获取查询字符串 ccc = attrs[‘ccc‘] # 获取以多个key相同的查询字符串 # 获取当前登陆的对象,需要根据场景进行使用 # user = self.context[‘request‘].user print(aaa) print(bbb) print(ccc) return attrs
以上是关于DRF中获取前端的参数为QueryDict类型—已解决的主要内容,如果未能解决你的问题,请参考以下文章