環境
- python 3.7.0
- Flask 1.0.2
まずSOURCE
bool型のis_hogeをrequestで受けとって返すだけのAPI
hoge.py
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=['GET'])
def hello():
is_hoge = request.args.get('is_hoge', type=bool)
return f'{ is_hoge }'
if __name__ == "__main__":
app.run()
期待値
-
trueを送ったらTrue -
falseを送ったらFalse -
0を送ったらFalse
実行結果
-
trueを送った場合
- `false`を送った場合
- 0を送った場合
なんと言う事でしょう。全ての結果としてTrueが返って来てしまいました。
新米ペーペーの考察としては全て文字列として捉えられてしまいTrueが返って来たんだと思います。
なんとかBooleanとして使えるようにしたい
pythonにはstrtobool()と言う便利な関数があるそうで、これを使ってやって行きます。
converter.py
from distutils.util import strtobool
def convert_to_bool(target_object, default_val):
if target_object is None:
return default_val
try:
return strtobool(target_object)
except:
return default_val
引数で持って来た値がNoneの時や例外が発生した場合にはdefault_valを返すようにしました。
hoge.py
is_hoge = converter.convert_to_bool(request.args.get('is_hoge'), False)
再度実行
-
trueを送った場合
-
falseを送った場合
-
0を送った場合
0と1が返って来るようになりました。数値の真偽値の判別であれば0はFalse, 0以外はTrueとなるので問題無いと思います!
あとがき
初めての投稿ですので、至らぬ点があればご教示して頂ければ幸いです。