为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2021-08-17 10:03:54
我正在使用 Flask RestPlus 实现一个 Flask 应用程序,该应用程序必须在 HTTP GET 端点上接收一个 id(整数)列表,因此应用程序客户端可以获得与这些标识符匹配的结果列表,例如,...GET /resource/1,2,3,4GET /resource?id=1,2,3GET /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 相应地呈现此字段。有没有人知道如何去做,可以帮助我提供一些建议?
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

我认为你必须使用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):


    @staticmethod

    def get():

        ids = request.args.getlist('id[]')

        print(ids)

        return ids

我会像上面那样做,但你也可以让它与你的转换器一起工作。


文件说解析器正在被弃用,但不会很快,我个人找不到替代方案。


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 291 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信