首页 > 解决方案 > 只允许预期的字段?

问题描述

我的模型需要两个字段,我使用该模型验证我的端点:

config_model = api.model('Configuration', {
    'cuvettes_count': fields.Integer,
    'pipettes_count': fields.Integer
})

# later
class ConfigEndpoint(Resource):
    @config_endpoint.expect(config_model, validate=True)
    def put(self):

我如何能:

  1. 如果存在指定的两个键之外的键,则引发验证错误
  2. 如果两个键都不存在,则引发验证错误,但一次只需要一个

标签: flaskflask-restplusflask-restx

解决方案


如果存在指定的两个键之外的键,则引发验证错误

目前,flask-restx 不允许它开箱即用。以下PR应添加该功能。即使现在,您也可以通过创建带有建议更改的自定义模型类来尝试将 PR 应用于您的代码。

如果两个键都不存在,则引发验证错误,但一次只需要一个

我想最简单的方法是直接使用 jsonschema,即类似于下面的

config_model = api.schema_model('Configuration', {
    'type': 'object',
    'properties': {
        'cuvettes_count': {'type': 'integer'},
        'pipettes_count': {'type': 'integer'}
    },
    'anyOf': [{'required': ['cuvettes_count']}, {'required': ['pipettes_count']}]
})

不幸的是,这仅适用于验证输入数据,不适用于编组响应。


推荐阅读