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

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

  大家好我是费老师,上周Dash发布了2.18.0新版本,并于今天发布了可稳定使用的2.18.1版本(自古.1版本最稳),今天的文章中就将针对2.18.1稳定版本中已修复的问题及调整的内容做简要介绍。

  终端执行下列命令将Dash升级到最新版本:

pip install dash -U

1 修复了回调返回单个no_update进行批量控制不生效的问题

  在2.18.0之前的版本中,针对编排了多个Output角色的回调函数,若我们希望在某些条件分支下,取消本次回调触发对所有Output角色的更新,常用的方式是直接return dash.no_update,这里的单个dash.no_update就可以直接快捷概括对所有Output的不更新。

  举个简单的例子,我们通过按钮的点击来触发3个不同目标内容的更新,且当点击次数为偶数时取消更新,在之前的2.18.0版本中,这个快捷写法会触发下图所示错误:

  2.18.1版本中则对此问题进行了修复,可以看到功能正常了,即只有点击次数为奇数时才更新内容:

本例子完整代码:

app1.py

import dash
from dash import html
import feffery_antd_components as fac
from dash.dependencies import Input, Output
from feffery_dash_utils.style_utils import style app = dash.Dash(__name__) app.layout = html.Div(
[
fac.AntdSpace(
[
f"Dash版本: {dash.__version__}",
fac.AntdButton("点我试试", id="demo-button", type="primary"),
fac.AntdText(id="demo-output1"),
fac.AntdText(id="demo-output2"),
fac.AntdText(id="demo-output3"),
],
direction="vertical",
align="center",
)
],
style=style(padding=50),
) @app.callback(
[Output(f"demo-output{i}", "children") for i in range(1, 4)],
Input("demo-button", "nClicks"),
prevent_initial_call=True,
)
def demo_callback(nClicks):
# 仅在nClicks为奇数时触发
if nClicks % 2 == 1:
return (
f"nClicks: {nClicks}",
f"nClicks x 2: {nClicks*2}",
f"nClicks x 3: {nClicks*3}",
) # 不更新任何内容
return dash.no_update if __name__ == "__main__":
app.run(debug=True)

2 修复了全局/局部回调函数错误处理机制+字典化角色编排时的异常

  Dash 2.18版本新特性介绍一文中我们介绍了Dash2.18.0开始新增的全局/局部回调错误处理机制,但此特性在结合回调函数字典化角色编排时,会功能异常,譬如我们将上面例子中的回调函数改造为字典化编排的形式:

# 这里on_error简单写个匿名函数示意
app = dash.Dash(__name__, on_error=lambda e: print(e)) ... @app.callback(
output=dict(
demo_output1=Output("demo-output1", "children"),
demo_output2=Output("demo-output2", "children"),
demo_output3=Output("demo-output3", "children"),
),
inputs=dict(nClicks=Input("demo-button", "nClicks")),
prevent_initial_call=True,
)
def demo_callback(nClicks):
# 仅在nClicks为奇数时触发
if nClicks % 2 == 1:
return dict(
demo_output1=f"nClicks: {nClicks}",
demo_output2=f"nClicks x 2: {nClicks*2}",
demo_output3=f"nClicks x 3: {nClicks*3}",
) # 故意触发错误
raise Exception("自定义错误")

  在之前的2.18.0版本中,错误处理遇上字典化角色编排就会出现多余的错误:

  而在2.18.1中,此问题得到了有效修复,可以看到,示例中正常捕获到了错误:

3 开始弃用旧的run_server()方法

  Dash早期启动应用的方式为app.run_server(),后面新增了更推荐的app.run()方式。而从2.18.1版本开始,正式将app.run_server()标记为废弃方法,并将在未来的Dash3.0版本中正式移除此方法,大家统一换成app.run()即可。

  除此之外,此次版本更新中还对dash.Dash()中的pluginslong_callback_manager参数标记为废弃,完整的更新内容说明请移步https://github.com/plotly/dash/releases/tag/v2.18.1


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

Python网页应用开发神器Dash 2.18.1稳定版本来啦的更多相关文章

  1. python网页爬虫开发之三

    1.抓取目录页后用lxml进行页面解析,获取抓取列表 python3.6 urlparse模块变为urllib.parse 2.Python中有一个专门生成各类假数据的库:Faker 3.python ...

  2. python网页爬虫开发之一

    1.beautifulsoap4 和 scrapy解析和下载网页的代码区别 bs可以离线解释html文件,但是获取html文件是由用户的其他行为的定义的,比如urllib或者request : 而sc ...

  3. python网页爬虫开发之六-Selenium使用

    chromedriver禁用图片,禁用js,切换UA selenium 模拟chrome浏览器,此时就是一个真实的浏览器,一个浏览器该加载的该渲染的它都加载都渲染,所以爬取网页的速度很慢.如果可以不加 ...

  4. python网页爬虫开发之五-反爬

    1.头信息检查是否频繁相同 随机产生一个headers, #user_agent 集合 user_agent_list = [  'Mozilla/5.0 (Windows NT 6.1; WOW64 ...

  5. python网页爬虫开发之七-多线程爬虫示例01

    from urllib.request import quote import urllib.request from bs4 import BeautifulSoup import re impor ...

  6. python网页爬虫开发之四-串行爬虫代码示例

    实现功能:代理.限速.深度.反爬 import re import queue import urllib.parse import urllib.robotparser import time fr ...

  7. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

  8. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  9. python 全栈开发,Day45(html介绍和head标签,body标签中相关标签)

    一.html介绍 1.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构 ...

  10. 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂

    Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...

随机推荐

  1. Service Mesh Summit 回顾 | 轻舟服务网格的无侵入增强 Istio 经验

    在云原生社区近日主办的 Service Mesh Summit 2022 服务网格峰会上,网易数帆云原生技术专家方志恒分享了轻舟服务网格无侵入增强 Istio 的经验,本文据此次分享整理,介绍了对无侵 ...

  2. tp 模型hasOne、hasMany、belongsTo详解

    首先,这3个的大致中文意思:hasOne:有一个,加上主谓语应该是 ,A 有一个 BhasMany:有很多,A 有很多 BbelongsTo:属于, A 属于 B这里我们准备3张表来理解他们的关系:u ...

  3. ping和tcping的区别

    ping是简单的测试网络连接情况的小命令,但是ping无法直接ping端口.某些网站还防ping,tcping工具也是通过ping来测试但是他能看端口是否打开

  4. 在Windows系统中解决端口占用问题

    在Windows系统中,你可以通过以下步骤查询并结束占用8001端口的进程: 查询占用8001端口的进程: 打开命令提示符(CMD)或者PowerShell,并执行以下命令:   netstat -a ...

  5. Aug. 2024 杭二训练游记

    \(\text{前言}\) 我在 \(\text{Aug. 6th}\) 到 \(\text{Aug. 25th}\) 在杭州某知名中学集训,但是我亲爱的母亲却在一开始告诉我是 \(\text{Aug ...

  6. nacos一个奇怪的问题:找不到正确的应用名-环境.后缀名配置文件

    spring: profiles: active: dev application: name: system-api cloud: nacos: server-addr: 192.168.101.6 ...

  7. 【Dubbo】构建SpringBoot整合Dubbo的Demo

    参考乐字节的Dubbo教程 https://www.bilibili.com/video/BV19L4y1n7YE Zookeeper单机部署 (Windows) 因为项目需要,这里我自己学习就采用Z ...

  8. 【Tool】常用软件地址(装机备用)

    浏览器: 360极速 https://browser.360.cn/ee/ 谷歌 https://www.google.cn/chrome/ 社交通讯 微信 https://weixin.qq.com ...

  9. 为什么是Google创造了AlphaGo,而不是其他公司?

    相关: Artificial Intelligence | 60 Minutes Full Episodes 答案: Google一直在进行AI方向的探索: Google有足够的算力.

  10. 强化学习baseline论文—— rainbow算法中给出实验结果的54个atari2600游戏名称列表

    alien amidar assault asterix asteroids atlantis bank_heist battle_zone beam_rider berzerk bowling bo ...