当前位置: 首页 > 面试题库 >

Flask request.args查询参数列表

邵繁
2023-03-14
问题内容

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

URI的示例为:

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

查看的返回,request.args否则request.args.getlist('status')我只会得到一个字符串

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

我知道我可以用逗号分割字符串,但这太不客气了。在Flask中处理此问题的适当方法是什么?还是我的查询参数格式错误?

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

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

问题答案:

REST API设计很常见,它使用逗号来为同一密钥传递多个值-使用户更容易。无论如何,您都在解析GET
args,解析字符串并没有那么hacky。如果它们的逗号格式字符串格式不正确,则可以选择引发400 HTTP错误。

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

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

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上构建的,因此允许这种样式,但是如果您转离烧瓶,则必须查找它。



 类似资料:
  • 查询创建工具及查询编辑器都支持在查询文本使用参数。你可以设置查询参数来在每次运行查询时添加变量值。参数应作为一个识别符以 $ 开头,[ ] 括住,例如 [$任何名]。 运行查询及 输入参数 对话框提供你输入想要搜索的数据。

  • 查询支持在查询文本内使用参数。你可以设置查询参数,于每次运行查询时添加变量值。参数是一个以 $ 开头以及用 [ ] 括住的标识符,例如:[$任何名]。 运行查询时,你可以在“输入参数”对话框输入你想要搜索的数据。如勾选“原始模式”选项,将不会在传递输入值到查询时添加引号。

  • 查询支持在查询文本内使用参数。你可以设置查询参数,于每次运行查询时添加变量值。参数是一个以 $ 开头以及用 [ ] 括住的标识符,例如:[$任何名]。 运行查询时,你可以在“输入参数”对话框输入你想要搜索的数据。如勾选“原始模式”选项,将不会在传递输入值到查询时添加引号。

  • 查询支持在查询文本内使用参数。你可以设置查询参数,于每次运行查询时添加变量值。参数是一个以 $ 开头以及用 [ ] 括住的标识符,例如:[$任何名]。 运行查询时,你可以在“输入参数”对话框输入你想要搜索的数据。如勾选“原始模式”选项,将不会在传递输入值到查询时添加引号。

  • 主要内容:示例关于查询的最好的部分是可以一次又一次地保存和运行相同的查询,但是当您通过只更改条件来一次又一次地运行相同的查询时,则可以考虑查询来接受参数并按指定参数值来查询。 如果您经常要运行特定查询的变体,请考虑使用参数查询。 参数查询以交互方式检索信息,提示最终用户在运行查询之前提供条件。 也可以指定参数应该接受的数据类型。 可以为任何参数设置数据类型,但为数字,货币或日期/时间数据设置数据类型尤其重要。

  • 问题内容: 我有一个python列表,说l 我想编写一个sql查询来获取列表中所有元素的数据,例如 我该如何完成? 问题答案: 到目前为止,答案一直是将这些值模板化为纯SQL字符串。这对于整数绝对没问题,但是如果我们想对字符串执行此操作,则会遇到转义问题。 这是一个使用参数化查询的变体,它对两个都适用: