0
1

More than 3 years have passed since last update.

FlaskのrequestでBooleanをGETする

Last updated at Posted at 2019-11-19

環境

  • 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を送った場合 スクリーンショット 2019-11-19 15.21.06.png
  • falseを送った場合 スクリーンショット 2019-11-19 15.21.31.png
  • 0を送った場合 スクリーンショット 2019-11-19 15.21.55.png

なんと言う事でしょう。全ての結果として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を送った場合
    スクリーンショット 2019-11-19 15.50.35.png

  • falseを送った場合
    スクリーンショット 2019-11-19 15.50.21.png

  • 0を送った場合
    スクリーンショット 2019-11-19 15.48.14.png

0と1が返って来るようになりました。数値の真偽値の判別であれば0はFalse, 0以外はTrueとなるので問題無いと思います!

あとがき

初めての投稿ですので、至らぬ点があればご教示して頂ければ幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1