本文所提供的示例代码以及对应的数据材料, 已经全部上传到我个人的仓库里面去了。1 简介这是关于我的全新系列教程, 也就是第一个阶段, 专门针对用 Dash 来开发快速 Web 应用。大家都明白要学一个新工具, 心里得有个动机。因此我在思考, 为什么我要专门为 Dash 这个工具策划并推出整个系列的教程呢?图1Dash是一个高效且简洁的框架, 它是建立在Flask、.js以及React.js的基础之上的。在设计之初, 其目的就是为了让那些前端知识匮乏的数据分析人员能够以纯编程的方式, 快速开发出交互式的数据可视化web应用。Dash已经经历了数年的迭代和发展, 早一点的Dash我也是体验过的, 不过那时候的版本还算是比较简陋的, 里头有许多问题都是亟待去解决的, 所以当时并没有引起我多大的注意。虽然近一两年的时间内得到了高速发展并且积极进行了更新迭代, 但是目前阶段的Dash框架已经变得相当成熟, 其功能丰富到了不仅仅能够用来开发在线数据可视化作品的程度, 即使是像轻量级的数据仪表盘、BI应用这类场景, 又或者是搭建文档说明、博客以及常规的网站这些需求, 都完全能够驾驭得住, 如果配合丰富的第三方拓展插件的话, 只要你懂得使用相关的技术, 就可以开发出非常精美且正规的web应用程序。图2至于Dash这个东西, 真正拿得出手的中文教程简直寥寥无几事实上对应的英文资料也不是特别丰富, 那些现存的资源大多只是在干巴巴地复述官方的说明文档。鉴于之前我曾写出过一份反响还不错的写作指南, 所以这一次我决定亲自动手为大家梳理出一套能够看得下去的系列教程内容。接下来我们就可以正式开启属于我们的Dash探索之旅了。2 Dash中的基础概念在刚开始学习Dash这个技术的时候, 我们肯定需要先对Dash里面的几个基础观念大概弄明白。接着呢, 我们先从头到尾来把Dash的环境给搭起来。考虑到大家主要是做数据分析和处理工作的, 所以我这边推荐用conda这个东西来进行环境管理。只要参考下面列出来的那几条命令, 基本上就可以把环境初始化搞定:conda create -n dash-dev python3.7 -yconda activate dash-devpip install dash -U等上述代码执行完毕以后, 你就已经把运行Dash所必需的最基础环境给创建好了, 你可以编写一个有着下面这些内容的 py 脚本来直接进行执行, 同时我们比较推荐大家使用某些特定的开发工具来专门用于进行 Dash 的开发工作。app1.pyimport dashimport dash_html_components as htmlapp dash.Dash(__name__)app.layout html.H1(第一个Dash应用)if __name__ __main__:app.run_server()运行那个脚本之后, 如果一切都没问题的话, 根据提示去点击对应的网址, 就能看到下面的内容了:图3现在为止, 我们的Dash环境已经搭建好了, 接着我们要了解一下关于Dash应用中的一些基本基础知识要点。2.第一步, 通过设计页面来完成内容的输入操作。对于一个web应用来说, 其前端所展示的页面内容, 是非常关键的一个因素。在Dash这里, 我们通过对一些属性进行定义, 这样一来, 我们就可以非常自由地去进行页面内容的设计工作。在之前那个叫做app1.py的文件里面, 我们把app设定成了html.H1这样的形式, 具体的内容是‘第一个Dash应用’这一串字符。这里的html就是咱们在最开始部分进行导入的那个模块, 它其实就是dash这个框架自带的一个依赖库。它的存在主要是为了能够在Dash应用开发的過程中, 方便地定义那些常见的html元素。这就好比说前面用过的H1, 它就会对应一级标题的意思, 也就是我们所说的html标签。对于每一个html标签函数而言, 它第一个参数的功能是代表该标签内部的内容。这个内容可以是简单的字符串, 例如之前提到的第一个Dash应用。当然, 你也可以传入多个元素的列表, 或者进行多层嵌套操作。这种方式可以用来构建结构更为复杂的页面内容。具体的实现方法, 可以参考下方的例子。app2.pyimport dashimport dash_html_components as htmlapp dash.Dash(__name__)app.layout html.Div([html.H1(标题1),html.H1(标题2),html.P([测试, html.Br(), 测试]),html.Table(html.Tr([html.Td(第一列),html.Td(第二列)]))])if __name__ __main__:app.run_server()图4除了那些平常大家都会用的html元素以外, Dash这个工具还把自己的官方依赖库里面装好了不少网上经常能看到的小部件, 这些东西都是咱们做交互功能时要靠的重要宝贝。就像接下来你要看到的这个例子一样, 我们借助它的那个零部件, 弄出了一个让大家可以用鼠标点一下就能选东西的下拉选择框。app3.pyimport dashimport dash_html_components as htmlimport dash_core_components as dccapp dash.Dash(__name__)app.layout html.Div([html.H1(下拉选择),html.Br(),dcc.Dropdown(options[{label: 选项一, value: 1},{label: 选项二, value: 2},{label: 选项三, value: 3}])])if __name__ __main__:app.run_server()图5Dash既然“师出同门”, 自然已经相互打通。我们同样可以非常轻松的在网页中插入数据可视化的内容。这里我们使用到., 它简化了诸多图表的创建过程。将创建好的图表对象作为参数传入dcc.Graph()中即可:app4.pyimport dashimport dash_html_components as htmlimport dash_core_components as dccimport plotly.express as pxapp dash.Dash(__name__)fig px.scatter(xrange(10), yrange(10))app.layout html.Div([html.H1(嵌入plotly图表),dcc.Graph(figurefig)])if __name__ __main__:app.run_server()图6除了前面提到的那些官方的Dash依赖库之外, 市面上还有数量非常多、非常优秀的第三方库, 这些库能够切实地帮助我们迅速搭建起视觉效果极其出色的前端内容部分。至于这部分内容的具体且详细的介绍情况, 我计划在接下来的本系列文章里面, 采取分主题的方式来进行逐一深入的讲解和说明, 请大家记得持续关注并表示期待。2.2 用实现交互Dash有一个很大的优势就是它对React.js做了高度封装, 这让我们能够不去写js代码就能完成前端跟后端之间的异步通信工作, 想要达到这个目的的话, 得用上里面的Input组件, 并且还得搭配自定义回调函数一起来把需要的交互效果给实现出来。举一个非常简单的例子, 说明一下: 我们设计了一个网络页面, 在该页面中设置有一个下拉选项组件, 当我们通过下拉菜单的方式选取到某个特定省份所对应的选项值的时候, 系统会在下方位置展示出与该省会城市相关联的内容, 也就是打印出对应的省会城市信息:app5.pyimport dashimport dash_html_components as htmlimport dash_core_components as dccfrom dash.dependencies import Input, Outputapp dash.Dash(__name__)app.layout html.Div([html.H1(根据省名查询省会城市),html.Br(),dcc.Dropdown(idprovince,options[{label: 四川省, value: 四川省},{label: 陕西省, value: 陕西省},{label: 广东省, value: 广东省}],value四川省),html.P(idcity)])province2city_dict {四川省: 成都市,陕西省: 西安市,广东省: 广州市}app.callback(Output(city, children),Input(province, value))def province2city(province):return province2city_dict[province]if __name__ __main__:app.run_server()图7当你在进行这些交互性的操作, 并且去查看后台的情况时你会发现, 每一次你点击选择动作的过程里, 都有和后台系统进行异步通信的行为发生。而我们的整个应用程序所在的页面区域是完全不会发生刷新这个情况的。如果不使用这个叫做Dash的技术工具的话, 你就必须要自己去编写那些对应的语言的代码语句, 这整个过程就会显得比较麻烦并且繁琐。图8现在, Dash这个工具已经能够支持那种多输入和多输出在一起使用的回调函数的写法了。它还能够做到阻止首次启动的时候触发回调, 也可以基于表单提交之后的状态来确定如何执行回调操作。从理论上来讲, 你可以设计出任何一种形式出现的页面交互行为, 而这些方面具体的操作方法, 我们在以后的系列文章中会把所有细节都教给大家。2.第三, 对图表里的交互式选择行为进行监听。Dash和它之间的高耦合程度, 还表现在它能够去监听那些针对图表所发生的悬浮动作、选择动作以及框选动作这些具体的行为表现, 这一特点被广泛应用于各种常规类型的图表里面, 还有地图类型的数据展示当中, 这一点呢, 凡是稍微了解一些相关知识点的朋友应该都是心知肚明的, 正是因为利用了这样的一种特性, 所以我们才可以去构建出具有非常强大交互能力的web应用程序, 就像我在下面所展示的这个典型的实际案例那样。app6.pyimport dashimport dash_core_components as dccimport dash_html_components as htmlfrom dash.dependencies import Input, Outputimport plotly.express as pxapp dash.Dash(__name__)fig px.scatter(xrange(10), yrange(10), height400)fig.update_layout(clickmodeeventselect) # 设置点击模式app.layout html.Div([dcc.Graph(figurefig, idscatter),html.Hr(),html.Div([悬浮事件,html.P(idhover)]),html.Hr(),html.Div([点击事件,html.P(idclick)]),html.Hr(),html.Div([选择事件,html.P(idselect)]),html.Hr(),html.Div([框选事件,html.P(idzoom)])])# 多对多的回调函数app.callback([Output(hover, children),Output(click, children),Output(select, children),Output(zoom, children),],[Input(scatter, hoverData),Input(scatter, clickData),Input(scatter, selectedData),Input(scatter, relayoutData)])def listen_to_hover(hoverData, clickData, selectedData, relayoutData):return str(hoverData), str(clickData), str(selectedData), str(relayoutData)if __name__ __main__:app.run_server()可以看到, 我们对悬浮、点击、选择以及框选这四种行为进行了监听, 并且得到了这些行为对应传回的特征数据:图9至于这一部分的具体内容呢, 我是打算在接下来的一系列文章里展开非常详尽且充分的讲解的。我们即将开启的系列文章, 将会紧挨着上面说的基础概念。还会细致地把那些还没提到过的关键内容讲清楚, 内容包括多页面应用。还要讲外部 css 和 js 是怎么引入的。也要讲 Dash 应用如何进行部署和发布。这么做是为了帮广大读者朋友用起来最少的前端知识。好让你们能创造出水平很高的 web 应用。这样可以让大家平时的日常工作、学习还有生活各方面都变得更顺当一些。请等着看我们的后续文章, 不要走开
企业数字化 ERP 产品动态
相关推荐
深度解析 AgentScope:蚂蚁开源的多智能体应用开发框架 1. 引言 TL;DR:AgentScope 是蚂蚁集团开源的生产级多智能体编排框架,核心优势在于内置分布式运行时、消息级可观测性与 Replay 调试工具。本文将从设计理念、核心架构、关键特性、代码实践与生态对比五个维度展开深度剖析。适合需要多智能体协作且重视调… · 2026/9/27 23:19:40
汽车电子环境可靠性测试七层递进式验证方法 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 23:19:28
3类建站方案对比评测:网站开发费用做账避坑指南 3类建站方案对比评测:网站开发费用做账避坑指南 上周深夜,我接到广东一位做跨境电商的客户电话,声音很急。他的独立站突然被黑,首页挂满了非法博彩广告,不仅损失了数万美金营收,更麻烦的是,因为服务器日志混乱,财务在核算上季度成本时,无法区分哪些… · 2026/9/27 23:19:28
不懂代码做外贸资源网?5步完整流程搞定SEO排名 不懂代码做外贸资源网?5步完整流程搞定SEO排名 自己不会代码想做网站,特别是想搭建一个能带来询盘的外贸资源网,很多人第一反应是“算了吧,太难了”。其实真没那么玄乎。我见过太多老板,不懂一行Python,照样把站点做到Google前三页。关… · 2026/9/28 0:23:20
手机建站平台微点被黑?一文搞懂安全自救指南 手机建站平台微点被黑?一文搞懂安全自救指南 网站突然弹窗、页面变黄、后台进不去,这种“网站被黑挂马不知道怎么办”的噩梦,很多用 手机建站平台微点… · 2026/9/28 0:23:14
做a暧小视频在线观看网站从零搭建 做a暧小视频在线观看网站一文搞懂 改个需求建站公司拖一周,这种憋屈事谁没遇过?明明只是换个视频封面或者调整下播放进度条,对方却以“排期满了”为由晾你五天。别急着骂人,很多时候不是他们懒,而是你根本不懂这套东西背后的技术门槛和合规红线。今天这… · 2026/9/28 0:23:08
3个实战案例解决wordpress顶部图标不清晰 3个实战案例解决wordpress顶部图标不清晰 改个需求建站公司拖一周,这种憋屈谁没经历过?上周有个江苏的创业团队负责人找我吐槽,说网站顶部的Logo和菜单图标在高清屏上看着像糊了,找原来的外包团队修,对方报价2000块还要等一周。这钱花… · 2026/9/28 0:22:43
qq业务代理网站建设从零搭建避坑指南 qq业务代理网站建设从零搭建避坑指南 改个按钮颜色,建站公司拖你一周?别闹了,这行水太深。很多做QQ业务代理的朋友,手里握着几百万用户数据,结果网站卡得跟2G网似的,或者改个需求还得求着外包团队。今天咱不整虚的,聊聊 qq业务代理网站建设… · 2026/9/28 0:21:30
网站开发引发的官司复盘图解步骤避坑指南 网站开发引发的官司复盘图解步骤避坑指南 ICP备案流程一头雾水,导致网站上线延期三个月,进而引发合同纠纷索赔,这是去年我接手的一个典型烂摊子。很多甲方觉得建站就是写代码,殊不知合规与部署细节才是雷区。今天不聊虚的,直接拆解这个【网站开发引发… · 2026/9/28 0:20:29
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25