2015-06-01 122 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方法。