Flask在解析GET请求时只返回一个参数

时间:2017-09-25 18:55:08

标签: python flask

我正在尝试使用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中以某种方式访问​​原始查询字符串,但我还没有找到。如果我遇到解决方案,我会更新这篇文章,但如果有其他人有想法,请分享。

3 个答案:

答案 0 :(得分:3)

使用request.args.getlist('test')获取给定密钥的所有值。

答案 1 :(得分:2)

根据rfc7159The 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)