首页 > 解决方案 > Python烧瓶json模式验证

问题描述

我在我的新项目中使用了烧瓶框架。它将从帖子中获取 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 请求应用验证

请帮助任何人解决此问题

提前致谢。

标签: pythonflask

解决方案


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

推荐阅读