我有一个如下所示的querydict:
<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}>
如何提取id
?
我尝试过queryDictExample.get("id")
,但是没有用。
答案 0 :(得分:42)
您的客户似乎在发布JSON而不是formencoded数据。不要访问request.POST
,而是使用request.body
(版本1.3或更低版本中的request.raw_post_data
)并使用json.loads()
转换为字典。
答案 1 :(得分:5)
也许这并不完全适用于你。但是当我搜索这个时,你的问题是第一个Stackoverflow问题。
我只想在Django中获取基本的POST数据。所以只是使用GET对我来说很好。正如其他人所说,可能更容易更好地格式化创建查询的任何脚本。
基本上我有一个AJAX正在向Django发帖,POST看起来有点像这样:
params = name=somename&data=abcdefg
http.send(params);
然后在我的view.py中,我做了这个
def somefuntion(request):
if request.method == 'POST':
log.info('POST applied')
alldata=request.POST
log.debug(alldata)
data = alldata.get("data", "0")
name = alldata.get("name", "0")
log.info("POST name: " + name)
log.info("POST data: " + data)
alldata的输出是:
<QueryDict: {u'data': [u'abcdefg'], u'name': [u'somename']}>
和get命令给出
name: name
data: abcdefg
答案 2 :(得分:4)
这适用于多个值:
dict(MyDict.lists())
Dict键是查询变量,dict值是查询值列表。
答案 3 :(得分:1)
你可以使用 - request.data.get("content")
如果在前端(jQuery,Angular)没有使用JSON.stringify(data)
,这将直接为你提供数据。
答案 4 :(得分:0)
这个也适用于列表中的值:
dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()}
答案 5 :(得分:0)
我刚刚遇到了同样的问题。当我尝试将请求数据保存在request.POST而不是request.body中时,发生了这种情况。我使用的Django具有受信任的后端路由,该路由已配置为可处理request.POST
为了使用提取API在request.POST中发送数据,我必须使用“ Content-Type”:'application / x-www-form-urlencoded; charset = UTF-8',将我的JSON字符串化数据转换为上述格式。
在学习如何从Daniel的答案中序列化数据时,我遇到了$ .param(data),这是一个jquery函数,应该为您正确格式化它。
答案 6 :(得分:0)
最近遇到类似的情况,其中来自POST调用的数据为QueryDict
格式,
我可以使用
qdict.get(keyname)
我还可以使用QueryDict.items()
进行迭代以获取键和值的元组
for q in qdict.items():
print(q)
请注意,QueryDict
是Dictionary
的子类,因此Dictionary
的所有标准方法也可以在QueryDict
上实现。
有关djangoproject文档的更多信息 https://docs.djangoproject.com/en/3.0/ref/request-response/#django.http.QueryDict
答案 7 :(得分:-3)
你可以在查询字典上使用values_list,即:
MyDict.values_list('id')
- 它将返回包含id的列表列表。要返回id列表,请使用MyDict.values_list('id',flat = True)
有用的链接:
https://docs.djangoproject.com/en/1.4/ref/models/querysets/#values-list
https://docs.djangoproject.com/en/1.4/ref/models/querysets/#values