引用 WebOb.params (UnicodeMultiDict) 中的元素后,元素会从末尾弹出
当我引用 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')])
我不知所措。
When I reference the params parameter of the WebOb Request an element is suddenly popped off the end. That or it's being reduced to a single element. The referenced element isn't the one getting knocked off.
if req.str_params.has_key('method'):
req.method = req.str_params.getone('method')
Before this line logging turns up:
DEBUG:root:NestedMultiDict([('method', 'put'), ('name', 'some_name')])
after:
DEBUG:root:NestedMultiDict([('method', 'put')])
I'm at a loss.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为您正在设置
req.method
。可能name=some_name
位于请求的正文中,只要req.method == 'POST'
你就会得到它参数返回。当您将方法更改为 PUT 时,您将阻止 WebOb 解析请求正文(请求正文应为实体,而不是 HTML 表单输入)。这是在获取属性req.str_params
时计算的,因此通过保存对参数的引用,您可以避免 req.method 检查。This is because you are setting
req.method
. Probablyname=some_name
is in the body of the request, and so long asreq.method == 'POST'
you'll get that parameter back. The moment you change the method to PUT you're keeping WebOb from parsing the request body (request bodies are expected to be entities, not HTML form inputs). This is calculated when you get the attributereq.str_params
, so by saving a reference to the params you are avoiding the req.method check.