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

206 天前
 daya0576

最近使用纯 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 程序员,应该会是一个不错的选择 :)

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

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

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

只能自己玩玩

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

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

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

👍👍 所以让用户自部署或者公司内部应用,倒是不错的选择。
bronyakaka
205 天前
python 我只建议用 flet ,是 flutter 的包装,全程纯 python 编写。界面做出来很漂亮,性能也不错。
shic
204 天前
用过几种框架性能都一般般,后来 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