繁体   English   中英

如何使用flask-restful中止未知参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM