環境
- 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
を送った場合
なんと言う事でしょう。全ての結果として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となるので問題無いと思います!
あとがき
初めての投稿ですので、至らぬ点があればご教示して頂ければ幸いです。