【问题标题】:Python/Django: How to deserialize foo[]=1&foo[]=2&Python/Django:如何反序列化 foo[]=1&foo[]=2&
【发布时间】:2014-05-29 07:42:22
【问题描述】:

是否有用于查询字符串的预构建反序列化器,例如:

foo[]=1&foo[]=2&foo[]=34&....&foo[]=5

目前我只是使用replacesplit 处理字符串以获得包含所有值的序列,但我很好奇Python 或Django 中是否没有一些实用程序/帮助方法来执行此操作。

显然 Django 在处理请求时能够做非常相似的事情,但我 a) 不知道我是否/如何使用它并且 b) 如果它可以从foo[] 符号接收序列。

注意:我无法更改源字符串,因为它来自第三方包。

更新

感谢您的回复。我的值来自 POST,所以我做了以下操作(不确定是否有更直接的方法,例如与 request.GET.getlist() 一起使用的答案):

foo = QueryDict(request.POST.get('my_var_name')).getlist('foo[]')

【问题讨论】:

  • 预构建解析器?我什至不知道foo[]=1 是什么意思。
  • @freakish:可能是 jQuery;这是发布数组的 PHP 表示法。
  • @MartijnPieters 哦,我误会了。我以为他想从那个字符串中检索foo
  • @MartijnPieters 我明白了,谢谢。不使用 PHP 的另一个原因。 ;)

标签: python django get deserialization


【解决方案1】:

只需使用getlist() method 检索所有值:

foo_list = request.GET.getlist('foo[]')

包括括号,它们只是名称的一部分。

【讨论】:

  • +1 用于链接到 QueryDict 文档。有用的阅读,正是我希望找到的。如前所述,生成括号字符串的部分位于第三方工具中,我希望保持不变。
【解决方案2】:

首先,绝对没有理由发送带有[] 前缀的数据。这是 PHP 或 Rails 的惯用语,在 Django 中没有位置。

不过,要从重复参数中获取列表,您可以使用getlist

foos = request.GET.getlist('foo[]')

【讨论】:

  • @MartijnPieters 我相信你可以在 jQuery 中通过设置 jQuery.ajaxSettings.traditional = true; 来禁用它。
  • 啊,我知道我错过了某个地方的开关。事实上,traditional = true 将禁用令人沮丧的默认设置。
  • 我真的很想接受你的两个答案。正好在同一时间进来。 jQuery 中 traditional 设置的超级有用信息。
猜你喜欢
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多