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

发布于 2024-11-09 21:32:13 字数 401 浏览 4 评论 0原文

当我引用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伤感在游骋 2024-11-16 21:32:13

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

This is because you are setting req.method. Probably name=some_name is in the body of the request, and so long as req.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 attribute req.str_params, so by saving a reference to the params you are avoiding the req.method check.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文