我有一个如下所示的查询字典:
<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}>
我将如何提取id
?
我试过做queryDictExample.get("id")
,但没有奏效。
看起来您的客户正在发布 JSON 而不是格式编码的数据。而不是访问request.POST
,使用request.body
(request.raw_post_data
在 1.3 或更低版本中)并使用json.loads()
转换为字典。
也许这并不完全适用于你。但是当我搜索这个时,你的问题是第一个 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: somename
data: abcdefg
这适用于多个值:
dict(MyDict.lists())
字典键是查询变量,字典值是查询值的列表。
您可以使用 -request.data.get("content")
如果在前端(jQuery,Angular)中您没有使用过,这将直接为您提供数据JSON.stringify(data)
。
最近遇到了类似的情况,其中来自 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
这也适用于列表值:
dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()}
我刚刚遇到了同样的问题。当我试图将我的请求数据保存在 request.POST 而不是 request.body 时,就会发生这种情况。我正在使用 Django 和已配置为使用 request.POST 的受信任后端路由
为了使用 fetch API 在 request.POST 中发送数据,我必须使用 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 将我的 JSON 字符串化数据转换为上述格式。
在学习如何从 Daniel 的回答中序列化数据时,我遇到了 $.param(data),这是一个 jquery 函数,它应该为您正确格式化它。
您可以在查询字典上使用 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