烧瓶应用程序和蓝图的可自定义错误处理程序
Flask-ErrorsHandler的Python项目详细描述
为Flask应用程序和蓝图设置可自定义的默认错误处理程序。
您可以注册错误处理程序:
- 返回json的api,默认响应与api问题规范类似(参见https://tools.ietf.org/html/rfc7807)。 相反,您可以使用自己的响应实现作为参数传递给ErrorHandler类: 它必须是一个decorator,并且必须包含3个参数、一个dict响应、状态代码和dict头。
- 如果请求是xhr,则返回html页面或api响应的web
- 您可以为Blueprint或整个应用程序注册自定义处理程序
此模块还提供抽象的ErrorDispatcher类,以便将404或405错误分派到正确的蓝图 因为烧瓶蓝图没有url前缀(请参见https://github.com/pallets/flask/issues/1498)。
有两个具体的实现:
- SubdomainDispatcher:将错误分派给与特定子域的Blueprint关联的处理程序 (如果两个或多个蓝图具有相同的子域,则使用第一个匹配的蓝图处理程序)
- URLPrefixDispatcher:将错误分派给与具有特定url前缀的blueprint关联的处理程序。 如果2个蓝图注册在相同的url前缀下,则此操作将不起作用,例如: 在/prefix/blueprint下注册的blueprint a,在/prefix下注册的blueprint b,此调度程序执行处理程序 如果B在A之后注册,则在两种情况下都是B。
此外,还可以通过扩展ErrorDispatcher类并实现dispatch方法来创建自己的分派器。 只有最后注册的errordispatcher被执行。这是我找到的最好的解决方案,欢迎提出建议。
快速启动
使用pip:
安装flask_errors_handler。$ pip install Flask-ErrorsHandler
示例用法
fromflaskimportFlaskfromflaskimportabortfromflaskimportBlueprintfromflask_errors_handlerimportErrorHandlerapp=Flask(__name__)app.config['ERROR_PAGE']='error.html'error=ErrorHandler(app)custom=Blueprint('custom',__name__)web=Blueprint('web',__name__)error.api_register(app)error.web_register(web)@error.register(custom)deferror_handler(exc):returnstr(exc),500,{'Content-Type':'text/plain'}@app.route('/api')defindex():abort(500,'Error from app')@web.route('/web')defindex():abort(500,'Error from web blueprint')@custom.route('/custom')defindex():abort(500,'Error from custom blueprint')app.register_blueprint(web)app.run()
- 转到http://127.0.0.1:5000/api并将错误消息响应视为json
- 转到http://127.0.0.1:5000/web并将错误消息响应作为HTML页查看
- 转到http://127.0.0.1:5000/custom并将错误消息响应视为纯文本
配置
- ERROR_PAGE:(默认值:无)用于显示错误消息的HTML模板的路径
- ERROR_DEFAULT_MSG:(默认:未处理的异常)未处理异常的默认消息
- ERROR_XHR_ENABLED:(默认值:true)在请求为xhr的情况下启用或禁用api响应
许可证MIT