[英]How to abort on unknown argument using flask-restful?
这个问题不再相关,因为烧瓶稳定的新发行版可以自行解决。
我有一个烧瓶式的API,我使用reqparse来解析参数。 现在,如果用户使用未知参数,我想中止请求。
使用reqparse,我可以在检测到已知值不正确的参数时中止操作,但是似乎没有默认情况下可以处理其他参数。
这样可以防止用户通过“为什么不起作用?”与我联系。 当他们是不使用正确参数的人。
你会怎么做?
编辑:根据要求,这是视图的示例:
class myView(restful.Resource):
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('arg1', type=str, action='append')
parser.add_argument('arg2', type=myType, action='append')
args = parser.parse_args()
result = dao.getResult(arg1, arg2)
return jsonify(result)
api.add_resource(myView, '/view')
我想要的是:如果用户去ip/view?bad_arg=bad
那么他们会收到400错误。
从0.3.1开始,您可以将strict=True
传递给reqparse.parse_args
。 https://github.com/flask-restful/flask-restful/pull/358
reqparse没有提供内置的解决方案,但是我可以通过对reqparse解析器进行子类化来解决我的问题。
class StrictParser(reqparse.RequestParser):
def parse_args(self, req=None):
"""Overide reqparse parser in order to fail on unknown argument
"""
if req is None:
req = request
known_args = [arg.name for arg in self.args]
for arg in request.args:
if arg not in known_args:
bad_arg = reqparse.Argument(arg)
bad_arg.handle_validation_error("Unknown argument: %s" % arg)
return reqparse.RequestParser.parse_args(self,req)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.