Flask request.args的查询参数列表

编程入门 行业动态 更新时间:2024-10-09 09:23:53
本文介绍了Flask request.args的查询参数列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I am trying to pass comma separated query parameters to a Flask endpoint.

示例URI是:

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

看着request.args或request.args.getlist('status')的返回,我发现我只有一个字符串.

Looking at the return of request.args or request.args.getlist('status') I see that I only get a string.

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

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

I know I can split the string by comma but that is too hacky. What is the appropriate way to handle this in Flask? Or are my query params wrong format?

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

Solution Since Flask does not directly support comma separated query params, I put this in in my base controller to support comma-separated or duplicate query params on all endpoints.

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,解析字符串并没有那么困难.如果发生以下情况,您可以选择引发 400 HTTP错误带有逗号的字符串格式不正确.

Its not uncommon REST API design to have commas to pass multiple values for the same key - makes it easier for the user. You're parsing GET args anyway, parsing strings is not that much more hacky. You can choose to raise a 400 HTTP error if their string with commas isn't well formatted.

某些其他语言(特别是PHP)支持'array'语法,因此有时会使用:

Some other languages (notably PHP) support 'array' syntax, so that is used sometimes:

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

flask变体 getlist 需要多个键:

The flask variant getlist expects multiple keys:

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 "localhost:5000?status=5&status=7" First Status: '5' All Statuses: '['5', '7']'

对此没有标准,如何解析/传递多个GET参数取决于您所使用的语言/框架. flask基于 werkzeug 构建,因此它允许使用这种样式,但是如果你离开烧瓶.

There's no standard for this, how multiple GET args are parsed/passed depends on which language/framework you're using; flask is built on werkzeug so it allows this style, but you'll have to look it up if you switch away from flask.

更多推荐

Flask request.args的查询参数列表

本文发布于:2023-06-06 09:47:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/539037.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:参数   列表   Flask   request   args

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!