我有一个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()
问题是,我必须手动反序列化超参数字段,以检查是否存在所需的字段,而在前一种方法中,我会开箱即用地进行验证。