上周我又干了件蠢事。想做个小工具,记录每天的读书笔记,加个标签、能搜、能翻历史。
我打开AI,说了句「写个网页版的笔记本」,十几秒就吐出来一个页面,输入框、列表、按钮全有,样式还挺好看。我当场就美了,觉得这活儿也太轻松了。
结果填了三条笔记,手一抖刷新了一下浏览器——全没了。空的。
我盯着那个干净得发亖的页面愣了半天。
那一刻我才反应过来一个特别基础、但很多人(包括当时的我)没想明白的事:AI给你生成的那个「网页」,它压根就没打算帮你把数据存下来。
网页型和Python型,这条线画得太准了
后来我刷到一篇讲自制Launcher的分享,作者把面板里能生成的应用分成了两类,我看完直接拍大腿。
他的原话大意是:应用分两种。网页型的,主要是有GUI页面,方便操作,但是无法和本地操作系统进行交互;Python类型的,在本地电脑上运行,没有GUI页面,通过输入文字指令来执行,但是可以和本地操作系统进行交互。
这句话看着朴素,其实一刀切到了要害上。你让AI「写个网页」,它给你的是一坨HTML加JavaScript,本质是一张在浏览器里跑的界面。
界面好看、交互顺,但它有个天生的短板:它自己关不住数据,也伸不出手去够外面的东西。换句话说,网页型擅长「让人看、让人点」,Python型擅长「真的去干活」。
我当时那个笔记本,要的其实是后者的能力,却被我用前者的方式做出来了,能不丢数据吗。
为什么纯前端页面一刷新就丢
说得再具体点。你在页面输入框里敲的字,在你没做任何处理的情况下,只活在当前这个浏览器标签页的内存里。
刷新、关标签、换台电脑,这段记忆就没了。
很多人以为「AI都能写网页了,存个数据还不是顺手的事」。别不信,这俩根本不是一码事。
渲染界面和持久化数据,中间隔着一整层——后端和数据库。 AI默认给你写的HTML里没有这一层,除非你明确要求,而且要求了它还得有地方跑那段后端逻辑。
这也是为什么社区里那些「周末用AI做了几款小游戏」的分享大多玩得挺爽——坦克大战、大富翁、消乐,这些游戏的状态活在当前这一局里,关了就关了,本来也不需要长期存。它们天生适合纯前端。
可你要做的是笔记、是记账、是任何「今天填的明天还想看到」的工具,性质就完全变了。
那条分界线,帮你判断该停在哪
我现在动手前会先问自己一个问题:这东西,需不需要「记住」?
如果不需要记住,纯粹是个计算器、格式转换、一次性的可视化展示,那停在网页型就够了,别给自己加戏。你甚至可以直接用HTML在线运行把页面跑起来看效果,托管发布出去分享给别人,整个过程不碰后端,轻快。
如果需要记住,或者需要调外部接口、需要处理文件、需要跑一段真正的逻辑,那你就必须往后端走一步了,这步省不掉。这时候光有HTML不够,得有个地方接住数据、执行计算。
用Python在线运行把后端逻辑跑起来,前端页面负责展示和收集输入,后端负责接收、处理、存取,两层各干各的,工具才立得住。
数据到底存哪,别想复杂了
定了要加后端,下一个问题就是数据落在哪。小工具别一上来就上重型数据库,SQLite这种单文件的关系型库对个人项目和小团队足够了,笔记、账目、标签这类结构化数据往里一放,读写都利索。
我调试的时候有个小习惯,特别省心:数据存进去之后,我不靠盲猜,直接用SQLite编辑器把表打开,看字段对不对、数据有没有真的写进去。前端显示不出来的时候,到底是没存进去还是没读出来,扫一眼表就知道,比在代码里插一堆打印语句快多了。
把这套搭起来之后,我那个笔记本重做了一版:页面收集输入,Python接住并写进SQLite,再读回来渲染。这回刷新不丢了,换台设备打开也还在。
就这么点区别,之前我卡了一下午。
收尾给你个能马上做的动作
如果你也正拿AI折腾小工具,动手前先花十秒判断一件事:你要做的东西,关掉再打开,需不需要还在?
需要,就别指望纯网页扛住,老实实加上后端和一个存数据的地方;不需要,就大胆停在前端,别过度设计。这条线画清楚了,你能少踩我踩过的那些坑。
最小的验证成本其实很低:拿AI先写个只有一个输入框、一个保存按钮的页面,再配一小段把输入写进SQLite、能读回来的后端,跑通「填进去—刷新—还在」这一条链路。这条通了,剩下的功能都是往上加。
别一开始就贪大,先把数据留得住。