从QueryDict中提取项目

时间:2012-04-05 05:43:00

标签: python django

我有一个如下所示的querydict:

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

如何提取id

我尝试过queryDictExample.get("id"),但是没有用。

8 个答案:

答案 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)

请注意,QueryDictDictionary的子类,因此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