Flask接受boolean布尔型参数的时候会遇到一些问题,比如很多语言的true、false都是小写,而flask本身接受参数时进行的处理会把所有输入转化为True,造成错误
Flask中接收参数的时候可以定义type,于是我们可以定义type=bool
,然而问题就在这里,其实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))
viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/189