簡體   English   中英

flask-restful API 中的多個可選參數?

[英]Multiple optional parameters in flask-restful API?

我有一個非常簡單的 API。你給它一個名字,email,地址,年齡,它返回:


{
    '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,即名稱。 或者我可以只用名字和 email 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'即所有參數都用斜杠/分隔。

是否可以用&符號分隔? & 是我比較習慣用的API的樣式。

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

當前 output 如果我只使用名字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"
}

通過使用 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&age=23&address=main street new york&email=something@gmail.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM