更多Dash应用开发干货知识、案例,欢迎关注“玩转Dash”微信公众号

大家好我是费老师,在上一期文章中,我们针对Python生态中强大灵活全栈应用开发框架Dash,介绍了其3.x新版本中的部分更新内容。

今天的文章中,我们继续介绍3.x新版本Dash中的更多更新内容,进一步提升使用Python+Dash进行全栈应用开发的效率~

1 Input、State回调角色编排新增allow_optional参数

我们都知道,在Dash中,回调函数是关联不同组件,实现各种灵活交互功能的关键。

但在编写一些较复杂回调函数逻辑时,部分同学对参与回调函数的部分组件渲染顺序控制不当,导致回调函数触发时,部分InputState角色尚未渲染在页面中,这在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时,对应的InputState角色即使当前不存在,也不会报错终止回调逻辑,而是以空值作为缺省值

作用效果如下:

妥善利用此项新特性,我们就可以更轻松地处理相关场景啦~

2 dash.Dash()新增assets_path_ignore参数

熟悉Dash应用开发的朋友应该知晓,对于应用项目默认的静态资源目录assets,其内部的所有.css.js文件,都会在用户访问应用时全部自动加载并生效,譬如下面的简单例子,assets目录下demo_folder中额外定义的demo.jsdemo.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)的更多相关文章

  1. 【Python全栈-后端开发】嵩天老师-Django

    嵩天老师-Python云端系统开发入门教程(Django) 视频地址:https://www.bilibili.com/video/av19801429 课前知识储备: 一.课程介绍: 分久必合.合久 ...

  2. 【Python全栈-后端开发】Django入门基础

    Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...

  3. 【Python全栈-后端开发】Django进阶2-Form表单

    Django进阶2-Form表单 Django的Form主要具有一下几大功能: 生成HTML标签(可以保留上次输入内容) 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页 ...

  4. 读后笔记 -- Python 全栈测试开发 Chapter10:接口的设计与开发

    10.1 Django 框架 1. 几个主流的框架: 1)适合初学者的接口框架:Django,Flask 2)针对底层定义:Twisted 3)实现高并发:Tornado 2. install // ...

  5. 【Python全栈-后端开发】Django进阶之Model操作复习

    Django进阶之Model操作复习 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - ...

  6. 【Python全栈-后端开发】数据库进阶

    数据库进阶 python关于mysql的API---pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install ...

  7. 读后笔记 -- Python 全栈测试开发 Chapter11:Python + Requests 实现接口测试

    11.1 Requests 框架 11.1.1 requests 请求 1. reqeusts 库 安装 pip install requests 2. requests 库 GET 方法,参数通过 ...

  8. 读后笔记 -- Python 全栈测试开发 Chapter8:接口测试

    8.1 接口测试 1. 市场分布 UI(web.app)自动化:10% 接口自动化:20% 单元测试:70% -- 测开 2. 接口类型: 1)结构划分:模块间(系统间)的接口称为内部接口:系统与第三 ...

  9. 【Python全栈-后端开发】Django进阶1-分页

    Django[进阶篇-1 ]分页 分页 一.Django内置分页 from django.core.paginator import Paginator, EmptyPage, PageNotAnIn ...

  10. 【Python全栈-后端开发】Django入门基础-2

    Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1  变量(使用双大括号来引用变量) {{var_name}} 2  标签(tag)的使用 ...

随机推荐

  1. Docker部署RocketMQ(JDK11)

    说起微服务,不谈容器,不谈云,那还谈个啥?容器中又以Docker最为流行,那么我们今天就来实践下容器化微服务,然后顺带解决下各种疑难杂症. 环境: Idea2019.03/Gradle6.0.1/JD ...

  2. 一个用原生JavaScript实现的日历小工具,开箱即用

    ---------------- 用原生JavaScript实现的一个日历小工具,开箱即用,可用于做签到记录.日程等显示控件,具体自己发挥啦 效果如下图,可以自行美化  >>点击体验< ...

  3. Linux各种服务配置开机自启

    一.Linux配置redis开机自启 (1)到redis配置文件中找到conf文件:vi redis.conf (2)daemonize no 修改为:daemonize yes (3)cd /etc ...

  4. [开源] .Net 使用 ORM 访问 人大金仓数据库

    前言 京人大金仓信息技术股份有限公司(以下简称"人大金仓")是具有自主知识产权的国产数据管理软件与服务提供商.人大金仓由中国人民大学一批最早在国内开展数据库教学.科研.开发的专家于 ...

  5. 【HUST】网安|编译原理实验|实验四攻略

    [实验代码及报告地址:Gitee传送门](已关闭传送大门,原因是抄袭过多,如需参考,请直接看博客,虽然下一届内容会变了) 不擅长写报告昂,很多地方能省全省了. 助力来年编译原理加大难度!(hhh) M ...

  6. Vue3 组件通信方式小结

    也是零零散散用 vue3 来搞一些前端的页面, 每次在组件通信, 主要是传数据这块总是忘记, 大多无非父传子, 子传父等情况, 这里再来做一个小结. 父传子 Props 最常见的就是父组件给子组件传递 ...

  7. AI 狂飙时代,开源项目的新机遇?

    我每天都会刷 GitHub 热榜,围观全球开发者们都在捣鼓啥新鲜的玩意儿.我真切地感受到 AI 的浪潮汹涌而至,它正以一种摧枯拉朽(这个词可能有点猛,但感觉就是这么快!)的速度,改变着软件开发行业,同 ...

  8. 0x01 - 我的第一个 Object Visitor

    我的第一个 Object Visitor 预演准备 为了顺利的进行测试,你需要确保本地已经安装了以下这些必备的软件: dotnet 2.1 或者以上版本的 SDK,我们更建议直接安装 dotnet 5 ...

  9. TVM:TensorIR

    TensorIR是一种用于深度学习的特定领域语言,主要有两个目的. 在各种硬件后端进行程序变换和优化的实现 用于自动张量化程序优化的抽象 import tvm from tvm.script.pars ...

  10. Number of Digit One——LeetCode⑩

    //原题链接https://leetcode.com/problems/number-of-digit-one/ 题目描述 Given an integer n, count the total nu ...