Cur*_*nir 20 python flask python-3.x
我的 Flask 应用程序中接受布尔查询参数的端点之一有一种奇怪的行为。无论我传递给它什么,例如asfsdfdortrue或false,它都被认为是 true 。只有留空它才会变成假的。
full_info = request.args.get("fullInfo", default=False, type=bool)
if full_info:
# do stuff
Run Code Online (Sandbox Code Playgroud)
似乎任何输入都被认为是真实的。有没有什么方法可以使其与 Flask 定义类型的预期方式一起工作,或者我是否需要接受一个字符串并比较它?
Gin*_*pin 42
type的参数不是request.args.get用于指定值的类型,而是用于指定可调用的:
\n\n\n
\n- type \xe2\x80\x93 一个可调用对象,用于转换 MultiDict 中的值。如果此可调用引发ValueError,则返回默认值。
\n
它接受一个可调用对象(例如函数),将该可调用对象应用于查询参数值,然后返回结果。所以代码
\nrequest.args.get("fullInfo", default=False, type=bool)\nRun Code Online (Sandbox Code Playgroud)\n调用bool(value)其中value是查询参数值。在 Flask 中,查询参数值始终存储为字符串。调用非空字符串将始终是bool()True:
In [10]: bool(\'true\')\nOut[10]: True\n\nIn [11]: bool(\'false\')\nOut[11]: True\n\nIn [12]: bool(\'any non-empty will be true\')\nOut[12]: True\n\nIn [13]: bool(\'\')\nOut[13]: False\nRun Code Online (Sandbox Code Playgroud)\n您可以传递一个函数来代替bool,该函数显式检查该字符串是否等于文字字符串true(或者您的 API 规则认为为 true 的任何值):
def is_it_true(value):\n return value.lower() == \'true\'\n\n@app.route("/test")\ndef test():\n full_info = request.args.get(\'fullInfo\', default=False, type=is_it_true)\n return jsonify({\'full_info\': full_info})\nRun Code Online (Sandbox Code Playgroud)\n$ curl -XGET http://localhost:5000/test?fullInfo=false\n{"full_info":false}\n\n$ curl -XGET http://localhost:5000/test?fullInfo=adasdasd\n{"full_info":false}\n\n$ curl -XGET http://localhost:5000/test?fullInfo=11431423\n{"full_info":false}\n\n$ curl -XGET http://localhost:5000/test?fullInfo=\n{"full_info":false}\n\n$ curl -XGET http://localhost:5000/test?fullInfo=true\n{"full_info":true}\n\n$ curl -XGET http://localhost:5000/test?fullInfo=TRUE\n{"full_info":true}\n\n$ curl -XGET http://localhost:5000/test\n{"full_info":false}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
15776 次 |
| 最近记录: |