Streamlit 多页面应用设计指南:构建模块化数据分析平台
创作时间:
作者:
@小白创作中心
Streamlit 多页面应用设计指南:构建模块化数据分析平台
引用
CSDN
1.
https://blog.csdn.net/weixin_42984235/article/details/140330029
在开发数据分析网页应用时,如何优雅地管理多个子应用并保持代码的可读性和维护性是一个常见挑战。Streamlit作为一款强大的Web应用框架,提供了灵活的解决方案,使得开发者能够构建多页面、模块化的应用。本文将详细介绍如何通过模块化设计来构建复杂的数据分析平台,包括具体的实现策略和代码示例。
困扰与需求
在制作数据分析网页的过程中,开发者常常会遇到以下困扰:
- 页面限制与逻辑关联:为了提高用户体验,需要将功能相关的部分组织在一起,形成逻辑清晰的多个页面。
- 代码管理难题:将所有功能塞入一个文件会导致代码冗长,降低开发效率和代码质量。
- IDE性能问题:大型文件在VSCode等编辑器中加载和代码分析时,可能会遭遇卡顿问题。
基于以上困扰,我们的目标是:
- 实现多应用展示:利用Streamlit构建具有多个界面的网页应用,每个界面专注于不同的数据分析任务。
- 子应用独立开发:确保每个子应用的代码逻辑清晰,独立于其他应用,便于开发和后续维护。
- 算法与框架分离:将算法实现和框架结构分开存储,以促进代码的复用和扩展性。
设计与实施策略
为了达成上述目标,可以采取以下设计策略:
模块化编码
- 建立子应用模块:为每个子应用创建独立的
.py
文件,如weather_city.py
和weather_country.py
,每个文件专注于一个特定的分析任务。 - 定义
app()
函数:在每个子应用模块中,定义一个app()
函数,该函数封装了整个子应用的逻辑流程和Streamlit界面元素。
构建页面路由
- 使用字典映射:创建一个字典
PAGES
,其键是页面名称,值是对应子应用模块的引用。 - 实现页面选择:在主应用文件中,使用Streamlit的
sidebar
和selectbox
组件,让用户选择要查看的页面。
分离算法与框架
- 算法与业务逻辑分离:将复杂的算法和数据处理逻辑封装在单独的模块或类中,与Streamlit的UI逻辑解耦。
- 框架结构清晰:保持主应用文件简洁,仅负责页面路由和基本的布局设置,具体功能实现在子应用模块中。
应用框架
框架包括一个主程序和很多子程序,子程序用__init__.py
作为一个包,让主程序能够很好地调用。
代码示例
main_weathers
主程序,这里用的下拉框来选择,也可以用radio方法。
import streamlit as st
from pages import weather_city, weather_country
# 创建一个字典来映射页面标题到页面函数
PAGES = {
"公共雨量站": weather_city,
"区内气象站": weather_country,
}
def main():
st.sidebar.title('导航')
selected_page = st.sidebar.selectbox("选择页面", list(PAGES.keys()))
# 根据用户选择的页面调用相应的函数
page = PAGES[selected_page]
page.app()
if __name__ == "__main__":
main()
weather_country
相当于page 1,注意子程序所在的pages文件夹需要有__init__.py
文件。
# pages/weather_country.py
import streamlit as st
def app():
st.title('区内气象站')
# 页面的具体内容
st.header('这是页面2的内容')
st.text('这是页面2的示例文本。')
st.checkbox('这是一个复选框')
if __name__ == "__main__":
app()
weather_city
相当于page 2
# pages/weather_city.py
import streamlit as st
def app():
st.title('公共雨量站')
# 页面的具体内容
st.header('这是页面1的内容')
st.text('这是一个示例文本,用于演示页面1的功能。')
st.button('点击我!')
if __name__ == "__main__":
app()
注意子程序所在的pages文件夹需要有__init__.py
文件,让所有的子程序被视为一个包,这样主程序才能import。该文件可以为空,也可以增加一些属性。示例如下。
"""
This is the package documentation string.
It describes what the package does and how to use it.
"""
__author__ = "Your Name"
__version__ = "1.0"
结果预览
运行结果如下。
结论
通过采用模块化的设计思路,我们可以有效地管理和扩展Streamlit应用,使其既能满足复杂的数据分析需求,又能保持代码的整洁与高效。这种策略不仅提升了开发体验,还为未来的功能迭代奠定了坚实的基础。
热门推荐
螃蟹养殖池水草栽植与养护技术要点
职场人的AI必修课,12个行动,助力职场提升!
2024年河南省五一假期文化旅游市场综述
揭秘“道生一,一生二,二生三和两仪、四象、八卦“”的物理含义
“道生一,一生二,二生三,三生万物”出自哪里?详解《道德经》中的宇宙生成论
三星调整策略:放弃激进竞争,专注提升芯片良率迎市场
如何退出合伙企业:协议退伙、通知退伙与法定退伙详解
有限合伙人退出合伙企业的法律指南
浙大团队揭秘饮食对肠道屏障的重要性,不吃早饭或让细胞对脂质“上瘾”
春季光景好,运动正当时!来看看这份春季锻炼的注意事项清单
关于进化论的十大误解,你中了几个?
物种进化论的真实证据与法律框架下的科学解读
百元预算迷你主机选购指南:N100 vs N5095
打鼾是什么?从症状到治疗的全面解析
范雎:战国时期的杰出政治家与军事谋略家
日本公共场所的吸烟规则:迈向更清洁的空气环境
日本作为“吸烟大国”,吸烟区随处可见,为何人均寿命还那么高?
三国时期最杰出的女性:谁堪称时代巾帼?
中国近代刺杀案件法律分析:从历史到现实的启示
暗杀背后的政治风暴:陈其美与宋教仁的悲剧
宝可梦大集结魔幻假面喵持有物怎么选 魔幻假面喵持有物选择推荐
业委会就是为业主服务的?参与社区治理,从这里开始→
教你如何识别与防范他人教唆犯罪的法律界限
食品通过安检仪后会不会有辐射残留?中国疾控中心专家解答
段煨:从戍边小卒到曹魏名将的传奇一生
段煨:从戍边小卒到曹魏名将的传奇一生
支付宝买基金和证券账户买基金区别
金克木命不用愁,化解方法大公开
汽车充电起火,旁边的车也烧了哪个赔偿?
什么是欧吉桑?日语称谓背后的文化内涵