概念: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.')