ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

vibe coding实战:用AI辅助开发Flask待办事项网页全流程

vibe coding实战:用AI辅助开发Flask待办事项网页全流程 作为 vibe coding 系列的第三期今天想换个节奏前两期聊概念、聊工具这一期直接带大家从零开始做一个能跑起来的小项目。vibe coding 这个词在开发者社区里越来越常被提起尤其适合刚接触编程、或者平时写业务代码但不想从语法细节起步的朋友。这篇文章会从最基础的环境准备开始慢慢拆解怎么把需求描述给 AI、怎么让 AI 补全代码、怎么处理运行时报错最后再整理一份实战过程里的高频问题和工程建议。学完之后你可以照着同样的流程自己做出记账页面、公司团队介绍页、批量文件改名工具这类小应用。我的建议是不要只把 vibe coding 当成“敲几个字让 AI 出代码”的偷懒技巧而是要把它当成一套“描述需求 → 生成代码 → 验证结果 → 迭代修改”的工作方法。这个方法一旦掌握后面自己学编程或者推进项目效率会明显不一样。下面我们正式开始。1. 什么是 vibe coding它适合谁1.1 vibe coding 到底是什么意思很多人第一次听到 vibe coding 这个说法会以为是不用写代码、全靠 AI 自动完成一切。实际上它是一种更偏“氛围式开发”的工作方式你用自己的语言把想要的功能描述清楚让 AI 编程工具生成代码然后你负责运行、测试、发现问题、继续反馈。通俗点说传统开发是“你一行一行把代码敲出来”vibe coding 是“你把需求和感觉说清楚AI 负责把代码写出来你再检查它写得对不对”。这里的重点并不是“完全不看代码”而是把精力从“怎么写”转移到“写什么”和“写得好不好”上。对于正在学习编程的新手来说vibe coding 还有一个额外价值它像一位随时在线、可以反复提问的结对编程伙伴。你不需要害怕报错也不需要因为看不懂英文日志而卡住因为你完全可以把报错信息直接丢给 AI让它帮你解释和修改。这也是我推荐大家系统学习 vibe coding 的原因——掌握这项能力很多时候相当于给自己配了一个随叫随到的开发助手。1.2 vibe coding 与手写代码的核心区别为了更直观地理解我们可以用一张表来对比传统开发方式和 vibe coding 方式对比维度传统手写开发vibe coding核心动作人写代码机器执行人描述意图AI 生成代码技能要求熟悉语法、框架、调试工具能讲清需求会读基本报错出错概率取决于代码基础和细节控制取决于提示词质量和审阅能力适合阶段生产系统、核心模块、复杂算法原型、小工具、学习练手、快速验证风险点开发周期长细节容易遗漏生成代码可能有逻辑偏差或隐藏问题从表格中可以看出vibe coding 并不是要取代传统编程而是补足了“从想法到可运行原型”这一段最耗时的环节。传统开发适合稳扎稳打地构建线上产品而 vibe coding 更适合在需求还不明确、方案需要快速验证时使用。在实际项目里两种方式通常会结合使用先用 vibe coding 快速搭出界面和主要流程再由有经验的开发人员对核心逻辑进行重构、补测试、做安全加固。这种组合模式在中小团队和独立开发者中非常常见。1.3 什么样的人适合 vibe coding如果你满足下面任意一种情况vibe coding 都可以作为你的重要工具编程新手还不太熟悉语法但脑子里有明确的产品想法。业务开发者后端写得多、前端样式搞不定可以用 AI 生成页面模板。产品经理或运营经常需要做数据看板、活动页面、内部工具可以把需求直接告诉 AI。独立开发者希望用最小成本验证一个极简产品再决定是否投入资源精细化开发。在校学生做课程设计、毕设原型时可以通过 vibe coding 快速看到系统全貌。需要谨慎的情况也有涉及资金交易、用户隐私、安全权限、核心算法、高性能计算的场景不建议直接依赖 AI 生成的代码上线。这类系统需要专业开发人员逐行审阅、充分测试并且遵循公司内部的代码评审和发布流程。2. 环境准备与工具选择2.1 配置本地运行环境虽然 vibe coding 强调“用语言描述需求”但最终生成的代码仍然要在本地环境里运行。所以电脑上需要装好基础开发环境。本文以 Python 为例因为 Python 语法简单、生态丰富非常适合新手做 Web 小项目。我们需要的软件如下Python 3.9 或更高版本。pip用来安装 Python 依赖库。一个命令行工具Windows 可以用 PowerShellmacOS 或 Linux 可以用终端。一个代码编辑器推荐 VS Code免费且插件丰富。先打开命令行检查是否已经安装了 Pythonpython --version如果提示找不到命令可以试试python3 --version再检查 pippip --version确认环境没问题后创建一个项目目录mkdir vibe-demo cd vibe-demo这里建议使用虚拟环境避免不同项目的依赖互相冲突python -m venv venv激活虚拟环境# Windows venv\Scripts\activate # macOS / Linux source venv/bin/activate激活后安装本次实战需要的 Flask 框架pip install flask安装完成后可以输入下面的命令确认 Flask 是否可用python -c import flask; print(flask.__version__)如果你的电脑还没有安装 Python请先到 Python 官网下载对应系统的稳定版本安装时记得勾选“Add Python to PATH”。这一步很关键如果不勾选命令行可能无法识别 python 命令。版本方面不需要追新官方推荐的稳定版即可重点是把环境跑通。2.2 选择适合自己的 AI 编程工具现在 AI 编程工具的选择非常多大体可以分成三类第一类是通用对话式 AI例如 ChatGPT、Claude、DeepSeek 等。你可以在对话窗口里描述需求、粘贴报错、要求它修改代码。这种方式最灵活不依赖特定编辑器适合新手理解和反复迭代。第二类是编辑器插件例如 GitHub Copilot、通义灵码、Cursor 等。它们直接嵌入 VS Code 等编辑器里能根据注释和上下文自动补全代码。适合已经有编程基础、希望在写代码过程中获得实时帮助的开发者。第三类是可视化生成平台例如 Vercel 推出的 AI 生成平台。这类平台更偏向“给出提示词直接生成页面或部署链接”适合做前端原型、落地页和团队展示页面。由于这类平台更新速度很快具体入口和功能可能会随着版本调整建议以官方文档和最新界面为准。工具选择没有绝对答案我个人的建议是新手先用通用对话式 AI把“描述需求 → 生成代码 → 粘贴到本地 → 运行验证”的流程跑通再慢慢尝试编辑器插件。这样更容易理解每一段代码是从哪里来的、为什么这样写。2.3 示例项目结构这一期的实战项目是一个待办事项网页项目的目录结构如下vibe-demo/ ├── app.py ├── templates/ │ └── index.html └── venv/app.py是 Flask 后端入口负责提供页面和接口。templates/index.html是前端页面负责展示待办列表和交互按钮。venv是虚拟环境目录不需要手动修改。后面 4.2 和 4.3 会让你把代码粘贴到对应文件里所以先把这个结构建好。templates 目录需要手动新建mkdir templates3. 核心原理如何把需求讲给 AI 听3.1 提示词的基本结构很多朋友对 vibe coding 的第一印象是“直接在对话框里说一句‘帮我做个网页’AI 就能出结果”。但实际上越是模糊的需求生成的代码越容易出现偏差。想要得到高质量结果关键在于提示词的结构化表达。一个可复用的提示词结构是角色定位 项目背景 具体任务 验收条件。以我们的待办项目为例你可以这样写你是一名 Python 后端工程师擅长使用 Flask 框架开发 Web 应用。 我正在做一个待办事项网页后端使用 Flask页面使用 HTML 和 JavaScript。 请帮我编写 app.py实现以下接口 1. GET / 返回待办事项页面 2. GET /api/todos 返回全部待办事项格式为 JSON 3. POST /api/todos 新增一条待办事项请求体传入 title 字段 4. DELETE /api/todos/id 根据 id 删除待办事项。 要求如果 title 为空返回错误提示代码中加上必要注释。可以看出来这个提示词没有让 AI 自己“编造”功能而是把接口路径、请求方式、返回格式、边界条件都说清楚了。这样生成的代码会精确很多后续修改也更容易定位问题。3.2 一次只提一个需求新手特别容易犯的错误是把所有需求一次性塞给 AI例如“帮我做一个带登录、评论、点赞、后台管理、消息通知的博客系统”。结果是 AI 生成一个非常庞大但无法运行的代码框架或者干脆只完成了部分功能。更稳妥的做法是把项目拆成小步骤每完成一步、验证一步再进行下一步。比如做待办事项页面可以拆成先做后端接口。再写前端页面。运行并测试新增、删除功能。最后再加“完成状态”等进阶功能。每个小步骤都是一次独立的“需求 → 生成 → 验证”循环。这样即使某一步出现问题也只需要回来修改这一小部分不会出现“部署完成后才发现整个架构跑不通”的尴尬局面。3.3 把报错信息作为下一次对话的输入vibe coding 最强大的地方在于它能“消灭报错恐惧”。当你运行代码、浏览器弹出异常时不要急着慌张直接把报错信息复制给 AI并附上你的环境信息例如我运行 app.py 后浏览器访问 http://127.0.0.1:5000 出现了下面的报错 这里粘贴完整报错文本 我的系统是 WindowsPython 版本是 3.10。 请告诉我问题出在哪里并给出修改后的代码。AI 会帮你定位到具体文件和行号并提供修复方案。这一步特别适合新手因为在传统学习模式下新手很容易被英文报错劝退而 vibe coding 相当于给你配了一个随时能帮忙看报错的老师。3.4 学会审阅 AI 生成的代码需要再次强调vibe coding 不代表“无脑复制粘贴”。你没有必要立刻理解每一行代码的所有细节但至少要做基础检查文件保存路径是否正确。代码里是否出现了 API Key、密码等敏感信息。是否有明显的死循环或无限递归。接口路径是否和你在提示词里要求的一致。这些检查不需要深厚的技术功底只需要细心。经过几次实战之后你会慢慢积累判断力——哪些代码看起来可靠哪些代码需要再追问 AI 补充注释或继续优化。审阅能力是 vibe coding 和普通“复制粘贴代码”最大的分水岭。4. 完整实战用 vibe coding 做一个待办事项网页4.1 需求拆分项目目标很明确做一个网页版的待办事项应用用户可以输入待办内容、添加到列表也可以删除已经完成的待办。按照前面的原则我们把需求拆成更细的模块页面部分一个输入框、一个添加按钮、一个列表展示区。后端部分提供新增、查询、删除三个接口。数据存储当前先使用 Python 内存列表重启服务后数据会清空后续再考虑接入数据库。这样拆分之后每次和 AI 的对话内容都不会太多生成的代码也更容易理解。4.2 用 AI 生成 Flask 后端代码在 AI 对话框里输入 3.1 中的提示词然后把生成结果保存到app.py。下面是一份可以正常运行的参考代码# 文件路径vibe-demo/app.py from flask import Flask, request, jsonify, render_template app Flask(__name__) # 使用内存列表保存待办事项重启服务后数据会清空 todos [] next_id 1 app.route(/) def index(): return render_template(index.html) app.route(/api/todos, methods[GET]) def get_todos(): return jsonify(todos) app.route(/api/todos, methods[POST]) def add_todo(): global next_id data request.get_json() title data.get(title, ).strip() if not title: return jsonify({error: 待办内容不能为空}), 400 todo {id: next_id, title: title, done: False} todos.append(todo) next_id 1 return jsonify(todo), 201 app.route(/api/todos/int:todo_id, methods[DELETE]) def delete_todo(todo_id): global todos todos [t for t in todos if t[id] ! todo_id] return jsonify({message: 删除成功}) if __name__ __main__: app.run(debugTrue)这段代码里有几个关键点需要注意全局变量todos用于临时存储数据简单易懂适合教学。request.get_json()是 Flask 提供的 JSON 请求体解析方法前端传过来的数据在这里取出。对title做了非空校验避免用户提交空内容。debugTrue方便开发调试但生产环境一定要关闭。你可以把这段代码直接复制到本地但更推荐的做法是先让 AI 自己生成再把自己保存的代码和 AI 的生成结果做对比。这样能加深对接口设计的理解。4.3 用 AI 生成前端页面继续让 AI 生成页面文件。提示词可以这样写我已经写好了 Flask 后端接口如下 GET /api/todos 返回待办列表 POST /api/todos 新增待办请求体为 {title: 内容} DELETE /api/todos/id 删除待办。 现在请帮我生成 templates/index.html 1. 页面标题为“我的待办” 2. 有一个输入框和一个“添加”按钮 3. 待办列表显示所有待办内容和“删除”按钮 4. 使用原生 JavaScript 调用接口不需要引入额外框架 5. 界面简洁美观适合新手阅读。一份可运行的参考页面如下!-- 文件路径vibe-demo/templates/index.html -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 title我的待办/title style body { font-family: Microsoft YaHei, PingFang SC, sans-serif; max-width: 600px; margin: 40px auto; padding: 0 16px; } .todo-item { display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; border-bottom: 1px solid #eee; } .todo-item button { border: none; background: #e74c3c; color: #fff; border-radius: 4px; padding: 4px 10px; cursor: pointer; } /style /head body h1我的待办/h1 div input idtodo-input placeholder输入待办内容 / button idadd-btn添加/button /div ul idtodo-list/ul script const input document.getElementById(todo-input); const addBtn document.getElementById(add-btn); const list document.getElementById(todo-list); // 从后端拉取待办列表并渲染 function render() { fetch(/api/todos) .then(res res.json()) .then(todos { list.innerHTML ; todos.forEach(todo { const li document.createElement(li); li.className todo-item; li.textContent todo.title; const delBtn document.createElement(button); delBtn.textContent 删除; delBtn.addEventListener(click, () removeTodo(todo.id)); li.appendChild(delBtn); list.appendChild(li); }); }); } // 新增待办 function addTodo() { const title input.value.trim(); if (!title) { alert(请输入待办内容); return; } fetch(/api/todos, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ title }) }).then(res { if (res.ok) { input.value ; render(); } }); } // 删除待办 function removeTodo(id) { fetch(/api/todos/ id, { method: DELETE }) .then(res res.json()) .then(() render()); } // 绑定事件 addBtn.addEventListener(click, addTodo); input.addEventListener(keypress, e { if (e.key Enter) { addTodo(); } }); // 页面加载时先渲染一次 render(); /script /body /html在粘贴这份代码时要确保路径是templates/index.html因为 Flask 默认会从 templates 目录查找模板文件。如果你把文件放错位置运行app.py后访问根路径就会报TemplateNotFound之类的错误。4.4 运行与验证代码保存好之后在命令行执行python app.py正常情况下你会看到类似下面的输出* Running on http://127.0.0.1:5000 * Running on http://127.0.0.1:5000打开浏览器访问http://127.0.0.1:5000就可以看到“我的待办”页面。在输入框里输入“学习 Python”点击“添加”待办列表会立刻新增这一条内容再点击“删除”内容会消失同时页面自动刷新。看到这里的你已经完成了第一次 vibe coding 全流程用自然语言描述需求、让 AI 生成代码、在本地运行、再通过人和页面交互验证结果。这个过程虽然简单但它代表了一套非常通用的方法。后面不管是做登录页面、数据表格、内部工具思路都是相通的。4.5 迭代让 AI 继续增加完成状态项目跑通之后你可能会觉得功能太单薄比如缺少“标记为已完成”的交互。这正好是 vibe coding 的优势所在你可以不修改原有代码直接给 AI 发一段增量需求现在我的待办事项应用已经能新增和删除待办。 请再增加一个功能每条待办前面加一个复选框勾选后调用后端接口把这条待办的 done 字段修改为 true 再次取消勾选时把 done 改为 false。请告诉我后端需要新增哪个接口前端页面需要修改哪些地方。这时候AI 会建议你新增一个PATCH /api/todos/id接口并告诉你在前端render()函数中添加复选框的代码。你跟着它的指引修改代码再刷新页面测试效果。整个过程就像在和一个经验丰富的同事配合你提出想法它补齐细节。这一节想传递的核心思想是vibe coding 不是一次性的“魔法生成”而是一个不断迭代的反馈循环。每增加一个功能都是用自然语言描述、用运行结果验证最终拼出完整应用。5. 常见问题与排查思路在实际使用 vibe coding 的过程中大家会遇到一些共性问题和坑点。我做了一个汇总表格方便你快速对照排查问题现象常见原因解决思路AI 生成的代码运行时报 ModuleNotFoundError缺少依赖库根据报错信息执行 pip install 安装对应依赖页面能打开但接口调用返回 404前后端接口路径不一致检查 app.py 中的路由路径是否与 fetch 地址一致浏览器访问接口时出现跨域报错前后端分离部署时未配置 CORS后端加上 CORS 配置或让前后端同源部署代码能运行但页面样式很乱AI 生成的 CSS 较简单继续提需求让 AI 优化布局和样式数据添加后重启服务就消失了数据存储在内存中接入 SQLite、MySQL 等持久化存储AI 生成逻辑存在多余功能提示词描述不够精确把需求拆得更细明确“不要什么”功能端口被占用导致启动失败5000 端口已被其他程序使用修改 app.py 中 app.run(port5001) 或关闭占用进程下面展开说明几个高频问题。第一类是依赖缺失。遇到ModuleNotFoundError时不需要慌张把报错最后一行复制给 AI它会告诉你缺的是哪个库以及安装命令是什么。常见的情况是No module named flask执行pip install flask即可。第二类是接口 404。很多新手把 AI 生成的代码粘贴后明明后端已经启动但页面请求列表时报错。原因通常是后端路由名和前端请求路径不一致比如前端请求/api/todos/后端定义的是/api/todos。解决办法是让前端和后端的接口路径保持完全一致推荐直接在浏览器地址栏访问接口地址验证。第三类是数据持久化问题。当前示例使用内存列表服务重启后数据会清空这适合演示和原型开发。如果要做长期可用的小工具可以考虑让 AI 把数据存储改成 SQLite 文件存储。你可以这样提需求请把 app.py 里的内存列表改为 SQLite 存储 使用 sqlite3 标准库完成建表、新增、查询、删除操作 保持原有接口格式不变。这样做的好处是不需要额外安装数据库服务SQLite 是 Python 内置支持的文件型数据库非常适合待办事项、笔记、记账等个人工具类项目。第四类是代码能跑但质量一般。vibe coding 生成的代码通常能满足基本功能但可读性和扩展性不一定好。解决方法是在提示词里加入“代码要加上注释”“函数要拆分清晰”“变量命名要有意义”等要求。如果 AI 给出的代码仍然复杂可以继续追问“这段代码能不能再简化一下”。6. 最佳实践与工程建议6.1 把 AI 当成结对编程伙伴而不是搜索引擎vibe coding 更高效的使用方式是“持续对话”而不是“问一句就结束”。比如你先让 AI 生成一个页面然后说“这个颜色太亮了改成简洁风格”“按钮字号大一点”“把新增操作加入加载状态”。每一轮对话都会让 AI 更理解你的偏好最终输出的代码也更贴近实际需求。当你把 vibe coding 用成结对编程时你会养成一个习惯不断通过“输出倒逼输入”来明确自己的需求。这种能力在任何技术岗位上都值钱因为写代码之前必须想清楚要做什么。6.2 保持代码可审阅、可回滚AI 生成的代码并不保证百分百正确所以版本管理很重要。在项目一开始就可以执行git init每完成一个小功能建议先做一次提交git add . git commit -m 完成待办新增删除功能这样做的好处是当 AI 后续修改把页面改坏时你可以通过 Git 快速回退到上一个可用版本而不是反复手动撤销改动。版本管理覆盖所有开发方式使用 vibe coding 时尤其重要因为你往往不是逐行写代码而是让 AI 大段替换逻辑回滚能力相当于你的安全网。6.3 注意安全和配置边界即使使用 AI 生成代码也需要遵守基本的安全红线不要把你的 API Key、数据库密码、云服务密钥直接写在代码里。生产环境部署时不要使用debugTrue否则敏感信息会暴露。涉及删除功能的接口建议先确认操作者身份重要数据不要物理删除尽量做软删除。如果项目是团队协作AI 生成的代码同样需要走代码评审流程不能因为“是 AI 写的”就跳过审查。涉及到生产环境变更时应该先在测试环境验证确认没有数据安全问题后再部署。数据库的修改、删除操作要提前备份保持最小权限原则。6.4 不要放弃基础学习这是我反复想强调的一点。vibe coding 可以帮你快速起步但它不会替你做架构决策也不会告诉你为什么这个接口要设计成这种格式。随着项目复杂度上升你迟早需要理解 HTTP、数据库、前后端交互、异常处理这些基础概念。所以我建议的路线是用 vibe coding 做项目启蒙同时一点点补齐基础知识。遇到 AI 生成的代码可以先运行成功再追问 AI“这里用的是什么语法”“为什么要这样写”。你会发现AI 既是一个编码助手也可以是一位耐心的语法老师。比如在待办项目里研究完render_template和jsonify的作用你对 Flask 的基本工作方式就有了感觉。6.5 结合主流平台拓展能力除了本地 Python 项目vibe coding 生态里还有很多值得尝试的平台。Vercel 的 AI 生成平台就是一种典型玩法它更偏向直接生成前端页面和部署链接适合做落地页、小型站点和交互原型。不同平台的功能入口和部署方式迭代较快使用前建议先阅读官方文档和最新使用说明。如果你对鸿蒙生态感兴趣也可以关注 HarmonyOS 应用开发过程中 AI 辅助代码生成的应用。鸿蒙应用使用 ArkTS 语言和 ArkUI 框架开发者可以把“生成一个带列表的首页”“为按钮添加点击事件”等需求描述给 AI再在 DevEco Studio 中运行调试。需要注意的是移动端开发涉及模拟器、真机、签名配置等环节比纯 Web 项目复杂尽量按照官方文档逐步操作不要直接依赖 AI 生成的一整包代码。7. 总结与下一步学习路线这一期从 vibe coding 的概念出发带你搭建了本地 Python 环境完成了 Flask 待办事项网页的完整实战并通过“新增-查询-删除-迭代”这个闭环演示了 AI 辅助开发的核心流程。你还了解了提示词结构、报错处理和代码审阅的方法掌握了 Git 回滚、安全底线、数据持久化等工程化的基础意识。接下来可以按照这个顺序继续深入把当前项目的数据存储从内存改成 SQLite感受数据库的持久化能力。给待办事项增加“完成状态”和“编辑”功能练习更复杂的接口设计。学习 HTML、CSS、JavaScript 基础能自行调整页面样式和交互。尝试把 Flask 项目部署到线上了解 Gunicorn、Nginx 等部署工具。在熟练掌握 Python Web 基础后再尝试 Vercel、HarmonyOS 等不同平台的 vibe coding 玩法。如果你今天第一次把 vibe coding 项目跑起来建议先不要急着做太多把示例代码改一改比如把页面标题改成你自己的名字或加上一个“重要程度”字段。改动的过程就是对这套工作流最好的理解。下一期我们可以继续沿着这个项目往下走做一个带真实数据库和登录功能的小工具敬请关注。
返回列表