概念:flask中的異常處理語句,功能相似於python中raise語句,只要觸發abort,後面的代碼不會執行,abort只能拋出符合http協議的異常狀態碼。html
from werkzeug.exceptions import abortpython
@app.route('/abort')
def view_abort():
abort(405)
return 'abort test from main route'flask
errorhandler 裝飾器是配合abort函數使用的,是爲了進一步提高用戶體驗,他接收的是abort函數拋出的異常狀態碼,自定義錯誤頁面和信息。api
@app.route('/abort')
def view_abort():
abort(405)
return 'abort test from main route'
@app.errorhandler(405)
def err_404(e):
return '錯誤404' + str(e)app
錯誤處理有兩種:非全局與全局函數
若是使用藍圖,則下面這種是非全局的。不使用藍圖的狀況下則結果沒有區別。htm
@blue_t.errorhandler(405)
def err_405(e):
print('err_405')
return 'error 405 from blueprint blue_t'io
app_errorhandler()是全局的test
@blue_t.app_errorhandler(405)
def err_404(e):
return 'blueprint error_405'
#return render_template('error/404.html')import
當咱們不是使用的工廠模式建立app時,app.errorhandler(401),便可捕捉全局401狀態;若使用了create_app方式建立app,則沒法進行捕捉,若想捕捉,能夠在藍圖中寫,如admin.errorhandler(401),即捕捉admin藍圖下全部401狀態碼,admin.app_errorhandler(401),則是捕捉的全局的401狀態碼,即其餘藍圖中的401狀態,也會被捕捉,進行處理
注意:後執行的handler會覆蓋掉先聲明的handler。
示例:
app.py
@app.errorhandler(405)
def err_404(e):
print('main:err_404')
return '錯誤404' + str(e)
藍圖中聲明
@blue_t.app_errorhandler(405)
def err_404(e):
return 'blueprint error_405'
#return render_template('error/404.html')
訪問/abort會跳轉到藍圖中的errorhandler。
藍圖中的異常處理使用@blueprint.errorhandler()
頂層app中的異常處理集中到函數中而後調用。
# 異常處理
def register_errors(app):
@app.errorhandler(405)
def method_not_allowed(e):
return api_abort(405, message='The method is not allowed for the requested URL.')