用纯 Python 打造你的第一个 Web 应用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
babywhisper
V2EX    Python

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

  •  
  •   babywhisper 236 天前 5135 次点击
    这是一个创建于 236 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    19 条回复    2025-02-17 14:41:35 +08:00
    mayli
        1
    mayli  
       236 天前
    Nicegui 性能不大行
    稍微大的表,分页也会把数据都传过去
    crocoBaby
        2
    crocoBaby  
       236 天前
    看过,感觉不好用
    3085570450tt
        3
    3085570450tt  
       236 天前
    用过跟 nicegui 类似的
    iorilu
        4
    iorilu  
       236 天前
    以前可能还可以试试

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

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

    只能自己玩玩

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

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

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

    所以让用户自部署或者公司内部应用,倒是不错的选择。
    bronyakaka
        18
    bronyakaka  
       235 天前
    python 我只建议用 flet ,是 flutter 的包装,全程纯 python 编写。界面做出来很漂亮,性能也不错。
    shic
        19
    shic  
       234 天前
    用过几种框架性能都一般般,后来 cursor 出来后用 fastapi+react 很方便,前端全是 cursor 生成的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     867 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:44 PVG 05:44 LAX 14:44 JFK 17:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86