gpt4 book ai didi

python - 为什么 Flask bool 查询参数总是评估为真?

转载 作者:行者123 更新时间:2023-12-04 14:33:54 28 4
gpt4 key购买 nike

我的 Flask 应用程序中的一个端点有一个奇怪的行为,它接受 bool 查询参数。不管我传给它什么,比如asfsdfdtruefalse ,它被认为是正确的。只有把它留空,它才会变成假的。

full_info = request.args.get("fullInfo", default=False, type=bool)
if full_info:
# do stuff
似乎任何输入都被认为是正确的。有什么方法可以使 Flask 预期的定义类型的方式起作用,还是我需要接受一个字符串并进行比较?

最佳答案

type request.args.get 的参数有点误导,因为它不是用于指定值的类型,而是用于指定 可调用 :

  • type – A callable that is used to cast the value in the MultiDict. If a ValueError is raised by this callable the default value is returned.

它接受一个可调用对象(例如一个函数),将该可调用对象应用于查询参数值,并返回结果。所以代码
request.args.get("fullInfo", default=False, type=bool)
电话 bool(value)哪里 value是查询参数值。但在 Flask 中,查询参数值始终存储为字符串。不幸的是, 调用 bool()在非空字符串上总是 True :
In [10]: bool('true')
Out[10]: True

In [11]: bool('false')
Out[11]: True

In [12]: bool('any non-empty will be true')
Out[12]: True

In [13]: bool('')
Out[13]: False
而不是 bool ,您可以传递一个函数来显式检查字符串是否等于文字字符串 true (或任何您的 API 规则认为是真实的值):
full_info = request.args.get('fullInfo', default=False, type=lambda v: v.lower() == 'true')

return jsonify({'full_info': full_info})
$ curl -XGET http://localhost:5000/test?fullInfo=false
{"full_info":false}

$ curl -XGET http://localhost:5000/test?fullInfo=adasdasd
{"full_info":false}

$ curl -XGET http://localhost:5000/test?fullInfo=11431423
{"full_info":false}

$ curl -XGET http://localhost:5000/test?fullInfo=
{"full_info":false}

$ curl -XGET http://localhost:5000/test?fullInfo=true
{"full_info":true}

$ curl -XGET http://localhost:5000/test?fullInfo=TRUE
{"full_info":true}

$ curl -XGET http://localhost:5000/test
{"full_info":false}

关于python - 为什么 Flask bool 查询参数总是评估为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65575796/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com