Bottle - フォームデータをリストで受け取る
この投稿は最終更新日から1年以上経過しています
複数のチェックボックスのデータを一つの変数に格納して受け取りたいときがある。
POST
Bottleの場合フォーム部品のname属性値を同じにして送信する。
from bottle import run, get, post, request
@get('/form')
def func():
return '''
<form method="post">
<input type="checkbox" name="data" value="foo">
<input type="checkbox" name="data" value="bar">
<input type="checkbox" name="data" value="baz">
<input type="checkbox" name="data" value="qux">
<input type="checkbox" name="data" value="quux">
<input value="submit" type="submit">
</form>
'''
@post('/form')
def func():
print(request.forms.getall('data'))
run(host='localhost', port=8080, reloader=True)
受信データへのアクセスはrequest.formsのgetall()またはgetlist()の引数にname属性値を指定する。
実際にサーバを建ててlocalhost:8080/formを開き全部にチェックを入れて送信。
127.0.0.1 - - [15/Apr/2021 18:03:32] "GET /form HTTP/1.1" 200 376
['foo', 'bar', 'baz', 'qux', 'quux']
127.0.0.1 - - [15/Apr/2021 18:03:37] "POST /form HTTP/1.1" 200 0
リストで受け取れた。
GET
クエリ文字列も試そう。こちらはrequest.queryのgetall()を使う。
@get('/form')
def func():
print(request.query.getall('data'))
localhost:8080/form?data=hoge&data=fuga&data=piyoをリクエスト。
['hoge', 'fuga', 'piyo']
127.0.0.1 - - [15/Apr/2021 18:05:12] "GET /form?data=hoge&data=fuga&data=piyo HTTP/1.1" 200 0
同様にリストで返ってくる。