【问题标题】:Parse POST data containing square brackets in Python?在 Python 中解析包含方括号的 POST 数据?
【发布时间】:2013-08-10 19:28:28
【问题描述】:

我正在编写一个 python webapp(在 Google AppEngine 上,使用 webob),它应该处理一个包含地址列表的表单。

为了简化,假设表单包含以下输入:

  <input type="hidden" name="address[]" value="1" />
  <input type="hidden" name="address[]" value="2" />
  <input type="hidden" name="address[]" value="3" />
  <input type="hidden" name="address[]" value="4" />

现在,Rails\PHP 会将其解析为包含列表 [1,2,3,4] 的单个“地址”值。 有没有简单的方法在 Python 中做到这一点?

【问题讨论】:

标签: python google-app-engine webob


【解决方案1】:

在 RequestHandler 方法内部,self.request.params.getall('address[]') 将返回一个值列表。虽然 [] 没有意义,但字段可以很容易地命名为“地址”。

【讨论】:

  • [] 是我希望人们停止使用的 PHP 主义。
  • 请不要使用self.request.params.params 也可能包含查询字符串中的值,这可能导致滥用/XSS 漏洞。
  • 废话。无论您在哪里接受传入的数据,都需要对其进行清理。查询字符串与 POST 正文中编码的值一样危险。
【解决方案2】:

WebOb 使用称为MultiDict 的东西。 self.request.POST 将采用适当形式的编码请求并返回 MultiDict

从这个MultiDict,您可以使用密钥名称调用.getall(),在这种情况下,您的密钥将是“address[]”。

要获取您将调用的条目列表:

self.request.POST.getall('address[]')

您不需要使用address[] 作为名称,因为MultiDict 不会使用它来识别密钥是否可以多次存在。

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 2019-08-06
    • 2021-03-27
    • 2011-05-17
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多