Python 棉花糖中字符串的简单数组验证
我们正在进行一系列API调用,在进行API调用之前,需要根据基于棉花糖(3.7.0)的模式验证传递的数据。大多数架构定义的格式如下:Python 棉花糖中字符串的简单数组验证,python,marshmallow,Python,Marshmallow,我们正在进行一系列API调用,在进行API调用之前,需要根据基于棉花糖(3.7.0)的模式验证传递的数据。大多数架构定义的格式如下: class SomeSchema(Schema): Field1 = fields.Str(default='') Field2 = fields.Str(default='', missing='', allow_none=True) Field3 = fields.Int() etc 但是,我们有一个小的例外,API调用只需要
class SomeSchema(Schema):
Field1 = fields.Str(default='')
Field2 = fields.Str(default='', missing='', allow_none=True)
Field3 = fields.Int()
etc
但是,我们有一个小的例外,API调用只需要一个未命名的字符串列表,比如:
["abc", "def", "ghi", ...]
为了保持验证输入前后的一致性,我希望继续使用marhmallow,即使是在这个简单的情况下。我认为这样一个简单的模式是可行的:
class MySimpleSchema(Schema):
fields.List(fields.Str(default=''))
my_schema = MySimpleSchema()
my_simple_list = ["item1","item1","item1"]
data = my_schema.load({"field1": my_simple_list})
但是,在运行以下代码时,我会出现以下错误:
my_schema = MySimpleSchema()
my_simple_list = ["item1","item1","item1"]
data = my_schema.load(my_simple_list)
验证错误:{“U架构”:[“无效输入类型”。]}
任何想法都值得赞赏。加载时,即反序列化对象,Marshmallow的
load
方法(或包含字典的字符串,如果是)
因此,需要进行几项更改:
load
,例如:class MySimpleSchema(Schema):
fields.List(fields.Str(default=''))
my_schema = MySimpleSchema()
my_simple_list = ["item1","item1","item1"]
data = my_schema.load({"field1": my_simple_list})
此外,如果您只想验证输入数据而不进行反序列化,可以使用Schema.validate()
:
输出:
marshmallow.exceptions.ValidationError: {'field1': {0: ['Not a valid string.']}}
加载时,即反序列化对象时,Marshmallow的
load
方法(或包含字典的字符串,如果是)
因此,需要进行几项更改:
load
,例如:class MySimpleSchema(Schema):
fields.List(fields.Str(default=''))
my_schema = MySimpleSchema()
my_simple_list = ["item1","item1","item1"]
data = my_schema.load({"field1": my_simple_list})
此外,如果您只想验证输入数据而不进行反序列化,可以使用Schema.validate()
:
输出:
marshmallow.exceptions.ValidationError: {'field1': {0: ['Not a valid string.']}}