实现API例外烧瓶 - 休息

时间:2015-06-01 09:03:55

标签: python rest flask flask-restful

我正在尝试捕获当提供的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

1 个答案:

答案 0 :(得分:1)

有几种方法可以实现您尝试做的事情,但我认为最干净的方法是扩展Resource类,如Flask-Restful docs here中所述并创建一个新的装饰器,其工作是捕获S3ResponseError并返回适当的响应。然后,您可以从新的基础资源类中继承所有资源。

另外,我建议您指定herehere所述的API级别json_output方法,这样您只需从任何资源中返回一个字典,然后他们即可#39;将适当地转换为JSON。