本文示例代码已上传至我的Github仓库:https://github.com/CNFeffery/dash-master

Gitee同步仓库地址:https://gitee.com/cnfeffery/dash-master

  大家好我是费老师,几个小时前Dash发布了其2.18.0版本,执行下面的命令进行最新版本Dash的安装:

pip install dash -U

  2.18版本中新增了多项重要的新功能,使得我们在开发Dash应用功能时更加的得心应手,下面我们就来一起get其中的重点:

1 新增全局/局部回调函数错误处理机制

  从2.18版本开始,Dash新增了针对回调函数的全局/局部错误处理机制,使得我们可以通过自定义的错误处理函数,来更统一便捷的处理回调函数计算逻辑中抛出的错误。

1.1 全局错误处理

  针对全局错误处理,我们可以编写自定义函数,其第一个输入参数接收每次抛出的错误,接着将此函数赋值给dash.Dash()中的on_error参数即可。

  举个简单的例子(对应本文源码app1.py),下面的代码中我们定义了函数handle_global_error(),在其内部基于Dash中的服务端set_props(),将每次错误发生对应的错误触发来源错误信息fac全局提示的形式展示在网页中:

import dash
from dash import html, set_props
import feffery_antd_components as fac
from dash.dependencies import Input, Output
from feffery_dash_utils.style_utils import style def handle_global_error(e):
# 利用服务端set_props()将错误信息集中抛出
set_props(
"error-message",
{
"children": fac.AntdMessage(
content="触发id {},错误信息 {}".format(dash.ctx.triggered_id, e),
type="error",
)
},
) app = dash.Dash(__name__, on_error=handle_global_error)

  应用页面内容代码如下,我们定义了两组按钮及对应的输出目标:

app.layout = html.Div(
[
# 错误消息统一更新目标
fac.Fragment(id="error-message"),
fac.AntdSpace(
[
fac.AntdSpace(
[
fac.AntdButton("全局错误示例1", id="trigger-global-error1"),
fac.AntdText(id="trigger-global-error-output1"),
]
),
fac.AntdSpace(
[
fac.AntdButton("全局错误示例2", id="trigger-global-error2"),
fac.AntdText(id="trigger-global-error-output2"),
]
),
],
direction="vertical",
style=style(width="100%"),
),
],
style=style(padding=100),
)

  回调函数部分,我们则针对两组不同的“输入-输出”关系,分别在按钮累计点击次数nClicks偶数时,抛出不同的错误:

@app.callback(
Output("trigger-global-error-output1", "children"),
Input("trigger-global-error1", "nClicks"),
prevent_initial_call=True,
)
def global_error_demo1(nClicks):
"""示例回调函数1"""
if nClicks % 2 == 0:
# 触发示例错误
1 / 0 return f"nClicks: {nClicks}" @app.callback(
Output("trigger-global-error-output2", "children"),
Input("trigger-global-error2", "nClicks"),
prevent_initial_call=True,
)
def global_error_demo2(nClicks):
"""示例回调函数2"""
if nClicks % 2 == 0:
# 触发示例错误
raise Exception("这是一个自定义错误") return f"nClicks: {nClicks}"

  应用操作演示如下,可以看到所有的错误都被全局错误处理函数捕获并进行集中处理:

1.2 局部错误处理

  与上文中介绍的全局错误处理写法不同,当我们希望将自定义的错误处理函数专门作用于某个或某些回调函数时,可以在对应回调函数的app.callback()中将自定义函数赋值给同名的on_error参数,我们在前面示例的基础上进行改造(对应本文源码app2.py),额外定义了错误处理函数handle_local_error,并赋值给对应回调函数的on_error参数,对应代码片段如下:

def handle_local_error(e):
# 利用服务端set_props()将错误信息集中抛出
set_props(
"error-message",
{
"children": fac.AntdMessage(
content="异常发生,异常信息 {}".format(e),
type="error",
)
},
) @app.callback(
Output("trigger-global-error-output2", "children"),
Input("trigger-global-error2", "nClicks"),
on_error=handle_local_error,
prevent_initial_call=True,
)
def global_error_demo2(nClicks):
"""示例回调函数2"""
if nClicks % 2 == 0:
# 触发示例错误
raise Exception("这是一个自定义错误") return f"nClicks: {nClicks}"

  应用操作效果如下,可以看到通过设置on_error=handle_local_error,我们成功的改变了回调函数global_error_demo2的错误处理过程:

  大家可以在日常Dash应用开发的过程中,妥善使用这套机制,使得我们的应用功能更稳健~

2 浏览器端回调上下文补充outputs_list

  新版本为浏览器端回调函数中可以调用的上下文对象window.dash_clientside.callback_context补充了outputs_list属性,可以在一些特殊的场景下,在计算逻辑中取得此属性辅助计算。

  举个简单的例子,下面我们构造了10组开关输入框,每个开关的勾选可以控制对应输入框的禁用状态,且同时最多禁用3组,操作演示效果如下:

  具体回调逻辑见文章开头地址中的源码app3.py,借助上下文中的outputs_list,实现了更具针对性的高效回调更新。

  除此之外,还针对动态回调函数增加了动态依赖库加载等新特性,并修复了若干小问题,完整的更新内容说明请移步https://github.com/plotly/dash/releases/tag/v2.18.0


  以上就是本文的全部内容,对Dash应用开发感兴趣的朋友,欢迎添加微信号CNFeffery,备注“dash学习”加入我们的技术交流群,一起成长一起进步。

Dash 2.18版本新特性介绍的更多相关文章

  1. EOS1.1版本新特性介绍

    EOSIO/eos 目前在github的项目活跃度方面排名第一,release版本更新的速度让人应接不暇.今天EOS的大版本1.1发布,我也有幸参与了贡献,本篇文章重点介绍1.1版本的重大功能升级. ...

  2. xmake v2.1.5版本新特性介绍

    2.1.5版本现已进入收尾阶段,此版本加入了一大波新特性,目前正在进行稳定性测试和修复,在这里,先来介绍下新版本中引入了哪些新特性和改进. 1. 提供类似cmake的find_*系列接口,实现各种查找 ...

  3. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  4. 《转》MySQL 5.7版本新特性连载

    MySQL 5.7版本新特性连载(一) 本文将和大家一起分享下5.7的新特性,不过我们要先从即将被删除的特性以及建议不再使用的特性说起.根据这些情况,我们在新版本及以后的版本中,应该不再使用,避免未来 ...

  5. Atitit mac os 版本 新特性 attilax大总结

    Atitit mac os 版本 新特性 attilax大总结 1. Macos概述1 2. 早期2 2.1. Macintosh OS (系统 1.0)  1984年2 2.2. Mac OS 7. ...

  6. dubbox新特性介绍

    dubbx是当当网对原阿里dubbo2.x的升级,并且兼容原有的dubbox.其中升级了zookeeper和spring版本,并且支持restfull风格的远程调用. dubbox git地址:  h ...

  7. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  8. framework各版本新特性(为面试准备)

    菜鸟D估计描述这些新特性的文章都是烂大街的货色,之所以拿出来分(e)享(xin)一下,有两个原因:1.当年面试的时候有人问到,我不知道该怎么回答:2.项目需要发布了,但是考虑到framework的版本 ...

  9. Xcode9新特性介绍-中文篇

    背景: Xcode 9 新特性介绍: 1.官方原文介绍链接 2.Xcode9 be ta 2 官方下载链接 本文为官方介绍翻译而来,布局排版等都是按照官方布局来的. 与原文相比,排版上基本还是熟悉的配 ...

  10. webpack 4.0.0-beta.0 新特性介绍

    webpack 可以看做是模块打包机.它做的事情是:分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式 ...

随机推荐

  1. opc ua设备数据 转MQTT项目案例

    目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集OPC UA的数据 2 5 用MQTT协议转发数据 4 6 配置参数说明 4 7 上报内容配置 5 ...

  2. 构筑开放式大数据架构,Apache Kyuubi和NDH荣登开源OSCAR

    [点击了解更多网易大数据技术] 在9月16日召开的"2022 OSCAR开源产业大会"上,中国信息通信研究院发布了一系列开源研究成果和开源表彰,网易数帆发起的开源项目Apache ...

  3. Linux如何安装PHPMyAdmin

    1,我们要以root帐号登入 . 2,PHP支持模块安装.在CentOS操作系统安装完毕后,其实PHP支持模块并没有安装上去,如果想使用PhpMyAdmin,首先需要安装PHP支持模块,我们需要两个P ...

  4. 拯救SQL Server数据库事务日志文件损坏的终极大招

    拯救SQL Server数据库事务日志文件损坏的终极大招 在数据库的日常管理中,我们不可避免的会遇到服务器突然断电(没有进行电源冗余),服务器故障或者 SQL Server 服务突然停掉, 头大的是l ...

  5. Swift开发基础08-高阶函数

    高阶函数是指接受其它函数作为参数,或者返回其它函数的函数.Swift 提供了许多内置的高阶函数,这些函数在处理集合类型数据(如数组.集合等)时尤其有用.常见的高阶函数包括 map.filter.red ...

  6. TIER 1: Responder

    TIER 1: Responder Active Directory Active Directory(AD)是由微软开发的目录服务,用于在网络环境中管理和组织用户.计算机.应用程序和其他资源.它是 ...

  7. 题解:P10329 [UESTCPC 2024] Add

    Add 题意 将序列进行一系列的操作,输出对 \(a_{1}\) 的期望值. 题目中操作说的比较明了,再次就不特殊声明了. 思路 据题意所知,每一个 \(n\) 应该对应了一个固定的答案. 于是我就想 ...

  8. 《HelloGitHub》第 100 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...

  9. pytest-req插件:更简单的做接口测试

    pytest-req插件:更简单的做接口测试 背景 我们经常会用到 pytest 和 requests 进行接口自动化测试. pytest 提供了非常方便的插件开发能力,在pytest中使用reque ...

  10. Fiddler使用界面介绍-左侧会话面板

    左侧会话面板,是Fiddler抓取的请求数据展示