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

  大家好我是费老师,不久前Dash发布了其2.17.0版本,执行下面的命令进行最新版本Dash的安装:

pip install dash -U

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

1 回调函数允许无Output目标

  在之前版本的Dash中定义回调函数,基本准则之一就是回调函数中必须要编排Output目标,否则在debug模式下访问应用会有下图所示的提示信息:

  而从2.17版本开始,允许定义无Output角色的回调函数,这在诸如日志搜集等不一定需要Output的场景下很受用,简单的示例如下:

app1.py

import dash
from dash import html
import feffery_antd_components as fac
from dash.dependencies import Input app = dash.Dash(__name__) app.layout = html.Div(
[fac.AntdButton("示例按钮", id="demo-button", type="primary")],
style={"padding": 50},
) @app.callback(Input("demo-button", "nClicks"))
def no_output_callback(nClicks):
print(f"nClicks: {nClicks}") if __name__ == "__main__":
app.run(debug=True)

2 后端回调函数新增set_props()方法

  在Dash的上一个版本(2.16)中,为浏览器端回调新增了set_props()方法,使得我们可以在浏览器端自由灵活的更新指定组件的属性值。

  而从2.17版本开始,等价的set_props()方法亦可在后端回调函数中使用,其第一个参数component_id用于定义目标组件id,第二个参数props接受字典型输入,用于以键值对的形式更新单个或多个属性值,配合回调函数无需Output的新特性,可以实现很多灵活自由的功能逻辑。

  值得注意的事,set_props()在常规回调函数和background回调函数中具有不同的更新时机:

  • 常规回调函数中使用set_props()

  对于常规回调函数,在函数体内部执行的若干次set_props(),将会在每次回调函数执行完成后统一同时反馈更新到前端,下面是一个简单的例子:

app2.py

import dash
from dash import html, set_props
import feffery_antd_components as fac
from dash.dependencies import Input app = dash.Dash(__name__) app.layout = html.Div(
[
fac.AntdButton("翻转颜色", id="reverse-color", type="primary"),
fac.AntdRow(
[
fac.AntdCol(id="left-block", span=12, style={"background": "white"}),
fac.AntdCol(id="right-block", span=12, style={"background": "black"}),
],
style={"height": 500},
),
],
style={"padding": 50},
) @app.callback(Input("reverse-color", "nClicks"))
def reverse_color(nClicks):
if nClicks % 2 == 0:
set_props("left-block", {"style": {"background": "white"}})
set_props("right-block", {"style": {"background": "black"}}) else:
set_props("left-block", {"style": {"background": "black"}})
set_props("right-block", {"style": {"background": "white"}}) if __name__ == "__main__":
app.run(debug=True)
  • background回调函数中使用set_props()

  与常规回调函数不同,在background回调函数运行的过程中执行的set_props(),会即时的反馈更新到前端中:

app3.py

import dash
import time
import diskcache
import feffery_antd_components as fac
from dash.dependencies import Input
from dash import html, set_props, DiskcacheManager cache = diskcache.Cache("./cache")
background_callback_manager = DiskcacheManager(cache) app = dash.Dash(__name__, background_callback_manager=background_callback_manager) app.layout = html.Div(
[
fac.AntdButton(
"执行任务",
id="execute-task",
type="primary",
autoSpin=True,
loadingChildren="执行中",
),
fac.AntdFormItem(
fac.AntdProgress(id="task-progress", percent=0, style={"width": 300}),
label="任务进度",
),
],
style={"padding": 50},
) @app.callback(Input("execute-task", "nClicks"), background=True, interval=500)
def execute_task(nClicks):
for i in range(1, 6):
set_props("task-progress", {"percent": i * 20})
time.sleep(1) set_props("execute-task", {"loading": False}) if __name__ == "__main__":
app.run(debug=True)

3 background回调功能增强

  从2.17版本开始,针对background回调函数中的runningprogresscancel目标,新增了对字典型id格式的支持,具体的功能使用我将在后续专门针对background回调函数的文章中做详细介绍,本文不多赘述。

4 新增自定义服务接口快捷注册功能

  新版本中额外增加了add_startup_route()方法,其第一个参数name用于设置对应接口的路由地址,第二个参数view_func用于传入对应的视图函数,第三个参数methods以列表形式传入对应的http请求方法类型(取值在'GET''POST'中),直接来看一个简单的例子,下图展示的,就是我们快捷注册到Dash应用中的额外自定义服务接口,其自动被添加上/_dash_startup_route前缀:

app4.py

import dash
import time
from dash import html def demo_api():
return {"now": time.time()} # 在Dash对象实例化前添加自定义接口
dash.Dash.add_startup_route("demo-api", demo_api, ["GET"]) app = dash.Dash(__name__) app.layout = html.Div("测试") if __name__ == "__main__":
app.run(debug=True)

5 layout可接受列表型输入

  在过往版本的Dash中,app.layout只接受单个组件,或返回单个组件的函数,从2.17版本开始,直接赋值由组件构成的列表也被允许,譬如:

app.layout = [html.Div("测试")]

  完整的更新内容说明请移步https://github.com/plotly/dash/releases/tag/v2.17.0


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

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

  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. webpack 4.0.0-beta.0 新特性介绍

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

  5. C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系

    C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...

  6. JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

    上一篇:Java 15 正式发布, 14 个新特性 JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. ...

  7. dubbox新特性介绍

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

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

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

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

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

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

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

随机推荐

  1. 测试开发之前端篇-CSS层叠式样式表

    CSS是层叠样式表(Cascading Style Sheets)的缩写,用于描述如何在屏幕.纸张或其他媒体上显示HTML元素,包括了定义网页及其元素的布局.风格.大小.位置和颜色等属性. CSS的语 ...

  2. 20 JavaScript和HTML交互

    20 JavaScript和HTML交互 在HTML中可以直接在标签上给出一些事件的触发. 例如, 页面上的一个按钮. <input type="button" value= ...

  3. 一文弄懂java中的Queue家族

    目录 简介 Queue接口 Queue的分类 BlockingQueue Deque TransferQueue 总结 java中Queue家族简介 简介 java中Collection集合有三大家族 ...

  4. 使用pillow制作长图

    这是来自一个妹子的需求,需要将多张图片拼接成一张长图 我是使用pillow这个库来实现的,下面的简单的代码,操作比较简单,代码还有优化的空间 def test(dirpath): ims = [Ima ...

  5. 多线程-多个子线程执行结果插入List集合

    业务场景:将多个子线程的执行结果存入List,但是总会出现List集合的长度小于子线程的执行数的情况 1.错误示例(多个线程同时操作同一个List对象,List是线程不安全) package unit ...

  6. HarmonyOS实现几种常见图片点击效果

    一. 样例介绍 HarmonyOS提供了常用的图片.图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果.点击切换状态.点击动画效果.点击切换动效. 相关 ...

  7. Leetcode-栈的压入弹出序列

    /* 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), push(3), ...

  8. sql 语句系列(计算的进阶)[八百章之第十六章]

    前言 介绍两个实用的sql查询语句. 1.计算平均数时候,去除最大值和最小值. 2.修改累计值. 计算平均数时候,去除最大值和最小值 sql server: select AVG(sal) from( ...

  9. android 关于插件包内的依赖版本不一致问题得解决

    前言 今天使用一个插件包的时候,依赖包冲突了,在此记录一下. 正文 在引用一个: debugImplementation 'com.squareup.leakcanary:leakcanary-and ...

  10. Vue3.0 框架搭建的后台管理模板

    一个Vue3.0框架搭建的后台管理模板 开源vue3.0版本基于vue3.x+ant-design-vue构建的免费开源admin项目,star高达8.4K+ 支持电脑端.手机.平板等平台 底层使用e ...