在flask中接受多个参数-restful add_resource()
Accepting multiple parameters in flask-restful add_resource()
我想在我的 Flask REST 中处理 GET 请求 API。该请求将包含多个参数,您可以预期这是一个典型的 GET 请求:
https://localhost:5000/item/analysis=true&class=A&class=B
因此,GET 请求包括:
- 一个名为 "analysis"
的布尔变量
- 名为 "class"
的列表
我想在 add_resource() 中接受这个,如下所示:
add_resource(Item, '/item/<whatever-comes-here>')
我不知道如何在 add_resource() 中接受多个参数(其中一个是列表)。如何在 add_resource() 函数中接受它们以及如何在 get() 函数中解压它们?
我已经花时间对此进行逆向工程,但我还没有成功。难道我做错了什么?
(我知道可能有更好的方法来发送带有 REST API GET 请求的列表,所以我将不胜感激任何相关的指示!)
提前致谢!
URL 参数在 ?
之后定义,因此您的 URL 应该改为:
https://localhost:5000/item?analysis=true&class=A&class=B
您不必在 add_resource
中为此类 URL 参数指定任何内容。
您可以在 API GET 方法中从 Flask
的 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 Restful 自己的请求解析器,如 here 所述来解析请求。
代码变为:
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(',')
干杯!
不能那样使用查询字符串。
会被覆盖,所以只用字符串如:
class=A,B
我想在我的 Flask REST 中处理 GET 请求 API。该请求将包含多个参数,您可以预期这是一个典型的 GET 请求: https://localhost:5000/item/analysis=true&class=A&class=B
因此,GET 请求包括:
- 一个名为 "analysis" 的布尔变量
- 名为 "class" 的列表
我想在 add_resource() 中接受这个,如下所示:
add_resource(Item, '/item/<whatever-comes-here>')
我不知道如何在 add_resource() 中接受多个参数(其中一个是列表)。如何在 add_resource() 函数中接受它们以及如何在 get() 函数中解压它们?
我已经花时间对此进行逆向工程,但我还没有成功。难道我做错了什么?
(我知道可能有更好的方法来发送带有 REST API GET 请求的列表,所以我将不胜感激任何相关的指示!) 提前致谢!
URL 参数在 ?
之后定义,因此您的 URL 应该改为:
https://localhost:5000/item?analysis=true&class=A&class=B
您不必在 add_resource
中为此类 URL 参数指定任何内容。
您可以在 API GET 方法中从 Flask
的 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 Restful 自己的请求解析器,如 here 所述来解析请求。
代码变为:
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(',')
干杯!
不能那样使用查询字符串。
会被覆盖,所以只用字符串如:
class=A,B