Python Django根据JSON数据进行查询
我使用此代码将一些数据发布到Django支持的站点:Python Django根据JSON数据进行查询,python,django,rest,Python,Django,Rest,我使用此代码将一些数据发布到Django支持的站点: url = "http://example.com:8080/api/v1/data/" request = {"info": "", "data": [{"extra": 0, "amount": 100, "id": "10000000016"}, {"extra": 0, "amount": 100, "id": "10000000002"}]} opener = urllib2.build_opener() opener.addhea
url = "http://example.com:8080/api/v1/data/"
request = {"info": "", "data": [{"extra": 0, "amount": 100, "id": "10000000016"}, {"extra": 0, "amount": 100, "id": "10000000002"}]}
opener = urllib2.build_opener()
opener.addheaders = [("Authorization", "Token "+self.token),
("Accept", "application/json"),
("Content-Type", "application/json; charset=UTF-8")]
opener.open(url, json.dumps(request))
然而,当我在Django中读取数据时,它已将其解析为一个QueryDict
:
Raw data received: <QueryDict: {u'{"info": "", ... 0002"}]}': [u'']}>
接收到的原始数据:
原始数据直接取自request.data
,该函数是从url.py
路由调用的
当从Android应用程序发布相同类型的数据时,它工作正常。原始数据是一个字符串,可以从JSON正确解析。正如@dhke在评论中所说,问题是
urlib2
默认情况下将使用application/x-www.form-urlencoded
。在线快速搜索给了我以下代码:
r = urllib.Request(url, data=json.dumps(request), headers={..})
urllib2.urlopen(req)
它按预期工作。
POST
ed原始数据应该在request.body
()中。django端显示的内容类型是什么?Django应仅在输入为多部分/表单数据
或应用程序/x-www.form-urlencoded
之一时填写查询记录urllib2
自动设置“application/x-www.form-urlencoded”,我不确定这与在开场白上设置addheaders
有什么关系。@dhke我如何才能找到django端出现的内容类型?@BartFriederichs是你的朋友,在那里。@C14L我无法阅读请求.body
,因为它给了我一个“错误请求”错误(HTTP 400)。