示例工程【免费下载链接】modern-software-dev-assignmentsAssignments for CS146S: The Modern Software Dev (Stanford University Fall 2026/2025)项目地址https://gitcode.com/GitHub_Trending/mo/modern-software-dev-assignments点击查看免费下载本指南围绕开源仓库modern-software-dev-assignments中 week7/README.md 所介绍的「Week 7 增强型全栈 Starter」展开该工程是从 Week 5 复制并升级而来的 FastAPI SQLite SQLAlchemy 全栈示例专为 CS146S 课程中「基于 Graphite 的 AI 代码审查」等 Agent 驱动开发练习提供载体。读完本文你将掌握该 Starter 的完整启动流程、前后端目录结构、测试与代码规范命令并深入理解它对 Week 5 的四大后端增强点——模型时间戳、列表接口的分页与排序、可选过滤器以及 PATCH 局部更新——在源码层面的具体实现。Week 7 Starter 是什么Week 7 的 Starter 是一个「略微增强的全栈起始工程」官方描述为Slightly enhanced full-stack starter (copied from Week 5) with a few backend improvementsweek7/README.md。它保留了一套无需任何 Node 工具链的轻量架构FastAPI 后端 SQLiteSQLAlchemy ORM数据库与应用逻辑全部由 Python 驱动静态前端由 FastAPI 直接托管不引入 Node 构建流程最小化测试pytest覆盖核心路由与抽取逻辑Pre-commitblack ruff提交前自动完成格式化与静态检查。该工程是 week7/assignment.md 中四类开发任务新增端点与校验、扩展抽取逻辑、新增模型与关系、增强分页排序测试的载体任务明细见 week7/docs/TASKS.md。相比 Week 5 的四大后端增强README 明确列出 Starter 相对 Week 5 的增强点week7/README.md这些增强均可直接在源码中得到印证模型上的时间戳created_at、updated_at——在 backend/app/models.py 中通过TimestampMixin实现created_at创建时自动写入defaultdatetime.utcnowupdated_at更新时自动刷新onupdatedatetime.utcnow两者均nullableFalse保证每行记录都带有审计信息。Note与ActionItem两个模型均继承该 Mixin因此所有列表响应都会携带时间戳字段见 backend/app/schemas.py 中的NoteRead/ActionItemRead。列表接口的分页与排序——GET /notes/与GET /action-items/均支持skip、limit、sort三个查询参数backend/app/routers/notes.py、backend/app/routers/action_items.pylimit通过Query(50, le200)约束最大 200默认 50sort默认-created_at字段前加-表示降序如sorttitle、sort-updated_at排序字段会经hasattr(ActionItem, sort_field)校验非法字段自动回退到desc(created_at)避免注入式排序。 从源码可见SQL 层使用 SQLAlchemy 的select().offset().limit()与asc/desc构造最终通过db.execute(...).scalars().all()取回结果。可选过滤器——例如按完成状态过滤 Action Itemcompleted参数为Optional[bool]仅在非None时追加ActionItem.completed.is_(completed)条件backend/app/routers/action_items.py笔记列表则支持q关键字对标题与内容执行contains模糊匹配backend/app/routers/notes.py。PATCH 局部更新端点——PATCH /notes/{note_id}与PATCH /action-items/{item_id}接受NotePatch/ActionItemPatch字段全部可选只更新传入的非None字段backend/app/routers/action_items.py。此外 Action Item 还保留PUT /action-items/{item_id}/complete一键完成端点未找到资源时返回404。快速启动QuickstartREADME 给出三条命令即可跑通整个应用week7/README.md路径按当前仓库调整为week7/cd week7 python -m venv .venv source .venv/bin/activate pip install -e .[dev]依赖以可编辑模式安装[dev]额外引入测试与代码质量工具pytest、black、ruff 等见仓库根目录 pyproject.toml。可选步骤是安装 pre-commit 钩子pre-commit install钩子配置见 week7/pre-commit-config.yaml由 black 与 ruff 组成。启动应用cd week7 make run启动后前端页面http://localhost:8000API 交互文档Swagger UIhttp://localhost:8000/docsmake run实际执行week7/MakefilePYTHONPATH. uvicorn backend.app.main:app --reload --host ${HOST:-127.0.0.1} --port ${PORT:-8000}即通过HOST/PORT环境变量可覆盖默认监听地址与端口。应用入口 backend/app/main.py 在启动事件中调用Base.metadata.create_all(bindengine)建表并执行apply_seed_if_needed()完成首次种子数据写入。目录结构README 对工程结构的划分如下week7/README.md结合源码可进一步细化week7/ ├── backend/ # FastAPI 应用 │ └── app/ │ ├── main.py # 应用入口静态托管 路由注册 启动建表/播种 │ ├── db.py # SQLAlchemy engine、Session、种子逻辑 │ ├── models.py # Note / ActionItem 模型 TimestampMixin │ ├── schemas.py # Pydantic 创建/读取/补丁模型 │ ├── routers/ # notes 与 action_items 路由 │ └── services/ │ └── extract.py # Action Item 文本抽取逻辑 ├── frontend/ # 静态 UI由 FastAPI 托管 ├── data/ # SQLite 数据库 seed.sql 种子脚本 ├── docs/ │ └── TASKS.md # Agent 驱动开发任务清单 ├── Makefile # run / test / format / lint / seed ├── pre-commit-config.yaml # black ruff 钩子 ├── README.md ├── assignment.md # 课程作业说明 └── writeup.md # 作业结果记录静态前端通过app.mount(/static, StaticFiles(directoryfrontend))挂载根路径/返回frontend/index.htmlbackend/app/main.py。测试与代码质量运行测试cd week7 make test对应命令为PYTHONPATH. pytest -q backend/testsweek7/Makefile。现有测试覆盖两类行为backend/tests/test_action_items.py一次完整走通「创建 → 完成 → 按completed/limit/sort过滤查询 → PATCH 更新」的端到端链路并断言响应携带created_at/updated_atbackend/tests/test_extract.py验证 backend/app/services/extract.py 能把以TODO:、ACTION:开头或以!结尾的行识别为 Action Item。格式化与静态检查cd week7 make format # black . ruff check . --fix cd week7 make lint # ruff check .两条命令分别对应week7/Makefileformat先跑 black 再让 ruff 自动修复lint仅做检查。另有make seed可手动触发种子写入其实现为调用backend.app.db.apply_seed_if_needed()week7/Makefile。配置项数据库路径等环境变量README 指出复制.env.example为.env位于week7/内即可覆盖默认配置如数据库路径week7/README.md。该机制由 backend/app/db.py 落地load_dotenv()在导入时加载.envDEFAULT_DB_PATH os.getenv(DATABASE_PATH, ./data/app.db)决定 SQLite 文件位置随后以sqlite:///{DEFAULT_DB_PATH}构造 engine并传入check_same_threadFalse以兼容 FastAPI 的多线程请求模型。apply_seed_if_needed()backend/app/db.py的行为是仅当数据库文件首次创建时才读取data/seed.sql并按;拆分逐条执行避免重复播种。可用字段归纳如下环境变量默认值说明DATABASE_PATH./data/app.dbSQLite 数据库文件路径HOST127.0.0.1uvicorn 监听地址由 Makefile 读取PORT8000uvicorn 监听端口由 Makefile 读取与 Week 7 作业的结合方式该 Starter 被设计为 week7/assignment.md 的练习基座你需要针对 week7/docs/TASKS.md 中的四个任务新增端点与校验、扩展抽取逻辑、新增模型与关系、增强分页排序测试各建独立分支、用 AI 工具实现、逐行人工审查后开 PR并用 Graphite Diamond 生成 AI 代码审查最终将过程与反思写入 week7/writeup.md。上文的四大后端增强正是任务 1端点与校验与任务 4分页排序测试的现成参照实现——例如你可以在list_items的分页/排序模式backend/app/routers/action_items.py基础上扩展新的过滤维度也可以模仿TimestampMixinbackend/app/models.py为新增模型追加审计字段。常见问题排查要点前端打不开确认未改端口并检查frontend/目录是否位于week7/下——main.py以相对路径挂载静态目录需保证启动工作目录为week7。依赖缺失报错确保使用pip install -e .[dev]而非普通安装否则 pytest/black/ruff 不可用安装需在激活的 venv 内执行。种子数据未生效apply_seed_if_needed仅在数据库文件首次创建时执行如需重播种先删除data/app.db后重启应用或运行make seed。排序不生效sort参数只接受模型真实存在的属性名非法字段会静默回退为按created_at降序请核对Note/ActionItem的列名backend/app/models.py。赞分享示例工程【免费下载链接】modern-software-dev-assignmentsAssignments for CS146S: The Modern Software Dev (Stanford University Fall 2026/2025)项目地址https://gitcode.com/GitHub_Trending/mo/modern-software-dev-assignments点击查看免费下载相关推荐Spring Boot 整合 BeetlSQL 实战基于 beetl-framework-starter 的 CRUD 与分页方案Spring Boot 整合 BeetlSQL 实战基于 beetl framework starter 的 CRUD 与分页方案 本篇技术指南以 sprin示例工程后端FastAPI 请求体更新实战PUT 全量替换与 PATCH 部分更新FastAPI 请求体更新实战PUT 全量替换与 PATCH 部分更新 导读 在 FastAPI 中更新资源通常有两种方式用 PUT 做 全量替换 或用后端Web框架API设计SQLModel 与 FastAPI 实战使用 PATCH 与 sqlmodel_update() 安全地部分更新数据SQLModel 与 FastAPI 实战使用 PATCH 与 sqlmodel_update 安全地部分更新数据 本指南基于 SQLModel 官方教程ORM数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考