【问题标题】:Implementing API exception flask-restful实现 API 异常 flask-restful
【发布时间】:2015-06-02 09:47:28
【问题描述】:

我试图捕获当提供的 url 是一个混乱和错误的 url 时引发的异常,然后将错误响应作为 JSON 返回。这就是我为实现这个逻辑所做的。

key_id 不是 S3 的有效键时,Analysis 类内部会引发异常。

def url_error(status_code, message, reason):
    response = jsonify({
        'status': status_code,
        'message': message,
        'reason': reason
    })
    response.status_code = status_code
    return response


class RowColumnCount(Resource):
    def get(self, key_id):
        try:
            rc = Analysis(key_id=key_id)
        except S3ResponseError as e:
            return url_error(e.status, e.message, e.reason)
        json_response = json.loads(rc.count_rows_columns())
        return json_response

上面的代码运行良好,但对于 50 个不同的资源类来说它有点重复。每个 Resource 类都应该处理这个特定的错误。如何让它成为一个装饰器,从而减少代码的重复性。

我正在使用 Flask、Flask-Restful、Python 3.4.3

【问题讨论】:

    标签: python rest flask flask-restful


    【解决方案1】:

    有几种方法可以实现你想要做的事情,但我认为最简洁的方法是扩展 Resource 类,如 Flask-Restful 文档here 中所述,并创建一个新的装饰器,其工作是捕获 S3ResponseError 并返回适当的响应。然后,您可以从新的 Resource 基类中对所有资源进行子类化。

    另外,我建议您指定 API 级别 json_output 方法,如 herehere 所述,这样您所要做的就是从您的任何资源返回一个字典,它们将被转换为 JSON适当的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多