当前位置:  开发笔记 > 编程语言 > 正文

在flask-restful add_resource()中接受多个参数

如何解决《在flask-restfuladd_resource()中接受多个参数》经验,为你挑选了1个好方法。

我想在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请求的列表,所以我很感激任何有关它的指示!)真诚地感谢提前!



1> JahMyst..:

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

HTTPS://本地主机:5000 /项目分析=真类= A&类= B

您不必add_resource为此类URL参数指定任何内容.

你可以得到从参数上Flaskrequest代理对象在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(',')

干杯!


我最终使用了`parser.add_argument('analysis',type = str,...`'然后是您的`TRUTHY`方法,即使我通过`curl http:// localhost:5000 / item -G -d“ class = A,B“ -d” analysis = False“`如果分析:print(” yeah“)`将打印`yeah。所以我不确定如何正确处理布尔输出;似乎评估为`正确,一旦通过。
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有