烧瓶 - 比@ api.expect更严格的输入数据?

时间:2016-12-19 17:14:32

标签: python flask flask-restplus

在我的flask-restplus API中,我不仅要检查输入数据,例如以下示例

class Persons extends Model
{
    public function devices(){

        return $this->belongsTo('App\Devices');

    }
}

必须有'name'字段,并且可能有'state'字段,但也要检查没有其他字段(并在发生这种情况时引发错误)。 还有另一个装饰器吗?我可以通过自定义函数检查输入数据的正确性吗?

3 个答案:

答案 0 :(得分:2)

不要使用字段作为字段,请尝试使用RequestParser(flask-restplus接受记录为here的内容。这样,您可以调用JComboBoxparser.parse_args(strict=True)如果输入数据中存在任何未知字段,则会出现{1}}异常。

400 Bad Request

有关如何将request_parser与资源一起使用的更多指导,请查看flask-restplus repo中的ToDo example app

答案 1 :(得分:1)

这是来自@shiv的另一个答案。以下代码段使您可以在Flask Restplus生成的Swagger文档中记录有效负载。取自有关expect decorator的文档:

my_resource_parser = api.parser()
my_resource_parser.add_argument('name', type=str, default='string: name', required=True)
my_resource_parser.add_argument('state', type=str, default='string: state')

@api.route('/my-resource/<id>', endpoint='with-parser')
class MyResource(Resource):
    @api.expect(my_resource_parser)
    def post(self):
        args = my_resource_parser.parse_args(strict=True)
        ...

答案 2 :(得分:0)

对于那些想要继续使用api.model而不是请求解析器的用户,可以对输入(假设列表)和模型进行迭代。该模型的行为就像字典。

from flask_restplus import abort

def check_exact(response_list, model):
    for response_dict in response_list:
        for key in response_dict:
            if key not in model:
                abort(400, "Non-specified fields added", field=key)

...

@ns.expect(my_model, validate=True)
def post(self, token):
    """Add new set of responses
    """
    check_exact(api.payload['responses'], my_model)
    ...