22

我有一个如下所示的查询字典:

<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}>

我将如何提取id

我试过做queryDictExample.get("id"),但没有奏效。

4

8 回答 8

49

看起来您的客户正在发布 JSON 而不是格式编码的数据。而不是访问request.POST,使用request.bodyrequest.raw_post_data在 1.3 或更低版本中)并使用json.loads()转换为字典。

于 2012-04-05T06:15:14.640 回答
12

也许这并不完全适用于你。但是当我搜索这个时,你的问题是第一个 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
于 2012-12-30T19:41:39.033 回答
7

这适用于多个值:

dict(MyDict.lists())

字典键是查询变量,字典值是查询值的列表。

于 2014-07-15T12:45:48.050 回答
3

您可以使用 -request.data.get("content")如果在前端(jQuery,Angular)中您没有使用过,这将直接为您提供数据JSON.stringify(data)

于 2017-08-27T15:21:06.467 回答
3

最近遇到了类似的情况,其中来自 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

于 2020-07-25T17:21:32.323 回答
0

这也适用于列表值:

dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()}
于 2017-12-19T05:30:39.137 回答
0

我刚刚遇到了同样的问题。当我试图将我的请求数据保存在 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 函数,它应该为您正确格式化它。

于 2019-02-09T20:50:59.867 回答
-2

您可以在查询字典上使用 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

于 2012-04-05T06:14:12.083 回答