本文示例代码已上传至我的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. 巧用dblink 实现多进程并行查询

    概述 对于分区表的大数据统计分析,由于数据量巨大,往往需要采用并行.但是数据库并行的效率相比分进程分表统计还是有比较大的差距.本文通过巧用dblink,实现分进程分分区统计数据. 例子 kingbas ...

  2. 面试题,关于int类型转byte类型结果溢出

    1 package com.atguigu.chapter03 2 /* 3 byte:-128~127 4 128 : Int类型,占4个字节,32位 5 计算机中的整型数据都以补码的形式存储,正数 ...

  3. 5 HTML表单标签

    5 表单标签 表单主要是用来收集客户端提供的相关信息,提供了用户数据录入的方式,有多选.单选.单行文本.下拉列表等输入框,便于网站管理员收集用户的数据,是Web浏览器和Web服务器之间实现信息交流和数 ...

  4. OpenHarmony页面级UI状态存储:LocalStorage

      LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例.LocalStorage也可以在UIAbility内,页面间共享 ...

  5. BI小白收藏|一文告诉你什么是商务智能

    近年来,商务智能(BI)已成为继企业资源计划之后企业信息化建设的热点领域,在国内发展迅速.利用商务智能可以为企业整合集成现有的业务数据,在深度挖掘分析的基础上为管理决策者提供决策辅助,提高科学决策水平 ...

  6. Qt5自带的日志功能,将日志输出到文件

    #include "QtWidgetsApplication1.h" #include <QtWidgets/QApplication> #include <Qt ...

  7. HDC2021技术分论坛:鸿蒙智联设备开发,这五大法宝你应该拥有

    作者:zhaowenguang,dinglu, 华为高级工程师 Huawei LiteOS是轻量级的开源物联网操作系统.智能硬件使能平台,可广泛应用于智能家居.穿戴式.车联网.制造业等领域,使物联网终 ...

  8. 94个JS/eTS开源组件首发上新,肯定有你要用的一款!

    原文:https://mp.weixin.qq.com/s/6RdxNisTQoyPds811PNZKA,点击链接查看更多技术内容. 2021年的华为开发者大会(HDC2021)上,我们发布了新一代的 ...

  9. Thymeleaf SSTI模板注入分析

    环境搭建 先搭建一个SpringMVC项目,参考这篇文章,或者参考我以前的spring内存马分析那篇文章 https://blog.csdn.net/weixin_65287123/article/d ...

  10. JS isPrototypeOf 和hasOwnProperty 还有in的区别

    isPrototypeOf 和hasOwnProperty 的区别 isPrototypeOf 是判断原生链上是否有该对象. 1.isPrototypeOf isPrototypeOf是用来判断指定对 ...