flask-restplus API中的自定义字段类型限制为一种类型

时间:2019-07-04 16:27:07

标签: python python-3.x flask swagger flask-restplus

我使用Flask-RESTPlus构建了一个API。我试图设置一个具有自定义类型的字段(我正在连接的设备之一必需)。类型应为“字符串或整数”。它有效,但是当我查看Swagger输出时,Channel Parameter的模型仅包含“名称”,而不包含“值”条目:

{
  "name": "string"
}

我尝试设置__schema_type__ = 'string',该设置几乎可以正确显示模型(应该说“字符串或整数”):

{
  "name": "string",
  "value": "string"
}

但是,如果我提供一个整数作为value的输入,则验证将失败。

API很大,但是,下面是代码的相关部分:

from flask_restplus import fields

# ... api (namespace) is declared here
# ... ccreate, Initializer are imported

class StringOrInt(fields.Raw):
    __schema_type__ = None
    def format(self, value):
        return value
    def validate(self, value):
        return isinstance(value, int) or isinstance(value, str)

channel_param_model = ns.model('Channel Parameter', {
    'name': fields.String('Parameter name', required=True),
    'value': StringOrInt('Parameter value (string or integer)'),
})

# ... more code here ...

@api.route('/endpoint')
class SomeClass(Initializer):
    @api.expect(channel_param_model, validate=True)
    def post(self):
        """Create a new channel"""
        channel_creation_response = ccreate(ns.payload)
        return channel_creation_response

如何确保验证有效(允许输入字符串和整数)以及Swagger输出正确显示模型?

0 个答案:

没有答案