【免费下载链接】rubberduck-use-case-playground
Try all the 10 use cases and see what the Rubber Duck can do!
RubberDuck Playground(rubberduck-use-case-playground)是一个围绕 Rubber Duck Pizzeria 披萨店演示应用打造的开源项目:它用Flask + SQLite搭建了一个结构完整、可一键启动的餐厅管理后台,并内置了 UC-01 到 UC-10 共十个 AI 实战用例。本文带你快速看懂这个 Flask+SQLite 演示应用的架构分层、数据设计与启动流程,适合新手和普通用户上手参考。
一、项目速览:一个"有剧本"的演示应用
这个仓库只有一条清晰路径:demo-projects/下的启动 Hub + 披萨店演示应用。各部分职责如下:
| 模块 | 路径 | 职责 |
|---|---|---|
| 启动 Hub | demo-projects/launcher.py | 提供 5055 端口控制台,一键 Launch/停止演示应用并实时看日志 |
| 应用入口 | package/main.py | 6 行代码:调用create_app()后在 5000 端口启动 |
| 核心包 | rubber_duck_pizzeria/ | routes / api / db / queries / services / config 六层模块 |
| 前端资源 | static/ | 图标、图片、样式与 JS 静态资源 |
| 页面模板 | templates/ | Jinja2 页面模板(仪表盘、订单、邮件、图表等) |
| 用例提示词 | demo-projects/prompts.json | UC-01…UC-10 的专属 Prompt 与预期结果 |
💡 注意:代码中的安全弱点与逻辑 Bug 是有意埋设的实验点(lab sinks),只用于学习,切勿当作生产代码。
二、快速上手:三步跑起 Flask+SQLite 演示应用
第 1 步:克隆仓库
git clone https://gitcode.com/gh_mirrors/ru/rubberduck-use-case-playground cd rubberduck-use-case-playground/demo-projects第 2 步:打开启动 Hub
- Windows:双击
start-hub.bat - Linux/macOS:执行
./start-hub.sh
浏览器访问http://127.0.0.1:5055/,选择Rubber Duck Pizzeria并点击 Launch,健康检查会依次点亮 venv → deps → DB → API → UI 五个环节。
第 3 步:直接启动(可选)
也可以跳过 Hub,在演示应用目录执行python setup_and_run.py。setup_and_run.py 会按顺序完成四件事:
ensure_venv()— 创建/复用.venv虚拟环境install_deps()— 按 requirements.txt 安装 Flask 3.0.2 等依赖init_database()— 初始化 SQLite 并写入种子数据start_server()— 启动前端(http://127.0.0.1:5000/)与 Kitchen API(/api/health)
完整图文流程见官方指南 GUIDE.md。
三、分层架构:入口 → 蓝图 → 数据层
整个后端只有 6 个 Python 模块,分层非常清晰,是学习 Flask 项目组织方式的好样本:
- 入口层:main.py 仅 6 行,把职责交给工厂函数
create_app() - 应用工厂:init.py 创建 Flask 实例、初始化数据库、注册两个蓝图
- 页面路由层:routes.py 中的
main蓝图,负责 50+ 个页面路由(Dashboard、Order List、Email、Charts 等),全部只做"渲染模板"一件事 - 接口层:api.py 中的
kitchen_api蓝图,挂载在/api前缀下,处理订单、菜单、评论、登录等数据接口 - 数据层:db.py 封装 SQLite 连接、建表、种子数据与查询函数
- 业务辅助层:queries.py(聚合计算)、services.py(配置消费方)、config.py(运行时配置)
请求流向可以概括为:
浏览器 → Flask →
main/kitchen_api蓝图 →db.py/queries.py→data/pizzeria.db(SQLite)
四、数据层解剖:SQLite 七张表与种子数据
db.py 的init_db()负责建库建表,一共 7 张表,覆盖了一家披萨店的完整业务模型:
| 表名 | 内容 | 亮点 |
|---|---|---|
staff | 员工账号 | 内置 admin / kitchen / demo 三个账号 |
customers | 客户 | 含 VIP 客户与"内部员工镜像"记录 |
menu_items | 菜单 | 7 道菜品,关联图片路径与销量 |
orders | 订单 | 外键关联客户,带状态与配送地址 |
order_items | 订单明细 | 外键关联订单与菜品 |
reviews | 用户评论 | 供/api/reviews读写 |
app_settings | 键值配置 | kitchen_target、discount_mode 等 |
两个值得新手关注的设计细节:
- 幂等初始化:若
staff表已有数据则直接跳过种子写入,重复启动不会报错或重复插数据 - 单文件数据库:SQLite 库文件生成在 data/pizzeria.db,随
data/目录自动创建,零配置
菜单种子数据中的意式辣肉酱意面(Medium Spicy Spagethi Italiano)对应的就是应用内展示的真实菜品图片:
五、Kitchen API:接口清单与"内埋"的实验点
api.py 是十个用例的主要"靶场",核心接口一览:
| 接口 | 方法 | 说明 |
|---|---|---|
/api/health | GET | 健康检查,Hub 的 Launch 流程靠它判断 API 就绪 |
/api/search | GET | 客户搜索,演示参数化查询对照(UC-06/09) |
/api/reviews | GET/POST | 评论读写 |
/api/orders/<id> | GET | 订单详情 |
/api/menu、/api/orders、/api/customers | GET | 列表查询 |
/api/login | POST | 员工登录与 session 管理 |
/api/discount/preview | POST | 折扣预览,暴露聚合逻辑 Bug(UC-03/08) |
/api/admin/stats | GET | 管理员统计 |
/api/report | GET | 厨房报表 |
每个实验点命中时都会返回形如FLAG{...}的标记,方便你在 AI 助手的分析结果中快速对答案。配套的逻辑 Bug 藏在 queries.py 的get_aggregation()中:discount掩码在处理第一笔金额后即被移除,导致折扣永远为 0——这正是"定位并修复 Bug"用例的目标。
六、十大用例如何落在架构上
Hub 的 Generate prompts 页会按 prompts.json 生成项目专属提示词,十个用例与架构模块的对应关系如下:
| 用例 | 名称 | 对应架构位置 |
|---|---|---|
| UC-01 | 理解代码 | main.py→create_app→ 蓝图 →init_db全链路 |
| UC-02 | 安全审计 | api.py 各接口内埋的漏洞点 |
| UC-03 | 定位并修复 Bug | queries.py 的聚合掩码 Bug |
| UC-04 | 代码审查 | api.py中 raw SQL 搜索附近代码 |
| UC-05 | 变更影响 | 重命名 config.py 的config_values波及面 |
| UC-06 | 规划新功能 | 设计参数化的safe_search_customers |
| UC-07 | 生成匹配风格代码 | 实现安全搜索 + 测试 |
| UC-08 | 检查代码逻辑 | include_discount=True是否真正生效 |
| UC-09 | 版本对比 | raw SQL 搜索 vs 参数化搜索 |
| UC-10 | 快速检查 | get_aggregation的返回值与证据 |
七、关键文件导航
| 资料 | 路径 |
|---|---|
| 完整使用指南 | GUIDE.md |
| 项目说明 | README.md |
| MCP 接入配置 | SETUP.md |
| 应用工厂 | rubber_duck_pizzeria/init.py |
| 数据库模块 | rubber_duck_pizzeria/db.py |
| 依赖清单 | package/requirements.txt |
| 依赖项与运行脚本 | demo-projects/rubberduck_pizzeria-demoapp/ |
写在最后
Rubber Duck Playground 用一个轻量但完整的披萨店系统,把Flask 蓝图分层、SQLite 种子数据、Jinja2 模板渲染这三个新手最需要的知识点串在了一起:入口 6 行、后端 6 个模块、数据库 1 个文件,却五脏俱全。建议先按本文"三步启动"把应用跑起来,再对照 UC-01 让 AI 助手沿main.py→ 蓝图 →db.py走一遍代码链路——这比单读文档快得多。
⚠️ 再次提醒:项目内的"漏洞"与 Bug 均为教学用途的实验设计,请勿将api.py中的处理方式用于任何生产环境。
【免费下载链接】rubberduck-use-case-playground
Try all the 10 use cases and see what the Rubber Duck can do!
相关推荐
深入理解SQLite:从架构设计到核心组件全解析
深入理解SQLite:从架构设计到核心组件全解析 你是否曾好奇手机里的App数据如何高效存储?或者想知道嵌入式设备中为何SQLite无处不在?本文将带你揭开SQ
数据库关系型数据库嵌入式数据库FanControl 完整风扇控制指南:3 个实战场景 + 调优参数速查,如何兼顾静音与散热
FanControl 完整风扇控制指南:3 个实战场景 + 调优参数速查,如何兼顾静音与散热 这篇文章带你把 FanControl ——一款面向 Windows
桌面应用智能硬件Flask核心架构深度解析:从请求到响应的完整流程
Flask核心架构深度解析:从请求到响应的完整流程 本文深入解析Flask框架的核心架构,从WSGI协议基础到完整的请求 响应生命周期。文章详细探讨了Flask
后端Web框架
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考