gpt4 book ai didi

python - Flask request.args 的查询参数列表

转载 作者:行者123 更新时间:2023-11-30 21:55:01 25 4
gpt4 key购买 nike

我正在尝试将逗号分隔的查询参数传递到 Flask 端点。

一个示例 URI 是:

localhost:3031/someresource#?status=1001,1002,1003

查看 request.argsrequest.args.getlist('status') 的返回,我发现我只得到一个字符串。

ipdb> pp request.args
ImmutableMultiDict([('status', '1001,1002,1003')])
ipdb> request.args.getlist('status')
['1001,1002,1003']

我知道我可以用逗号分割字符串,但这感觉很奇怪。在 Flask 中是否有更惯用的方法来处理这个问题?或者我的查询参数格式错误?

解决方案
由于 Flask 不直接支持逗号分隔的查询参数,因此我将其放入基本 Controller 中以支持所有端点上的逗号分隔或重复的查询参数。

request_data = {}
params = request.args.getlist('status') or request.form.getlist('status')
if len(params) == 1 and ',' in params[0]:
request_data['status'] = comma_separated_params_to_list(params[0])})
else:
request_data['status'] = params
def comma_separated_params_to_list(param):
result = []
for val in param.split(','):
if val:
result.append(val)
return result

最佳答案

flask 变体 getlist需要多个键:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def status():
first_status = request.args.get("status")
statuses = request.args.getlist("status")
return "First Status: '{}'\nAll Statuses: '{}'".format(first_status, statuses)
❯ curl "http://localhost:5000?status=5&status=7"
First Status: '5'
All Statuses: '['5', '7']'

对此没有标准,如何解析/传递多个 GET 参数取决于您使用的语言/框架; Flask 构建于 werkzeug所以它允许这种风格,但如果你不再使用 Flask,你就必须查找它。

顺便说一句,使用逗号为同一键传递多个值的 REST API 设计并不罕见 - 让用户更容易使用。无论如何,你正在解析 GET args,解析结果字符串并没有那么麻烦。您可以选择筹集400如果带有逗号的字符串格式不正确,则会出现 HTTP 错误。

其他一些语言(尤其是 PHP)支持“数组”语法,因此有时会使用它:

/request?status[]=1000&status[]=1001&status[]=1002

关于python - Flask request.args 的查询参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57914396/

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