flask exception

 flask exception

 

1.1.    abort

概念: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

 

1.2.    errorhandler

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。

2.      總結

藍圖中的異常處理使用@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.')

相關文章
相關標籤/搜索