【问题标题】:How to abort on unknown argument using flask-restful?如何使用flask-restful中止未知参数?
【发布时间】:2014-12-17 10:44:26
【问题描述】:

编辑

这个问题不再相关,因为flask-restful新版本可以自己处理。

原始问题:

我有一个 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 错误。

【问题讨论】:

    标签: python rest flask arguments


    【解决方案1】:

    从 0.3.1 开始,您可以将 strict=True 传递给 reqparse.parse_argshttps://github.com/flask-restful/flask-restful/pull/358

    【讨论】:

      【解决方案2】:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 2021-03-26
        • 2014-02-02
        • 2013-11-23
        • 1970-01-01
        相关资源
        最近更新 更多