尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

不写JS也能做全栈Web应用:用Reflex把前后端装进一个Python文件,3步出页面

不写JS也能做全栈Web应用:用Reflex把前后端装进一个Python文件,3步出页面 不写JS也能做全栈Web应用用Reflex把前后端装进一个Python文件3步出页面【免费下载链接】reflex️ Web apps in pure Python 项目地址: https://gitcode.com/GitHub_Trending/re/reflex上次做一个带搜索框和结果列表的后台页面我用了一周Vue 写界面FastAPI 写接口中间还夹着半小时调字段名对不上的问题。Reflex 把这类事收进了纯 Python 一条线——前后端和数据库交互都写在一个工程里不用维护第二套前端代码。这篇文章把我实际走通的路径讲一遍从环境到能跑起来的应用以及状态是怎么自动反映到界面上的。前后端分离做这类页面卡在哪不是架构本身有问题而是这类中等规模的页面表单 按钮 异步结果在分离式技术栈里总被三个地方拖住一套数据两份定义。后端接口返回什么字段、前端状态存什么字段两边各写一份。字段一改两边都要改漏一边就是线上 bug。状态同步全靠手写。加载中转圈、错误提示、结果展示每个都是前端状态机的一个分支接口一调完还要手动把返回值塞回 state 里页面才会变。排查要跨仓库跳转。一个交互 bug往往要在前端组件、接口定义、后端 handler 之间来回切断点打了三处日志对了两遍。这三个卡点都不是技术不熟能解决的是这种分层本身带来的维护成本。所以下面的思路是如果能把数据、界面、交互放进同一个语言里这三件事就都不存在了。Reflex怎么拆这件事把三层拆回一个文件Reflex 的做法是把应用拆成三块全部写在 Python 里数据一个继承自rx.State的类属性就是应用的数据类型标注齐全视图普通函数用组件rx.vstack、rx.button这类拼出页面像搭积木一样嵌套交互State 类里的方法标上rx.event后自动变成事件处理器前端按钮、输入框直接绑它。编译时Reflex 根据这些 Python 代码生成对应的前端产物你只维护 Python 这一侧。这其实就是 MVC/MVVM 那套分工在 Python 里的落地——数据、视图、控制各自归位而且不用跨越两种语言。状态系统的实现细节都在 state.py 里想看属性怎么被跟踪可以翻一翻。最小可运行路径定义状态、写视图、绑事件环境就两步pip install reflex装依赖reflex init在当前目录生成项目骨架。下面用一个计数器走完全流程这也是每个 Reflex 应用都会碰到的三件核心事。import reflex as rx class CounterState(rx.State): count: int 0 rx.event def increment(self): self.count 1 def index() - rx.Component: return rx.vstack( rx.heading(fCount: {CounterState.count}), rx.button(Add, on_clickCounterState.increment), )State 类声明了唯一的数据countindex函数是页面按钮通过on_click绑到事件方法。运行reflex run启动开发服务器浏览器里点一下按钮界面数字就加一——到这里一个完整的界面 → 后端 → 界面闭环已经通了。从状态到界面数据绑定是怎么发生的上一步里点按钮、数字变并不是巧合靠的是一条明确的规则视图里引用了哪个 State 变量界面就订阅了哪个变量。rx.heading里的fCount: {CounterState.count}不是渲染一次就完的文字模板而是一个绑定——事件方法里self.count 1之后Reflex 会自动把这个新值同步到前端订阅了它的组件随之重渲染。反方向也一样输入框绑on_change后用户敲进去的字会作为参数传进事件方法再经状态变量回到界面。所以整条链路是界面 → 事件方法 → 状态变量 → 界面全程没有一行setState或前端请求代码要你自己写。这就是 MVVM 里 ViewModel 干的事在 Reflex 里被压进了 State 类本身。进阶与避坑三个真正会踩的点小应用一个 State 类够用但规模上来之后下面三件事决定你能不能长期维护用子状态拆模块别把所有变量堆一个类里。表单、用户信息、列表数据各自开一个 State页面引用哪个就用哪个拆分规则可以在子状态与共享状态文档里查到。派生数据用rx.var计算变量而不是在事件里手动同步。比如总价 单价 × 数量写成rx.var的方法依赖变了自动重算默认带缓存只有依赖的状态变了才会重跑一次。这个机制在计算变量文档里讲得比较细。异步操作要有中间态。事件方法里先置self.loading True再发起耗时调用返回前再置回——按钮的disabled绑这个变量用户就不会连点三次。异步写法和事件链的完整用法看背景事件与链式事件文档。另外一个小习惯给状态变量和事件方法参数都写上类型标注很多编译期的检查就靠它生效。下一步如果手里正好有一个表单 按钮 异步结果式的小页面拿 Reflex 从头重写一遍是最划算的练习——pip install reflex、reflex init、写一个 State 类半小时内就能看到状态改完界面就变的效果。跑通之后把状态结构按上面的方式拆开基本就能覆盖大部分业务页面的复杂度。【免费下载链接】reflex️ Web apps in pure Python 项目地址: https://gitcode.com/GitHub_Trending/re/reflex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表