【问题标题】:After referencing an element in a WebOb.params (UnicodeMultiDict) an element gets popped off the end引用 WebOb.params (UnicodeMultiDict) 中的元素后,元素会从末尾弹出
【发布时间】:2011-05-23 23:18:34
【问题描述】:

当我引用 WebOb 请求的 params 参数时,一个元素突然从末尾弹出。那或者它正在被简化为一个元素。引用的元素不是被淘汰的元素。

if req.str_params.has_key('method'):
   req.method = req.str_params.getone('method')

在此行记录出现之前:

DEBUG:root:NestedMultiDict([('method', 'put'), ('name', 'some_name')])

之后:

DEBUG:root:NestedMultiDict([('method', 'put')])

我很茫然。

【问题讨论】:

  • 如果我将 req.params 复制到另一个 var 然后稍后使用它,效果很好,但这似乎超级愚蠢。
  • 很奇怪,那只是创建对同一个对象的另一个引用,而不是进行深层复制
  • 对,我不明白。有什么奇怪的事情正在发生。
  • 检查它的记录方式——我查看了 NestedMultiDict 的源代码,getone 真的不应该引起任何这样的修改。编写一个单元测试,看看你是否可以在那里重现它——如果不能,很可能是你自己的代码的微妙之处导致了这个错误

标签: python wsgi webob


【解决方案1】:

这是因为您正在设置req.method。可能name=some_name 在请求的body 中,只要req.method == 'POST' 你会得到那个参数。当您将方法更改为 PUT 时,您将阻止 WebOb 解析请求主体(请求主体应该是实体,而不是 HTML 表单输入)。这是在您获得属性 req.str_params 时计算的,因此通过保存对参数的引用,您可以避免 req.method 检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多