Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 棉花糖中字符串的简单数组验证_Python_Marshmallow - Fatal编程技术网

Python 棉花糖中字符串的简单数组验证

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调用只需要

我们正在进行一系列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调用只需要一个未命名的字符串列表,比如:

["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.']}}