我想在我的烧瓶REST中处理一个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请求的列表,所以我希望有任何关于这方面的指针!)请提前表示衷心的感谢!
发布于 2018-01-05 02:11:21
URL参数是在?之后定义的,因此您的URL应该是:
https://localhost:5000/item?analysis=true&class=A&class=B
您不必在add_resource中为这些URL参数指定任何内容。
您可以从Flask的API方法中的request代理对象中获取参数:
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')为了在您可以接收的参数中具有更大的灵活性,您可以使用Flask自己的请求解析器(如这里所描述的那样)来解析请求。
守则如下:
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')最后,有时可能需要更紧凑的列表格式(例如,限制url大小),在这种情况下,我经常使用逗号分隔的列表:https://localhost:5000/item?analysis=true&class=A,B。
在请求解析器中,只需像字符串一样接受它并将其拆分为',':
parser.add_argument('class', type=str)
...
classes = args['class'].split(',')干杯!
发布于 2018-01-05 09:57:56
查询字符串不能以这种方式使用。
它将被覆盖,所以只需使用一个字符串,如:
class=A,Bhttps://stackoverflow.com/questions/48095713
复制相似问题