在我的flask-restplus API中,我不仅要检查输入数据,例如以下示例
class Persons extends Model
{
public function devices(){
return $this->belongsTo('App\Devices');
}
}
必须有'name'字段,并且可能有'state'字段,但也要检查没有其他字段(并在发生这种情况时引发错误)。 还有另一个装饰器吗?我可以通过自定义函数检查输入数据的正确性吗?
答案 0 :(得分:2)
不要使用字段作为字段,请尝试使用RequestParser(flask-restplus接受记录为here的内容。这样,您可以调用JComboBox
来parser.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)
...