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)

2 番目の引数 ( 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 に答える