【问题标题】:flask restful enforcing required typed parametersflask restful 强制执行所需的类型参数
【发布时间】:2020-04-14 07:26:15
【问题描述】:

我正在使用 Flask==1.1.2 和 flask-restplus==0.13.0 创建一个粗略且现成的 REST API。

我正在关注official documentation关于如何指定是否需要参数,但是,我仍然可以在没有参数的情况下访问 URL,并且不会引发错误。

生成的 Swagger UI 也没有反映方法需要参数。我该如何执行?

这是我的代码:

from flask import Flask
from flask_restplus import Api, Resource, reqparse
from werkzeug.exceptions import BadRequest


#e = BadRequest('My custom message')
#e.data = {'custom': 'value'}
#raise e

flask_app = Flask(__name__)
app = Api(app = flask_app)


mylist_namespace = app.namespace('mylist', description='MyList API')



@mylist_namespace.route("/")
class MyListClass(Resource):
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('rate', type=int, required=True,  help='Rate cannot be converted')
        parser.add_argument('name', type=str, help='Enter a name')      
        return {
            "status": "Got my list"
        }

    def post(self):
        return {
            "status": "Posted my list"
    }

【问题讨论】:

    标签: flask swagger flask-restplus


    【解决方案1】:

    为了运行验证,您需要强制 reqparser 解析数据

    data = parser.parse_args()
    

    解析后,你可以在datadict中访问你的参数

    此外,我建议您将解析器初始化移至类级别,以避免创建额外的解析器。

    class MyListClass(Resource):
        parser = reqparse.RequestParser()
        parser.add_argument('rate', type=int, required=True,  help='Rate cannot be converted')
        parser.add_argument('name', type=str, help='Enter a name') 
        def get(self):
            ...
    

    因此,您的解析将使用“self”关键字:

    data = self.parser.parse_args()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-13
      • 2018-09-26
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多