我使用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输出正确显示模型?