烧瓶应用程序和蓝图的可自定义错误处理程序

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()

配置

  1. ERROR_PAGE(默认值:无)用于显示错误消息的HTML模板的路径
  2. ERROR_DEFAULT_MSG(默认:未处理的异常)未处理异常的默认消息
  3. ERROR_XHR_ENABLED(默认值:true)在请求为xhr的情况下启用或禁用api响应

许可证MIT

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit有没有办法在Java中重新初始化静态类?   在浏览器中点击应用程序时java Play框架挂起   文件Java错误中的NullPointerException   使用Java中的SNMP查找网络中计算机的登录名   java包装服务器引导程序已弃用,有什么替代方案?   当客户在等待理发时,java信号量值是否存在问题?   java如何使用JavaMail仅下载特定类型的附件   如何在java中将十进制转换为十六进制   java Slick2D粒子系统不会生成粒子   java检测更改事件来自何处   将Java集合类型参数类设置为数组   java如何从eclipse导出为可运行JAR文件?   java EntityManager对象未注入Glassfish和Spring   swing从actionPerformed和actionListener Java返回字符串   java在给定另一个等价键对象的情况下获取映射项的当前键   无论输入如何,java网络都会产生相同的输出