我想在Flask REST API中处理GET请求。请求将包含多个参数,您可以期望这是典型的GET请求: https://localhost:5000/item/analysis=true&class=A&class=B
因此,GET请求包括:
我想在add_resource()中接受这个,如下所示:
add_resource(Item, '/item/<whatever-comes-here>')
我对如何在add_resource()中接受多个参数(其中一个是列表)一无所知。我如何在add_resource()函数中接受它们,如何在get()函数中解压缩它们?
我花时间对此进行逆向工程,但我还没有成功。难道我做错了什么?
(我知道可能有更好的方法来发送带有REST API GET请求的列表,所以我很感激任何关于它的指针!) 真诚地感谢!
答案 0 :(得分:8)
网址参数是在?
之后定义的,因此您的网址应该是:
https://localhost:5000/item?analysis=true&class=A&class=B
您无需在add_resource
中为此类网址参数指定任何内容。
您可以在API GET方法中从Flask
的{{1}}代理对象中获取参数:
request
为了在您可以接收的参数中获得更大的灵活性,您可以使用Flask Restful自己的请求解析器(如here所述)来解析请求。
代码变为:
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')
最后,有时可能需要更紧凑的列表格式(例如,网址大小限制),在这种情况下,我经常使用以逗号分隔的列表: https://localhost:5000/item?analysis=true&class=A,B
并且在请求解析器中,只需像字符串一样接受它并将其拆分为',':
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')
干杯!
答案 1 :(得分:0)
查询字符串不能以这种方式使用。
它将被覆盖,因此只需使用如下字符串:
class=A,B