是否可以在棉花糖中定义具有互斥字段的嵌套模式?

时间:2019-03-14 15:01:11

标签: python python-3.x flask flask-restful marshmallow

我正在使用棉花糖来验证我在烧瓶restful api中接收到的json数据。但是,在 post 请求中,有一个互斥字段
例如 : {"predict": {"id": "5hgy667y4h7f"}}{"predict": {"text": "This is a sample sentence"}}
但是idtext都应该一起发送。此外,根据收到的天气idtext调用不同的方法。

Q)我如何在棉花糖中构建一个模式以验证上述内容?

我为以下任一字段提供的示例代码如下-

from flask import Flask, request
from flask_restful import Resource, Api, abort
from marshmallow import Schema, fields, ValidationError
app = Flask(__name__)
api = Api(app)

class Mutex1(Schema):
    text = fields.Str(required=True)
    class Meta:
        strict = True

class Mutex2(Schema):
    id_ = fields.Str(required=True)
    class Meta:
        strict = True

class MySchema(Schema):
    predict = fields.Nested(Mutex1)
    class Meta:
        strict = True

class Test(Resource):
    def post(self):
        input_req = request.get_json(force=True)
        try:
            result = MySchema().load(input_req)
        except ValidationError:
            return {'message': 'Validation Error'}, 500
        else:
            return {'message': 'Successful validation'}, 200

api.add_resource(Test, '/test')
app.run(host='0.0.0.0', port=5000, debug=True)

此代码仅接受text,并且textid_一起接受,但是它仅拒绝id_。知道如何让它接受id_并同时拒绝textid_时拒绝它吗?

1 个答案:

答案 0 :(得分:0)

同时创建一个Mutextext的{​​{1}}模式,并添加一个schema-level validation,如果两者都失败的话。

id_

旁注:

  • 输入验证错误不应返回500(服务器错误),而是422。
  • 我对烧瓶不安宁不熟悉,但是看起来您可以通过使用webargs来解析资源输入来节省一些样板。