我想在Flask REST API中处理GET请求.请求将包含多个参数,您可以期望这是一个典型的GET请求: https:// localhost:5000/item/analysis = true&class = A&class = B
因此,GET请求包括:
一个叫做"分析"的布尔变量
一个名为"类"的列表
我想在add_resource()中接受这个,如下所示:
add_resource(Item, '/item/
我对如何在add_resource()中接受多个参数(其中一个是列表)一无所知.我如何在add_resource()函数中接受它们,如何在get()函数中解压缩它们?
我花时间对此进行逆向工程,但我还没有成功.难道我做错了什么?
(我知道可能有更好的方法来发送带有REST API GET请求的列表,所以我很感激任何有关它的指示!)真诚地感谢提前!
之后定义了URL参数,?
因此您的网址应该是:
HTTPS://本地主机:5000 /项目分析=真类= A&类= B
您不必add_resource
为此类URL参数指定任何内容.
你可以得到从参数上Flask
的request
代理对象在API GET方法:
from flask import Flask, request from flask_restful import Api, Resource app = Flask(__name__) api = Api(app) # Flask mishandles boolean as string TRUTHY = ['true', 'True', 'yes'] class Item(Resource): def get(): # Get `class` list from request args classes = request.args.getlist('class') # Get `analysis` boolean from request args analysis = True if request.args.get('analysis') in TRUTHY else False api.add_resource(Item, '/item')
对于在参数更大的灵活性,你可以收到,你可以使用瓶宁静自己的请求剖析描述这里来解析请求.
代码变成:
from flask import Flask from flask_restful import Api, Resource, reqparse app = Flask(__name__) api = Api(app) # Define parser and request args parser = reqparse.RequestParser() parser.add_argument('class', type=list) parser.add_argument('analysis', type=bool, default=False, required=False, help='Enable analysis') class Item(Resource): def get(): args = parser.parse_args() classes = args['class'] # List ['A', 'B'] analysis = args['analysis'] # Boolean True api.add_resource(Item, '/item')
最后,有时可能需要更紧凑的列表格式(例如,网址大小限制),在这种情况下,我经常使用逗号分隔列表: https:// localhost:5000/item?analysis = true&class = A,B
在请求解析器中,只需像字符串一样接受它并将其拆分为',':
parser.add_argument('class', type=str) ... classes = args['class'].split(',')
干杯!