首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在烧瓶-restful add_resource()中接受多个参数

在烧瓶-restful add_resource()中接受多个参数
EN

Stack Overflow用户
提问于 2018-01-04 12:50:03
回答 2查看 17.5K关注 0票数 16

我想在我的烧瓶REST中处理一个GET请求。请求将包含多个参数,您可以预期这是一个典型的GET请求:https://localhost:5000/item/analysis=true&class=A&class=B

因此,GET请求包括:

  1. 一个名为“分析”的布尔变量
  2. 一个名为“类”的列表

我想在add_resource()中接受如下内容:

add_resource(Item, '/item/<whatever-comes-here>')

我不知道如何接受add_resource()中的多个参数(其中之一是一个列表)。如何在add_resource()函数中接受它们,以及如何在get()函数中解压缩它们?

我花了时间逆向工程,但我还没有成功。我做错了什么吗?

(我知道可能有一种更好的方法来发送带有REST请求的列表,所以我希望有任何关于这方面的指针!)请提前表示衷心的感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-05 02:11:21

URL参数是在?之后定义的,因此您的URL应该是:

https://localhost:5000/item?analysis=true&class=A&class=B

您不必在add_resource中为这些URL参数指定任何内容。

您可以从Flask的API方法中的request代理对象中获取参数:

代码语言:javascript
复制
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自己的请求解析器(如这里所描述的那样)来解析请求。

守则如下:

代码语言:javascript
复制
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

在请求解析器中,只需像字符串一样接受它并将其拆分为',':

代码语言:javascript
复制
parser.add_argument('class', type=str)
...
classes = args['class'].split(',')

干杯!

票数 21
EN

Stack Overflow用户

发布于 2018-01-05 09:57:56

查询字符串不能以这种方式使用。

它将被覆盖,所以只需使用一个字符串,如:

代码语言:javascript
复制
class=A,B
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48095713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档