首页 / 资讯中心 / 文章详情

SimpleStart:用 Python 开发 Web 应用的框架】

SimpleStart:用 Python 开发 Web 应用的框架】 ★ FEATURED ARTICLE
SimpleStart用 Python 开发 Web 应用的框架每个写 Python 的人几乎都撞过同一堵墙脚本写好了想让没有 Python 环境的同事也能用——总得有个网页吧然后你就面对 HTML、CSS、JavaScript可能还有 npm 和一堆构建工具。多数人在墙前停住了工具留成了命令行脚本或者干脆发个 CSV 过去。SimpleStart 是给这堵墙的一个回答一个纯 Python 的 Web 应用框架——你写 Python 脚本它负责把界面渲染进浏览器。绝大多数场景不必碰 HTML/CSS/JavaScript也不需要 node、npm、webpack真需要精细控制时也有逃生舱——ss.css管样式ss.loadvue加载自定义组件后文都会讲到。本文不讲步骤式教程而是一篇综述它是什么、为什么存在、怎么工作、能做什么、边界在哪。为什么会有它两年前我要赶一个网页版演示时间很紧。我用 Streamlit 很快搭出了原型——功能勉强够用但开发体验处处别扭每次交互整个脚本从头重跑状态管理全靠约定。那次经历让我对Python 写 Web产生了兴趣SimpleStart 就诞生于这段经历它瞄准的正是这些别扭让写 Python 的人不必绕道前端。它已经发布到 PyPI文档有中英双语。我和一些早期用户用它做内部工具、数据看板和刷题应用——就是那种会 Python 的同事做出来、不会 Python 的同事打开就能用的东西。它适合谁数据分析师把 pandas 里的数据变成同事打开就能用的页面开发者快速做内部工具——表单收集、报表、看板、小系统所有会 Python 但不想学前端的人。它是怎么工作的两个设计决定事件驱动。点击、输入都走回调函数你把一个 Python 函数挂到组件上交互发生的那一刻才执行它且只更新涉及的元素。脚本只执行一次。启动时跑一遍之后所有交互都由回调精准更新涉及的元素页面不整体刷新。值得强调第二点提到用 Python 写网页很多人的第一印象是每点一下整个脚本从头重跑。SimpleStart 不是这种架构——它更像一个事件驱动的应用运行时脚本运行一次之后剩下的世界只有函数和回调。应用越大这个差异越值钱。五分钟看完它能做什么最小应用按钮与回调importsimplestartasss ss.write(## Hello, SimpleStart!)ss.write(Click the button and a message will be written to the page.)defmyclick():ss.write(Welcome to SimpleStart. :smile:)ss.button(Click Me,typeprimary,onclickmyclick)保存为app.py终端跑ss app.py浏览器打开http://localhost:8000。ss.write支持 Markdownonclick是回调——只在点击那一刻执行。响应式变量和页面绑在一起importsimplestartasss ss.session.nameworldss.write(Change the text below - the page updates instantly, no reload.)ss.write(Hello, name!)defchange_name(event):ss.session.nameevent.value ss.text_input(world,onchangechange_name)name表示这段文本和变量ss.session.name绑定回调里改变量页面自动跟着变。全程没有一行手动刷新的代码。数据上屏表格与图表importsimplestartasss mydata[{Month:Jan,Sales:120,Profit:30},{Month:Feb,Sales:200,Profit:60},{Month:Mar,Sales:150,Profit:45},]ss.table(tableDatamydata,stripeTrue)ss.plot.bar(data{A:10,B:15,C:13,D:20,E:18},titleBasic Bar Chart,)mydata就是普通的 Python 列表——pandas 用户一行df.to_dict(records)就能接上。ss.table把它变成带斑马纹的表格ss.plot.bar一个字典生成可交互的柱状图悬停有数值提示折线图、饼图是类似的一行式 API。加上几个筛选控件这就是一个最小数据看板的样子。组件家族日常工具需要的积木基本都在表单输入文本框、日期选择、滑块、开关、单选、复选、下拉框、文件上传布局容器卡片、行/列栅格、侧边栏、分割线、留白数据呈现表格、柱状/折线/饼图等交互式图表动作与反馈按钮与按钮组、语义色文本成功/警告/错误。这些控件大多源自 Vue 3 生态的成熟组件库Element Plus、Vuetify——也就是说你用 Python 参数调用的是经过大量真实产品验证的企业级控件类型、尺寸、图标、加载态、禁用态属性直接可用。配套能力也在会话级状态用ss.session本地持久化用ss.LocalStorage多页跳转用ss.openpage。不够用的时候自定义组件官方组件再多也总有覆盖不到的场景。SimpleStart 提供ss.loadvue把你写的 Vue 单文件组件SFC加载进应用——Python 侧通过handlers接收前端事件传回的数据通过data向组件传数据双向通信体验和官方组件一致。你不需要把整套前端工程捡回来——只在需要的那一个点上写一个组件文件就好。官方组件覆盖日常的绝大多数场景剩下的长尾用ss.loadvue补齐。再往前一步状态驱动界面基础绑定之上SimpleStart 提供了ss.State——一个响应式状态容器把属性传给组件参数绑定就完成了组件修改自动写回状态状态修改自动刷新所有绑定它的组件。写过前端的读者效果类似v-model。没用过前端这正是你不需要学它的原因。它改变的是写应用的组织方式。比如一个自动判分测验答案是状态答对答错的颜色是状态得分条文案也是状态——判分函数里只读写状态没有一行更新界面的代码不到 50 行跑通三道题。再比如用户登录连哪张卡片可见都绑在状态上登录成功只是翻转两个布尔值37 行完成登录、报错、欢迎页、退出四个场景。这两个例子的完整代码都在 GitHub 仓库的tutorials/目录可以直接跑起来看。响应式的更多形态组件属性与 Markdown 插槽ss.State之外响应式还渗透在两个容易忽略的地方。组件属性本身是响应式的。ss.button(...)会返回组件对象之后直接给属性赋值——比如把type从default改成success——页面上的按钮立刻变色且属性间有派生联动类型变了配色自动跟着变。组件是活的 Python 对象不是一次性输出的标记。Markdown 里有插槽。ss.markdown支持在正文里放{slot#id}占位符再用md.slot(id...)把任意组件填进去文案负责讲解组件负责交互两者在同一段内容里无缝结合——教程、配置面板、说明文档这类图文 交互的页面用交互式 Markdown 写最自然。还支持 markdown-it-attrs 行内属性比如*文字*{.c-red}给指定文字上色。SimpleStart 和 Streamlit 有什么不同这两个框架解决的是同一类问题——用 Python 生成浏览器界面——但走了两条不同的架构路线。把区别说清楚你可以自己对号入座。执行模型不同这是根源。Streamlit 采用脚本重跑模型每次交互整个脚本从上到下重新执行一遍。这个模型的好处是心智负担低——脚本即应用从上往下读就是执行顺序特别适合数据自上而下流动的展示型应用加载数据、处理、画图一条线读完。SimpleStart 采用事件驱动模型脚本只在启动时执行一次之后所有交互都是回调函数在精准更新涉及的元素。两条路线没有绝对优劣重跑模型赢了简单直接事件驱动赢了交互密集时的效率和可控性。状态管理的方式不同。重跑模型里脚本每次归零跨交互的数据要显式放进st.session_state并小心防止重复初始化事件驱动模型里Python 变量天然活在会话中ss.session随用随取ss.State还提供双向绑定——状态不是你要保住的东西而是应用的骨架。页面更新的粒度不同。重跑模型每次交互整个页面重新渲染事件驱动只更新变化的元素。应用越复杂、交互越频繁这个差异越明显——这也是两者各自适合的场景分野一次性的数据分析报告重跑模型很顺手多步骤、状态密集的内部工具和小系统事件驱动更省心。Streamlit 社区更大、生态更成熟这两点是它真实的优势。毕竟我自己也是从 Streamlit 走进用 Python 写 Web这个世界的。SimpleStart 想尝试的是工具比报告多的那部分需求交互更多、状态更重、又不想为此背上前端工程。边界在哪适合与不适合诚实的评估适合内部工具、表单收集、数据看板、教学演示、带登录的个人小应用——凡是逻辑在 Python、界面只需要够用的场景。不适合需要高度定制视觉的 to C 产品页、依赖 SEO 的公开内容站。SimpleStart 本质是一个应用运行时不是建站工具——它给你的是把 Python 逻辑放进浏览器的最短路径而不是像素级的页面控制。项目现状SimpleStart 还在成长期核心的表单、数据、布局、状态与自定义组件能力已经可用组件生态与更多高级能力在持续完善。如果你喜欢只写 Python这个思路不妨试试吧。遇到问题可以去 GitHub Issues 留言。simplestart.cc 的在线文档本身就是用 SimpleStart 开发的站内的交互式 playground示例代码即改即运行基于ss.state实现打开浏览器就能体验。链接在线文档中文http://www.simplestart.cc/zhDocumentation (English)http://www.simplestart.cc/GitHub本文示例代码在examples/、tutorials/目录https://github.com/readever/simplestartpip install simplestart把你手边那个只能自己用的脚本变成一个谁都能打开的页面试试。本系列文章00 SimpleStart 综述本文持续更新01 SimpleStart 入门不写一行前端用纯 Python 构建 Web 应用02 用 SimpleStart 做个自动判分测验ss.state 双向数据绑定入门03 用 SimpleStart 实现用户登录功能由数据驱动界面自动切换
阅读完成 · 觉得有帮助?
咨询建站