【问题标题】:Accessing non-sequential list items from a POSTed array从 POSTed 数组访问非顺序列表项
【发布时间】:2016-02-29 12:20:18
【问题描述】:

我有一个接受 POSTed AJAX 数组的 Python WebApp。我可以很好地访问数组:

print self.request.POST.items()

#(new lines in response for readability)

[(u'verb', u'create'), 
(u'my_id', u'18'), 
(u'properties[1]', u'1000'), 
(u'properties[3]', u'2000')]

至关重要的是,提供的属性是 a) 未知数量,并且 b) 并不总是连续的。

目前我用这个来收集它们:

i = 0
while i <= 50:
  current_key = 'properties['+str(i)+']'
  if self.request.get(current_key) != "":
    self.response.out.write(self.request.get(current_key))
  i = i + 1

但是当我这样做时,我对自己感到恶心(而且大多数时候只有不到 50 个属性,而且有一天可能会更多......我不确定是否会更马虎,更少Pythonic 解决方案)。

关于我在这里缺少什么的任何提示?如果我尝试直接访问“属性”(计划是对其进行迭代或其他内容),它是未设置的,这让我认为我只是在查看名为“属性 [1]”和“属性 [3”的断开连接的字符串的集合]' 实际上根本不是数组/列表/字典。

如果这是一个更简洁的修复,我确实可以访问另一端的 js - 目前它类似于:

var properties = {1:1000, 2:2000, 4:3000};
$.post( "/api", { verb: 'create', my_id: my_id, properties: properties })

【问题讨论】:

    标签: python python-2.7 webapp2


    【解决方案1】:

    以 JSON 格式发送数据。然后您可以直接反序列化为字典,无需任何处理。

    $.post( "/api", { verb: 'create', my_id: my_id, properties: JSON.stringify(properties) })
    

    ...

    properties = json.loads(self.request.get('properties', {}))
    

    【讨论】:

    • SO 之前的完美答案会让我接受!我什至不知道有冷却时间。
    • 抱歉,有一个额外的评论 - 非常感谢修复处理 JS 的最佳方式。一个不错的跨语言解决方案,而一个书呆子可能只是建议了一种更好的方法来单独用 Python 解析我可怕的转换 POST ;)
    • 好吧,我和他们一样迂腐(问问我的妻子),但我发现这里的大多数解决方案都涉及退后一步,看看海报真正想要达到的目标,而不是什么他们真的问了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多