[英]Python flask json schema validation
我在我的新项目中使用了 Flask 框架。 它将从帖子中获取 JSON 数据并发送 JSON 响应。 所以,我需要验证我的 JSON 请求。 我见过几个图书馆。 但是这些库没有按预期工作。 最后,我决定使用flask-jsonschema-validator。 它适用于单个 JSON 对象。 如果请求对象具有嵌套对象,则它不起作用。 例如,
from flask_jsonschema_validator import JSONSchemaValidator
JSONSchemaValidator(app=app, root="schemas")
这是我对验证器的初始化。
# If any error occurred in the request.
@app.errorhandler(jsonschema.ValidationError)
def json_validation_error(e):
return json_response("error", str(e), {})
这是我的错误处理程序
@app.validate('model', 'save') def save_model():
这是我的实现。
{
"save": {
"type": "object",
"properties": {
"workspace": {"type": "object"},
"name": {"type": "string"},
"description": {"type": "string"},
"uri": {"type": "string"},
"type": {
"name": {"type": "string"},
}
},
"required": [ "workspace", "name", "description", "uri", "type"]
}
}
这是我的 model.json 文件。 它正在验证除“类型”之外的请求。 如何使用嵌套对象对 JSON 请求应用验证
请帮助任何人解决这个问题
提前致谢。
flask-expects-json包检查嵌套对象上的变量类型。
它可以作为您路线上的装饰器。
SCHEMA = {
"type": "object",
"properties": {
"workspace": {"type": "object"},
"name": {"type": "string"},
"description": {"type": "string"},
"uri": {"type": "string"},
"type": {
"type": "object",
"properties": {
"name": {"type": "string"},
}
}
},
"required": ["workspace", "name", "description", "uri", "type"]
}
@expects_json(SCHEMA)
def my_route(self, **kwargs):
pass
如果验证复杂的嵌套对象,我会推荐 JSONSchema 的替代工具。 我可以在GoodJSON 中复制您的架构验证,如下所示。 如您所见,制定验证模式只是组合了一堆可应用于对象、列表和原始值的自包含验证器函数。
from goodjson.validators import is_dict, is_string, is_uri, foreach_key
validate_fun = foreach_key(
save=[foreach_key(
workspace=[is_dict],
name=[is_string],
description=[is_string],
uri=[is_uri],
type=[foreach_key(
name=[is_string]
)]
)]
)
validate_fun(YOUR_JSON_DATA_OBJECT)
免责声明:我是 GoodJSON 的作者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.