【问题标题】:Flask JSON Validation WTForms烧瓶 JSON 验证 WTForms
【发布时间】:2016-05-03 12:00:32
【问题描述】:

我正在尝试通过 JSONSchema 验证为 Restful API 启用 flask_inputs。 代码如下所示:

from flask_inputs import Inputs
from flask_inputs.validators import JsonSchema

def GetValidSchema():
schema = {
    'type': 'object',
    'properties': {
        'name': {'type': 'string'}
    }
}
return schema


    class ApiResource(resource)

        class ApiInputs(Inputs):
            schema = InputsValidation.GetValidSchema() # this returns the JSON schema object 
            json = [JsonSchema(schema=schema)]

        def post(self):
            inputs =self.ApiInputs(request)
            print inputs.validate()


api.add_resource(ApiResource,'/test')

当我试图追踪 WT-Forms 时,我真的需要一些帮助,但不幸的是,我无法明确得出为什么会出现以下错误的结论:

  File "/home/seelview/run.py", line 153, in post
    inputs.validate()
      File "/usr/lib/python2.7/site-packages/flask_inputs/inputs.py", line 76, in validate
    if not form.validate():
  File "/usr/lib/python2.7/site-packages/wtforms/form.py", line 152, in validate
    if not field.validate(self, extra):
  File "/usr/lib/python2.7/site-packages/wtforms/fields/core.py", line 204, in validate
    stop_validation = self._run_validation_chain(form, chain)
  File "/usr/lib/python2.7/site-packages/wtforms/fields/core.py", line 225, in _run_validation_chain
    validator(form, self)
TypeError: 'str' object is not callable

知道我做错了什么或缺少什么吗?

【问题讨论】:

  • 请将您的程序简化为仍然显示错误的最简单的完整程序。将整个简短的程序复制粘贴到您的问题中。请参阅How to Askminimal reproducible example 了解更多信息。
  • 看看上面...这就是孔程序:)
  • 我不认为这是整个程序。至少,当我运行该程序时,它只会产生错误。
  • 是的,你是对的,我唯一没有添加的是烧瓶模块和 api 定义以及运行线......你也需要吗?
  • 只需创建一个基本的烧瓶最小 api 添加 Api Resource 类并注意 GetValidSchema 因为当前是从另一个模块调用的......只需复制 ApiInputs 类中的模式对象并且应该可以工作。 ..

标签: python json flask flask-wtforms flask-restful


【解决方案1】:

您正在使用验证器以外的其他东西污染ApiInputs 命名空间。试试这个:

class ApiInputs(Inputs):
    json = [JsonSchema(schema=GetValidSchema())]

示例程序:

from flask import Flask, request
from flask_restful import Resource, Api
from flask_inputs import Inputs
from flask_inputs.validators import JsonSchema

app = Flask(__name__)
api = Api(app)


def GetValidSchema():
    return {
        'type': 'object',
        'properties': {
            'name': {'type': 'string'}}}


@app.route('/')
def clickme():
    return '''
        <form action="/test" method="POST">
        <input type=submit value="Click Me" />
        </form>'''


class ApiResource(Resource):
    class ApiInputs(Inputs):
        json = [JsonSchema(schema=GetValidSchema())]

    def post(self):
        inputs = self.ApiInputs(request)
        print inputs.validate()


api.add_resource(ApiResource, '/test')

if __name__ == '__main__':
    app.run(debug=True)

【讨论】:

  • 谢谢罗伯!开箱即用:)
猜你喜欢
  • 2023-04-04
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多