引用WebOb.params(UnicodeMultiDict)中的元素后,末尾的元素被弹出

0 投票
1 回答
582 浏览
提问于 2025-04-16 18:12

当我提到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')])

我真的不知道该怎么办了。

1 个回答

2

这是因为你在设置 req.method。可能 name=some_name 是在请求的 主体 中,只要 req.method == 'POST',你就能拿到这个参数。一旦你把方法改成 PUT,WebOb 就无法解析请求主体了(请求主体应该是实体,而不是 HTML 表单输入)。当你获取 req.str_params 这个属性时,就会进行这样的计算,所以通过保存参数的引用,你就避免了对 req.method 的检查。

撰写回答