2011-05-23 37 views
0

当我引用WebOb请求的params参数时,元素突然从结尾弹出。这或者它被简化为一个单一的元素。引用的元素不是被淘汰的元素。引用WebOb.params(UnicodeMultiDict)中的元素后,元素会弹出结尾

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')]) 

我不知所措。

+0

工作正常,如果我将req.params复制到另一个var,然后稍后使用,但这看起来超级愚蠢。 – Matt 2011-05-23 23:40:30

+0

你是如何复制它的? – Cameron 2011-05-23 23:46:03

+0

params = req.params – Matt 2011-05-23 23:55:02

回答

2

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