使用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()
作为列表检索?
答案 0 :(得分:4)
POST数据使用查询字符串编码进行编码,并且通过重复具有不同值的键来表示同名的多个项目。例如:
vote=Better&vote=Faster&vote=Stronger
Python具有库函数来为您执行此操作,但是:
urllib.urlencode({
'vote': ['Better', 'Faster', 'Stronger'],
}, True)
第二个参数(True
)到urlencode
被称为'doseq',并指示urlencode将序列编码为单独元素的列表。
答案 1 :(得分:1)
webtest库对这些测试用例很有帮助。
http://webtest.pythonpaste.org/en/latest/index.html#form-submissions