Marshmallow - 如何在验证中使用加载的数据
Marshmallow - how to use loaded data in validation
我正在创建一个 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.')
如本例所示,我想访问通过加载函数传递的数据字典。 如何访问架构验证方法中的数据对象?
感谢您的帮助!
要回答您的问题,您可以将模式验证器与 @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(由 marshmallow 维护者维护)轻松解析 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 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.')
如本例所示,我想访问通过加载函数传递的数据字典。 如何访问架构验证方法中的数据对象?
感谢您的帮助!
要回答您的问题,您可以将模式验证器与 @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(由 marshmallow 维护者维护)轻松解析 marshmallow 请求。