用纯 Python 打造你的第一个 Web 应用

2025 年 2 月 15 日
 babywhisper

最近使用纯 Python 开发了一个没有目标的习惯追踪应用 (支持自部署):

优雅的状态管理

整体开发的体验非常丝滑,NiceGUI 框架提供了丰富的前端组件。

同时支持非常自然地将前端状态绑定至 python 的属性或变量:

demo = Demo()
ui.slider(min=1, max=3).bind_value(demo, 'number')

甚至直接绑定至用户一次 session:

ui.textarea('This note is kept between visits')
   .classes('w-full').bind_value(app.storage.user, 'note')

鱼与熊掌不可兼得

优雅的背后是 tradeoff ,就如同 GIL 一刀切一般,在 NiceGUI 框架中所有的逻辑都在后端服务器处理(美名称之为 backend-first philosophy )。

举个例子,在前端界面点击菜单下拉框,也需要一来一回的 websocket 交互。如果网络状况一般,可能会严重影响用户体验,这也是为什么个人项目主打自部署~

总而言之

总而言之,NiceGUI 对于没有丰富前端经验的 Python 程序员,应该会是一个不错的选择 :)

5585 次点击
所在节点    Python
19 条回复
mayli
2025 年 2 月 15 日
Nicegui 性能不大行
稍微大的表,分页也会把数据都传过去
crocoBaby
2025 年 2 月 15 日
看过,感觉不好用
UB
2025 年 2 月 15 日
用过跟 nicegui 类似的 https://github.com/reflex-dev/reflex
iorilu
2025 年 2 月 15 日
以前可能还可以试试

现在 ai 开发前端没有任何问题的

后端直接 fastapi 搞 api 完事
vishun
2025 年 2 月 15 日
看描述怎么感觉和微软的 blazor 中的一种模式比较像,blazor 还有种模式是可以编译成 WebAssembly 运行。
ferock
2025 年 2 月 15 日
啥玩意儿
tonytonychopper
2025 年 2 月 15 日
点进去看了下,体验好难受🤯
iorilu
2025 年 2 月 15 日
@tonytonychopper 这东西任何操作都要发到服务器处理, 就算本地部署都不会很流畅, 基本不可能上正式环境给别人用

只能自己玩玩

但 web 应用不流畅太难受了, 所以是没法用
CynicalRose
2025 年 2 月 15 日
streamlit 也可以自动部署,这个上手更简单。
SenLief
2025 年 2 月 15 日
还不如自己画个手稿,然后喂给 ai 写前端。
mumbler
2025 年 2 月 15 日
学这干嘛,直接让 cursor 写,我看他代码学就好了
MossFox
2025 年 2 月 15 日
这个好玩,直接做到跟后端数据绑定了。

前几层别搁那说什么 AI 给你糊前端了,这里的这个应用特色不是糊弄出一个模板页面,是做到了让 UI 跟后端整个代码上下文直接关联了起来。你前端按的按钮或者输入的内容,直接 call 的就是后端的函数(而不用你再去包装一堆 HTTP API 了);前端显示的也可以是后端某个数据对象的内容、且后端数据改了前端会自动同步上去。

这个给我的感觉是弱化了相当多前端入门时要踩的坑,假如就是想给自己的 Python 脚本整一个快速的可视化界面,这个本地用的开发体验肯定比整一套前后端然后搓接口要舒爽。要数据绑定也天然支持,要快速地整个数据可视化也有一堆开箱即用的组件,全程不用碰 js 就能整完。
MossFox
2025 年 2 月 15 日
@MossFox #12 补充一下框架的链接, https://nicegui.io/
yoiteshaw
2025 年 2 月 16 日
@MossFox 类似 ttk plotly 这样的 py 库是吗 其实我感觉还是缺少点灵活性,不如 js 前端方便
AV1
2025 年 2 月 16 日
把后端都搬到用户电脑上不就好了嘛。
没错,说的就是 electron 。
让 NiceGUI 跑在 electron 里,也许是不错的选择🤣
Linho1219
2025 年 2 月 16 日
让 SSR 再次伟大是吧
babywhisper
2025 年 2 月 16 日
> 把后端都搬到用户电脑上不就好了嘛。

👍👍 所以让用户自部署或者公司内部应用,倒是不错的选择。
bronyakaka
2025 年 2 月 16 日
python 我只建议用 flet ,是 flutter 的包装,全程纯 python 编写。界面做出来很漂亮,性能也不错。
shic
2025 年 2 月 17 日
用过几种框架性能都一般般,后来 cursor 出来后用 fastapi+react 很方便,前端全是 cursor 生成的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1111607

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX