python - 如何在 python 中模拟 POST 参数

标签 python google-app-engine web-applications

我正在尝试将一些数据模拟到数据存储中以模拟 POST。

我正在寻找一种将命名参数作为一个参数发布的方法。所以我可以使用与普通 POST 相同的方法。

我想通过两种方式调用获取参数的方法。

def HandlePost(params):
    params.get('name')
    params.get_all('collection')

class SavePartHandler(webapp.RequestHandler):
    def post(self):
        HandlePost(self.request)

我试图找出 self.request 的类型,但在 appengines 源代码中找不到它。

我的目标是模拟多个 POST 以按照用户的方式填充数据存储。

编辑:

或者是否有办法改变 dict 的行为,以便它可以使用 get_all 方法?

编辑2:

我正在使用appengins webapp。

出于好奇,有没有办法调用虚拟 webapp.RequestHandler 并用参数填充它?我正在浏览源代码以了解它是如何完成的并为其创建了一个新实例,但找不到如何填充它。

编辑3:

更新了方法名称,这样就不会与 Web 应用程序请求处理程序混淆。

多亏了pthulin,我已经快到了。剩下的就是如何模拟具有相同 key 的数据。因为使用字典会覆盖其他同名的键。有时,在 HTML 表单中,一个帖子可以包含使用 self.request.get_all('key') 获取的同一个键的多个值。那么如何创建一个字典(或相等的东西)来支持具有相同键的多个 key=value 。

..弗雷德里克

最佳答案

我认为您想要做的是准备一个 webapp Request 对象,然后调用处理程序的 post 方法:

from google.appengine.ext.webapp import Request
from google.appengine.ext.webapp import Response
from StringIO import StringIO
form = 'msg=hello'
handler.response = Response()
handler.request = Request({
    'REQUEST_METHOD': 'POST',
    'PATH_INFO': '/',
    'wsgi.input': StringIO(form),
    'CONTENT_LENGTH': len(form),
    'SERVER_NAME': 'hi',
    'SERVER_PORT': '80',
    'wsgi.url_scheme': 'http',
})
handler.post()

提示:上面的“msg=hello”在这种情况下工作正常,但要传递多个 POST 参数,您需要创建一个 URL 编码字符串:

>>> form = {
...     'first_name': 'Per',
...     'last_name': 'Thulin',
... }
>>> from urllib import urlencode
>>> urlencode(form)
'first_name=Per&last_name=Thulin'

如果你想传入多个同名的POST参数,我想你需要自己做一点url编码的工作。例如:

>>> from urllib import urlencode
>>> form_inputs = [
...     {'someparam': 'aaa'},
...     {'someparam': 'bbb'},
...     {'someparam': 'ccc'},
... ]
>>> '&'.join([urlencode(d) for d in form_inputs])
'someparam=aaa&someparam=bbb&someparam=ccc'

然后在RequestHandler中,可以使用Request.get_all方法提取参数。

关于python - 如何在 python 中模拟 POST 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966585/

相关文章:

python - 无法将库导入项目

node.js - url查询长度有限制吗?

python - 创建一个 1-100 之间的随机数,并且每次都不会改变

python - 沿着聚类图的特定轴添加带有索引特定数据的条形图

Python:创建虚拟导入路径

.net - 编写可切换到 Web 的桌面程序

javascript - 自动 javascript 版本控制以避免浏览器缓存清理

java - 如何避免通过 Java 在数据库中重复插入?

python - 使用 Python 将纯文本文件解析为 CSV 文件

python - pyspark 在没有 pandas 的情况下将一列拆分为多列