【Flask】abort和errorhandler、app_errorhandler进行请求中断及自定义异常处理

在Flask view函数中,如果需要中断request,可以使用abort(500)或者直接抛异常raise exception。当然我们还需要返回一个出错信息给前端,所以需要定制一下errorhandler。一般只需要两个handler即可,一个是404错误,一个是500一类的服务器端错误。当然也可以自定义错误。

一、abort中断请求

# 在flask中可以使用abort中断请求,触发请求对应的状态码
from flask import abort
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    abort(404) # 请求到此即中断,不会打印下面的语句,并返回HTTP状态码401
    print("NOK")

if __name__ == '__main__':
    app.run()

二、errorhandler捕捉当前app或蓝图的状态码,并进行自定制处理

bp是一个蓝图,发生404、500错误时,返回对应的404、500错误页面

from flask import render_template

from mytools.errors import bp


@bp.errorhandler(404)
def not_found_error(error):
    return render_template('errors/404.html')


@bp.errorhandler(500)
def internal_error(error):
    return render_template('errors/500.html')

三、app_errorhandler捕捉全局状态码,并进行自定制异常处理

使用errorhandler修饰器,那么只有本蓝图中的错误才会触发。如果想注册全局的错误处理程序,要用app_errorhandler。

from flask import render_template

from mytools.errors import bp


@bp.app_errorhandler(404)
def not_found_error(error):
    return render_template('errors/404.html')


@bp.app_errorhandler(500)
def internal_error(error):
    return render_template('errors/500.html')

四、补充说明

当我们不是使用的工厂模式创建app时,app.errorhandler(401),即可捕捉全局401状态;若使用了工厂模式create_app方式创建app,则无法进行捕捉,若想捕捉,可以在蓝图中写,如admin.errorhandler(401),即捕捉admin蓝图下所有401状态码,admin.app_errorhandler(401),则是捕捉的全局的401状态码,即其他蓝图中的401状态,也会被捕捉,进行处理。

你可能感兴趣的:(flask)