2015-07-20 110 views
0

我正在通過Miguel Grinberg的Flask Web開發手冊的RESTful Web服務一章,他提到Flask可以自行或通過Web服務明確地生成錯誤。Flask錯誤與Web服務錯誤

對於由瓶產生的錯誤,他用類似下面的錯誤處理程序:

@main.app_errorhandler(404) 
def page_not_found(e): 
    if request.accept mimetypes.accept_json and \ 
      not request.accept_mimetypes.accept_html: 
     response = jsonify({'error': 'not found'}) 
     response.status_code = 404 
     return response 
    return render_template('404.html'), 404 

雖然Web服務產生的錯誤,沒有錯誤處理程序:

def forbidden(message): 
    response = jsonify({'error': 'forbidden', 'message': message}) 
    response.status_code = 403 
    return response 

我不真正理解瓶子生成錯誤與Web服務生成錯誤之間的區別。

回答

0

第一個是如何爲Flask將引發的錯誤製作自定義處理程序的示例。例如,如果它無法識別路徑,它將會在默認的「找不到」消息時引發404錯誤。自定義處理程序允許您仍然返回404錯誤,但是用您自己的,更好看的響應代替。

第二個是如何更改您的響應代碼的示例,無需處理先前引發的錯誤。在這個例子中,如果用戶沒有權限,你可能會從另一個視圖return forbidden()。迴應將有一個403代碼,你的前端會知道如何處理。

+0

那就是那個解釋。您是否理解爲什麼他使用第一個示例來引用Flask生成的錯誤,而第二個示例用於引用Web服務錯誤? – Brosef

+0

因爲Flask會產生錯誤:它會嘗試找到一個路由而不會,所以它會產生一個404錯誤。這有點奇怪,因爲你也可以從你自己的代碼中「終止(404)」並仍然使用定製處理器。 – davidism