【问题标题】:Multiple optional parameters in flask-restful API?flask-restful API中的多个可选参数?
【发布时间】:2021-06-23 10:04:42
【问题描述】:

我有一个非常简单的 API。你给它一个名字、电子邮件、地址、年龄,它就会返回:


{
    'your name is':name,
    'your email is': email,
    'your address is': address,
    'your age is': age
}

但是我试图将这些参数设为可选。

所以我可以使用 http://127.0.0.1:5000/overflow_test/name=John 调用 API,即仅使用名称。或者我可以只使用姓名和电子邮件http://127.0.0.1:5000/overflow_test/name=John&email='email@gmail.com

我相信我的问题在于下面的api.add_resource 部分:

from flask import Flask
from flask_restful import Resource, Api
import requests

app = Flask(__name__)

api = Api(app)

class hlr_lookup(Resource):

    def get(self,name,email,address,age):

        return {
            'your name is':name,
            'your email is': email,
            'your address is': address,
            'your age is': age
        }

api.add_resource(hlr_lookup,'/overflow_test/<string:name><string:email><string:address><string:age>')


if __name__ == '__main__':
    app.run(debug=True)

我尝试了add_resource 行的许多不同变体。

我在这里检查了相关问题,但所有的答案都像这样构造请求:'/overflow_test/parameter1/parameter2/parameter3/paramter4',即所有参数都用斜杠分隔/

是否可以用 & 号分隔? &amp; ?这是我比较习惯使用的 API 风格。

http://127.0.0.1:5000/overflow_test/name=John&amp;email='email@gmail.com

如果我只使用名称John,则当前输出:

# api call

http://127.0.0.1:5000/overflow_test/name=John


# result

{
    "your name is": "name=J",
    "your email is": "o",
    "your address is": "h",
    "your age is": "n"
}

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    使用flask-resful的reqparse.解决

    更多信息在这里:https://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful

    from flask import Flask
    from flask_restful import Resource, Api
    from flask_restful import reqparse
    
    
    app = Flask(__name__)
    
    api = Api(app)
    
    class print_stuff(Resource):
    
    
        def __init__(self):
            self.reqparse = reqparse.RequestParser()
            self.reqparse.add_argument('name', type = str, default='')
            self.reqparse.add_argument('email', type = str, default='')
            self.reqparse.add_argument('address', type = str, default='')
            self.reqparse.add_argument('age', type = str, default='')
            super(hlr_lookup, self).__init__()
    
        def get(self):
    
            args = self.reqparse.parse_args()
    
    
    
            return {
                'your name is':args['name'],
                'your email is': args['email'],
                'your address is': args['address'],
                'your age is': args['age']
            }
    
    api.add_resource(print_stuff,'/overflow_test')
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    现在我可以这样调用 api:

    127.0.0.1:5000/print_stuff?name=John&amp;age=23&amp;address=main street new york&amp;email=something@gmail.com

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 1970-01-01
      • 2014-01-05
      • 2014-01-10
      • 2017-05-06
      • 2021-05-21
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多