Python 棉花糖-如何在验证中使用加载的数据

Python 棉花糖-如何在验证中使用加载的数据,python,python-3.x,marshmallow,Python,Python 3.x,Marshmallow,我正在使用棉花糖创建一个用于数据验证的API 数据以JSON格式提供给模式: data = request.get_json() schema = ItemSchema() evaluated = schema.load(data) if evaluated.errors: return {'message': evaluated.errors}, 400 架构具有字段验证方法,这些方法由@validates装饰符修饰: @validates('name') def

我正在使用棉花糖创建一个用于数据验证的API

数据以JSON格式提供给模式:

data = request.get_json()
schema = ItemSchema()
evaluated = schema.load(data)

if evaluated.errors:
            return {'message': evaluated.errors}, 400
架构具有字段验证方法,这些方法由
@validates
装饰符修饰:

@validates('name')
def validate_name(self, name):
    existing_item = ItemModel.name_exists(name) #returns an object of type Item if the name exists. Names are unique
    if existing_item and existing_item._id !=  data['_id']:
        raise ValidationError('Item already exists.')
在本例中,我希望访问通过load函数传递的数据字典如何访问架构验证方法中的数据对象?


谢谢你的帮助

要回答您的问题,您可以将模式验证器与@validates\u模式装饰器一起使用。它有一个
pass\u original
参数

@validates_schema(pass_original=True)
def validate_name(self, data, input_data):
    existing_item = ItemModel.name_exists(data['name'])
    if existing_item and existing_item._id !=  input_data['_id']:
        raise ValidationError('Item already exists.')

但坦率地说,我认为您的用例是错误的

如果是项创建(POST),只需检查名称是否已存在

如果是项修改(PUT),则从请求路径知道ID。您应该能够从您的对象访问它

另外,如果我建议的话,您可以使用webargs(由棉花糖维护者维护)轻松地用棉花糖解析请求