我正在尝试使用Flask在REST API上创建过滤器,但是当查询字符串中重复相同的键时,Flask似乎只返回一个参数。
例如:
from flask import Flask
from flask import jsonify
from flask import request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(request.args)
对于请求<localhost>/?test=a&test=b
,结果为:
{
"test": "a"
}
由于我想重用filter
参数来表示AND逻辑进行过滤,所以如果Flask支持这个就很方便。我意识到,在封面下,Flask将request.args
解析为一个MultiDict对象,这可能就是为什么它不能返回同名的多个键。
我假设我可以在Flask中以某种方式访问原始查询字符串,但我还没有找到。如果我遇到解决方案,我会更新这篇文章,但如果有其他人有想法,请分享。
答案 0 :(得分:3)
使用request.args.getlist('test')
获取给定密钥的所有值。
答案 1 :(得分:2)
根据rfc7159和The JSON Data Interchange Format:
名称都是唯一的对象在某种意义上是可互操作的 接收该对象的所有软件实现都会同意 名称 - 值映射。当对象中的名称不是 独特的,接收这样一个对象的软件的行为是 不可预知的。许多实现报告姓氏/值对 只要。其他实现报告错误或无法解析 对象,以及一些实现报告所有名称/值对, 包括重复。
对象中的名称应该是唯一的。
因此,您无法使用重复的密钥创建json
,您可以使用以下代码处理此问题:
@app.route('/')
def hello_world():
return jsonify(dict(request.args))
{
"test": [
"a",
"b"
]
}
答案 2 :(得分:0)
您可以执行以下操作来获取查询字符串
from flask import Flask
from flask import jsonify
from flask import request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(request.query_string)