代码之家  ›  专栏  ›  技术社区  ›  Vinicius Kreischer

当使用棉花糖验证嵌套字段列表时,如何解决无效类型?

  •  1
  • Vinicius Kreischer  · 技术社区  · 2 年前

    我有一个Flask应用程序,在其中我使用棉花糖模式来验证我的请求,如下所示:

    class HyperParameterSchema(Schema):
        name = fields.Str(required=True)
        data_type = fields.Str(required=True)
        default_value = fields.Str(required=True)
    
    
    class LearnerRequestSchema(Schema):
        files = fields.Raw(type="file")
        name = fields.Str(required=True)
        description = fields.Str(required=True)
        supervision_scope = fields.Enum(SupervisionScope, by_value=True, required=True)
        task_type = fields.Enum(TaskType, by_value=True, required=True)
        tool = fields.Enum(Tool, by_value=True, required=True)
        learner_family_id = fields.Int(required=True)
        hyperparams = fields.List(
            fields.Nested(HyperParameterSchema, many=True),
        )
    

    当我执行以下请求时:

    response = requests.post(
        url="http://localhost:8080/api/learners",
        data={
            "name": "some_name",
            "description": "some_description",
            "supervision_scope": "supervised",
            "task_type": "classification",
            "tool": "scikit-learn",
            "learner_family_id": 1,
            "hyperparams": json.dumps(
                [
                    {"name": "alpha", "data_type": "float", "default_value": "0.1"},
                    {"name": "l1_ratio", "data_type": "float", "default_value": "0.1"},
                ]
            ),
        },
        files={
            "file": open("path_to_file", "rb")
        },
        headers=headers,
    )
    

    我不断得到回应 b'{“errors”:{“form”:{ .

    验证不应该按照实施的方式进行吗?有人能帮我找出我可能做错了什么吗?谢谢

    目前,我正在使用一个字段。原始类处理上述相关问题:

    class LearnerRequestSchema(Schema):
        files = fields.Raw(type="file")
        name = fields.Str(required=True)
        description = fields.Str(required=True)
        supervision_scope = fields.Enum(SupervisionScope, by_value=True, required=True)
        task_type = fields.Enum(TaskType, by_value=True, required=True)
        tool = fields.Enum(Tool, by_value=True, required=True)
        learner_family_id = fields.Int(required=True)
        hyperparams = fields.Raw()
    

    问题是,我必须手动反序列化超参数字段,以检查是否存在所需的字段,而在前一种方法中,我会开箱即用地进行验证。

    0 回复  |  直到 2 年前