我正在使用棉花糖创建用于数据验证的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.')
在此示例中,我想访问通过加载函数传递的数据字典。 如何在架构的验证方法内访问数据对象?
感谢您的帮助!
答案 0 :(得分:1)
要回答您的问题,可以将架构验证器与@validates_schema装饰器结合使用。它具有一个pass_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(由棉花糖维护者维护)轻松地用棉花糖解析请求。