flask異常處理

2022-07-30 00:03:22 字數 1762 閱讀 3017

在view函式中,如果需要中斷request,可以使用abort(500)或者直接raise exception。當然我們還需要返回乙個出錯資訊給前端,所以需要定製一下errorhandler。

一般只需要兩個handler即可,乙個是404錯誤,乙個是500一類的伺服器端錯誤。當然也可以自定義錯誤。

abort:flask中異常處理語句,功能類似於raise語句;觸發abort後會中止視力方法,返回分發函式;abort引數需為http狀態碼的子集。

errorhandler:裝飾器,註冊異常處理函式,配合abort函式使用,根據狀態碼匹配,返回response() 例項或者(string, status_code)。

from werkzeug.exceptions import abort

def view_abort():

abort(405) # 請求中斷,返回狀態碼405

def err_handle(e):

return '錯誤404' + str(e), 405

# return response('錯誤404' + str(e), 405) # 與上一行效果相同

藍圖也可以註冊異常處理方法,可以註冊藍圖級/全域性級異常處理函式(僅裝飾器方法名不同)。

具體見下方案例,不過不建議在藍圖中註冊全域性級異常處理函式。

# 非全域性

@blue_t.errorhandler(405)

def err_405(e):

print('err_405')

return 'error 405 from blueprint blue_t'

def err_404(e):

return 'blueprint error_405'

#return render_template('error/404.html')

生產環境下一般將大部分異常隱藏,只返回500到前端。

下例即是將錯誤日誌寫入檔案,前端返回500

# 異常處理

return '錯誤405: ' + str(e), 405

def err_all(error):

return response(r'伺服器錯誤', 500)關於abort/errorhandler

flask在full_dispatch_request中處理請求,如果使用abort即為丟擲異常,

接下來執行rv = self.handle_user_exception(e)

它會去註冊的異常處理函式中根據e.code(abort的引數)匹配,並且優先在藍圖的異常處理函式中進行匹配

無論如何,最後的結果一定是response() 例項或者(string, status_code)。

如果願意的話,也可以直接在檢視中 return response('error 500', 500)

對於異常可以由server僅返回狀態碼,nginx返回靜態網頁,以節約伺服器資源。

Flask 請求異常處理

在整個請求的過程當中,如果反生錯誤,或者需要根據不同的狀態碼返回對應的錯誤資訊 abort中斷請求from flask import flask defhello world abort 404 請求到此中斷,後面的不會執行,並且這裡的http的狀態碼為401 return hello,world ...

Flask的訊息提示異常處理

一 訊息提示 flask提供訊息閃現機制,方便在應用中訊息提示 首先匯入flash方法,再對secret key進行賦值,以對訊息加密 然後定義乙個路由,使用flash方法,並返回模板 coding utf8 from flask import flask,flash,render template...

flask 響應資訊與異常處理

使用abort函式可以立即終止檢視函式的執行,並可以返回前端特定的資訊 from flask import flask,request,abort,response login methods get deflogin name request.form.get name pwd request.f...