4

使用 webapp2 我为一个表单创建单元测试,其中有投票复选框,因此可以为该vote字段发布多个值,并通过以下方式检索它们request.POST.getall('vote')

<input type="checkbox" name="vote" value="Better">
<input type="checkbox" name="vote" value="Faster">
<input type="checkbox" name="vote" value="Stronger">

在单元测试中,我尝试传递一个列表:

response = app.get_response('/vote',
  POST={'vote': [u'Better', u'Faster', u'Stronger']},
  headers=[('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')]
)

但看起来它只是简单地转换为字符串:

votes = self.request.POST.getall('vote')
# => [u"[u'Better', u'Faster', u'Stronger']"]

我怎样才能传递多个值vote,将通过它作为列表检索request.POST.getall()

4

2 回答 2

4

POST 数据使用查询字符串编码进行编码,多个同名项目通过重复不同值的键来表示。例如:

vote=Better&vote=Faster&vote=Stronger

但是,Python 有库函数可以为您执行此操作:

urllib.urlencode({
  'vote': ['Better', 'Faster', 'Stronger'],
}, True)

第二个参数 ( True)urlencode称为 'doseq',并指示 urlencode 将序列编码为单独元素的列表。

于 2011-09-06T01:17:55.607 回答
1

webtest 库对这些测试用例很有帮助。

http://webtest.pythonpaste.org/en/latest/index.html#form-submissions

于 2011-09-05T22:27:28.983 回答