转载自vien.tech
原文链接:https://viencoding.com/article/189
问题描述
Flask中接收参数的时候可以定义type,于是我们可以定义type=bool,但是不管传入了true还是false,得到的值都是True
问题在于,其实flask只是用bool()函数处理了一下,让我们看看bool()函数做了啥:
In [1]: bool('False')
Out[1]: True
In [2]: bool('True')
Out[2]: True
In [3]: bool('false')
Out[3]: True
In [4]: bool('true')
Out[4]: True
In [5]: bool('')
Out[5]: False
可以看出来,非空字符串都被解释成了True,这并不是我们想要的结果
解决方法
一种是使用 flask_restful 模块的 inputs.boolean 类型代替 bool
from flask_restful import inputs
locked =request.args.get('locked', None, type=inputs.boolean)
当然也可以自己写个函数来进行转换:
def to_bool_or_none(bool_str):
if bool_str is None:
return None
if bool_str.lower() == "true":
return True
if bool_str.lower() == "false":
return False
raise Exception("bool str invalid.")
使用:
locked = to_bool_or_none(request.args.get('locked', None, type=str))