Python全栈应用开发利器Dash 3.x新版本介绍(2)
更多Dash应用开发干货知识、案例,欢迎关注“玩转Dash”微信公众号

大家好我是费老师,在上一期文章中,我们针对Python生态中强大且灵活的全栈应用开发框架Dash,介绍了其3.x新版本中的部分更新内容。
今天的文章中,我们继续介绍3.x新版本Dash中的更多更新内容,进一步提升使用Python+Dash进行全栈应用开发的效率~

1 Input、State回调角色编排新增allow_optional参数
我们都知道,在Dash中,回调函数是关联不同组件,实现各种灵活交互功能的关键。
但在编写一些较复杂回调函数逻辑时,部分同学对参与回调函数的部分组件渲染顺序控制不当,导致回调函数触发时,部分Input或State角色尚未渲染在页面中,这在debug模式下会在前端弹出以A nonexistent object was used in开头的错误提示。
譬如下面的例子,输入框2需要点击按钮后才会渲染在页面中,因此对应show_inputs()回调函数提前触发时,作为Input角色之一的输入框2并不存在,就会导致相关错误出现:
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__, suppress_callback_exceptions=True)
app.layout = html.Div(
[
fac.AntdSpace(
[
fac.AntdButton("渲染输入框2", id="render-input", type="primary"),
fac.AntdInput(id="input1", placeholder="输入框1"),
fac.Fragment(id="input2-container"),
fac.AntdText(id="inputs-content"),
]
)
],
style=style(padding=50),
)
@app.callback(
Output("input2-container", "children"),
Input("render-input", "nClicks"),
prevent_initial_call=True,
)
def render_input2(nClicks):
return fac.AntdInput(id="input2", placeholder="输入框2")
@app.callback(
Output("inputs-content", "children"),
Input("input1", "value"),
Input("input2", "value"),
)
def show_inputs(input1, input2):
return f"输入框1: {input1}, 输入框2: {input2}"
if __name__ == "__main__":
app.run(debug=True)

针对这个场景,3.x版本中为Input()和State()角色编排添加了allow_optional参数,当设置allow_optional=True时,对应的Input或State角色即使当前不存在,也不会报错终止回调逻辑,而是以空值作为缺省值:

作用效果如下:

妥善利用此项新特性,我们就可以更轻松地处理相关场景啦~
2 dash.Dash()新增assets_path_ignore参数
熟悉Dash应用开发的朋友应该知晓,对于应用项目默认的静态资源目录assets,其内部的所有.css、.js文件,都会在用户访问应用时全部自动加载并生效,譬如下面的简单例子,assets目录下demo_folder中额外定义的demo.js和demo.css均在应用中自动生效:


当我们既希望可以直接通过assets/开头的URL访问对应文件资源(譬如assets/demo_folder/demo.css),又不希望应用访问时部分静态资源自动被加载生效时,就可以使用到新版本中为dash.Dash()新增的参数assets_path_ignore,接受列表型输入,用于指定assets下哪些路径需要在自动加载机制中被忽略,譬如:

这样设置之后,对应目录下的相关静态资源就不会自动生效啦:

这一点在很多场景下非常实用,譬如离线形式部署Dash+three.js等,有相关Dash应用高级功能开发需求的朋友值得注意。
3 AntdConfigProvider性能大幅优化
熟悉fac组件库的朋友,可能对其中的参数配置组件AntdConfigProvider有所了解:

在3.0版本之前,由于Dash底层渲染机制的原因,导致被AntdConfigProvider组件所包裹的其他组件,在被交互时会额外产生大量多余的重绘渲染,当AntdConfigProvider内部组件众多,譬如直接将整个页面嵌套在AntdConfigProvider中实现主题切换、国际化切换等功能时,会感受到明显的操作卡顿,譬如下面的例子(对应Dash版本为2.18.2):
import dash
from dash import html
import feffery_antd_components as fac
from feffery_dash_utils.style_utils import style
app = dash.Dash(__name__)
app.layout = html.Div(
[
fac.AntdConfigProvider(
fac.AntdSpace(
[fac.AntdSwitch(checkedChildren="打开", unCheckedChildren="关闭")]
* 2000,
wrap=True,
)
)
],
style=style(padding=50),
)
if __name__ == "__main__":
app.run(debug=True)

同样的应用在3.x版本中,操作就变得非常丝滑~

基于这项性能上的重大提升,我们就可以在应用中更稳定地实现主题切换、国际化切换、批量禁用控制等功能~
篇幅有限,更多新版本Dash更新相关内容,接下来的数篇文章我们继续为大家盘点,敬请期待~
以上就是本文的全部内容,对Dash应用开发感兴趣的朋友,欢迎添加微信号CNFeffery,备注“dash学习”加入我们的技术交流群,一起成长一起进步。
Python全栈应用开发利器Dash 3.x新版本介绍(2)的更多相关文章
- 【Python全栈-后端开发】嵩天老师-Django
嵩天老师-Python云端系统开发入门教程(Django) 视频地址:https://www.bilibili.com/video/av19801429 课前知识储备: 一.课程介绍: 分久必合.合久 ...
- 【Python全栈-后端开发】Django入门基础
Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...
- 【Python全栈-后端开发】Django进阶2-Form表单
Django进阶2-Form表单 Django的Form主要具有一下几大功能: 生成HTML标签(可以保留上次输入内容) 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页 ...
- 读后笔记 -- Python 全栈测试开发 Chapter10:接口的设计与开发
10.1 Django 框架 1. 几个主流的框架: 1)适合初学者的接口框架:Django,Flask 2)针对底层定义:Twisted 3)实现高并发:Tornado 2. install // ...
- 【Python全栈-后端开发】Django进阶之Model操作复习
Django进阶之Model操作复习 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - ...
- 【Python全栈-后端开发】数据库进阶
数据库进阶 python关于mysql的API---pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install ...
- 读后笔记 -- Python 全栈测试开发 Chapter11:Python + Requests 实现接口测试
11.1 Requests 框架 11.1.1 requests 请求 1. reqeusts 库 安装 pip install requests 2. requests 库 GET 方法,参数通过 ...
- 读后笔记 -- Python 全栈测试开发 Chapter8:接口测试
8.1 接口测试 1. 市场分布 UI(web.app)自动化:10% 接口自动化:20% 单元测试:70% -- 测开 2. 接口类型: 1)结构划分:模块间(系统间)的接口称为内部接口:系统与第三 ...
- 【Python全栈-后端开发】Django进阶1-分页
Django[进阶篇-1 ]分页 分页 一.Django内置分页 from django.core.paginator import Paginator, EmptyPage, PageNotAnIn ...
- 【Python全栈-后端开发】Django入门基础-2
Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1 变量(使用双大括号来引用变量) {{var_name}} 2 标签(tag)的使用 ...
随机推荐
- 深入掌握FastAPI与OpenAPI规范的高级适配技巧
title: 深入掌握FastAPI与OpenAPI规范的高级适配技巧 date: 2025/03/30 01:16:11 updated: 2025/03/30 01:16:11 author: c ...
- java学习-5-核心类:字符串StringBuilder
对字符串进行拼接,用java标准库提供的可变对象:StringBuilder. StringBuilder sb = StringBuilder(1024); for (int i = 0;i < ...
- 【跟K8S学设计】Informer全分析-Reflector(上)
鉴于Informer架构及其处理逻辑蕴含了丰富的实战技术,本文将分为上下两章进行深入探讨. 上篇将专注于解析Informer中的Reflector组件,而下篇则会详尽分析Indexer模块.通过这种结 ...
- 使用open-feign进行远程服务调用
想要远程调用别的服务 1).引入open-feign包 2).编写一个接口,告诉SpringCloud这个接口是调用哪个远程的服务 a.声明接口的每一个方法都是调用哪个远程服务的那个请求 3).开启远 ...
- kettle介绍-Step之REST Client
REST Client介绍 REST 客户端转换步骤可以消费 RESTful 服务.RESTful 是一种网络应用程序的设计风格和开发方式,基于 HTTP,可以使用 XML 格式定义或 JSON 格式 ...
- 在win nginx下配置symfony3.4,并隐藏项目名称 .php入口
在win nginx下配置symfony3.4,并隐藏项目名称 .php入口 记录下 # power by www.php.cn #user nobody; worker_processes 1; ...
- Vue模板语法——文本插值、指令、缩写
Vue模板语法--文本插值.指令.缩写 插值 文本({{}}.v-text) 数据绑定最常见的形式就是使用"Mustache"语法 (双大括号) 的文本,双大括号会将数据解释为普通 ...
- 82.9K star!全平台AI助手神器,一键部署轻松搞定!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 项目介绍 轻量极速的AI对话平台,支持Web/iOS/Mac/Android多端运行,轻松接 ...
- 代码随想录第二十七天 | Leecode 455. 分发饼干、 376. 摆动序列、 53. 最大子数组和
Leecode 455. 分发饼干 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干. 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的 ...
- 【经验】博客|Windows下,一键安装和部署 hexo-admin 插件(Hexo 静态博客)
1. 在博客根目录下运行下列指令 npm install --save hexo-admin -y echo "hexo clean && hexo g -d"&g ...