猿问

如何使用swagger和flask restplus正确渲染数组参数?

我正在使用 Flask RestPlus 实现一个 Flask 应用程序,该应用程序必须在 HTTP GET 端点上接收一个 id(整数)列表,因此应用程序客户端可以获得与这些标识符匹配的结果列表,例如,...


GET /resource/1,2,3,4

GET /resource?id=1,2,3

GET /resource?id=1&id=2&id=3

...默认情况下,没有任何werkzeug bultin转换器不支持,但按照此stackoverflow帖子中的步骤,url解析工作正常,我可以使用此转换器接收ID列表...


class ListOfIntegerConverter(BaseConverter):

    def __init__(self, url_map, randomify=False):

        self.regex = r'\d+(?:,\d+)*,?'


    def to_python(self, value):

        return [int(x) for x in value.split(',')]


    def to_url(self, value):

        return ','.join(str(x) for x in value)

...然后按照此处所述正确注册...


app.url_map.converters['list_of_int'] = ListOfIntegerConverter


... 用于解析 url 参数 ...


@my_namespace.route('/<list_of_int:list_of_ids>/', methods=["GET"])

class MyResourceById(Resource):

    def get(self, list_of_ids):

        [print(id, type(id)) for id in list_of_ids]

...但生成的 swagger 文档将字段呈现为纯字符串而不是数组或整数列表,应该像这样呈现......

我知道 swagger 支持多值参数,但我无法让 Flask RestPlus 相应地呈现此字段。有没有人知道如何去做,可以帮助我提供一些建议?



芜湖不芜
浏览 292回答 1
1回答

千巷猫影

我认为你必须使用arg 解析器:id_parser = api.parser()id_parser.add_argument('id[]', type=int, action='append')@api.route('/ids', methods=["GET"])@api.doc(parser=id_parser)class MyResourceById(Resource):&nbsp; &nbsp; @staticmethod&nbsp; &nbsp; def get():&nbsp; &nbsp; &nbsp; &nbsp; ids = request.args.getlist('id[]')&nbsp; &nbsp; &nbsp; &nbsp; print(ids)&nbsp; &nbsp; &nbsp; &nbsp; return ids我会像上面那样做,但你也可以让它与你的转换器一起工作。文件说解析器正在被弃用,但不会很快,我个人找不到替代方案。
随时随地看视频慕课网APP

相关分类

Python
我要回答