2015-06-01 94 views
0

我想赶上当提供的URL是一个混乱和错误的URL,然后返回错误响应为JSON时引发的异常。这是我为了实现这个逻辑而做的。实现API异常烧瓶宁静

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个不同的资源类。每个资源类应该处理这个特定的错误。如何使它成为装饰器,从而减少代码重复性。

我用的烧瓶,烧瓶宁静,巨蟒3.4.3

回答

1

有几个方法可以达到你想要做什么,但我认为最彻底的方法是延长资源类作为在Flask-Restful文档here中描述,并创建一个新的装饰器,其作用是捕获S3ResponseError并返回适当的响应。然后,您可以从新的基础资源类中继承所有资源。

此外,我会建议你描述herehere,这样的方式你所要做的就是返回从您的任何资源字典,他们会适当地转换成JSON指定API级别json_output方法。