在 view 函数中, 如果需要中断 request, 可以使用 abort(500) 或者直接 raise exception. 当然我们还需要返回一个出错信息给前端, 所以需要定制一下 ErrorHandler. 一般只需要两个个 handler 即可, 一个是 404 错误, 一个是 500 一类的服务器端错误. 当然也可以自定义错误.
abort 中断请求
- # 在 flask 中可以通过 abort 中断触发请求对应的状态码
- from flask import abort
- @app.route('/')
- def index():
- abort(401) # 请求到此即中断, 不会打印下面的语句, 并返回 HTTP 状态码 401
- print '123'
errorhandler 捕捉当前 app 或蓝图的状态码, 并进行自定制处理
下面是一份示例代码, admin 是一个蓝本或者 app, 发生 404 错误或 500 错误, 会返回一个 Json 对象给请求段.
- from flask import jsonify
- from . import admin
- @admin.errorhandler(404)
- def error_404(error):
- """这个 handler 可以 catch 住所有 abort(404) 以及找不到对应 router 的处理请求"""
- response = dict(status=0, message="404 Not Found")
- return jsonify(response), 404
- @admin.errorhandler(Exception)
- def error_500(error):
- """这个 handler 可以 catch 住所有的 abort(500) 和 raise exeception."""
- response = dict(status=0, message="500 Error")
- return jsonify(response), 400
- class MyError(Exception):
- """自定义错误类"""
- pass
- @admin.errorhandler(MyError)
- def MyErrorHandle(error):
- response = dict(status=0, message="400 Error")
- return jsonify(response), 400
app_errorhandler 捕捉全局状态码, 并进行自定制异常处理
在蓝本中编写错误处理程序有点不同, 如果使用 errorhandler 修饰器, 那么只有蓝本中的错误才会触发. 如果想注册全局的错误处理程序, 要用 app_errorhandler.
例如:
- from . import auth
- @auth.app_errorhandler(404)
- def error_404(error):
- response = dict(status=0, message="404 Not Found")
- return jsonify(response), 404
补充说明
当我们不是使用的工厂模式创建 app 时, app.errorhandler(401), 即可捕捉全局 401 状态; 若使用了 create_app 方式创建 app, 则无法进行捕捉, 若想捕捉, 可以在蓝图中写, 如 admin.errorhandler(401), 即捕捉 admin 蓝图下所有 401 状态码, admin.app_errorhandler(401), 则是捕捉的全局的 401 状态码, 即其他蓝图中的 401 状态, 也会被捕捉, 进行处理
来源: https://www.cnblogs.com/huchong/p/9205651.html