入门篇教学大纲
📌
施工中
Before Beginning
- 前置知识需求: CS61A, 或掌握至少一门编程语言(如 Python)的扎实基础,理解函数、类、简单数据结构(列表、字典、集合等)、递归等核心编程概念,畅通的网络环境,了解 Python 的基础写法,基本的英语阅读能力,提问的艺术,基础 CLI 操作
教学目标
- 快速上手:让学生在几小时内,从零开始搭建起一个功能完整的 CRUD (增删改查) API。
- 建立自信:通过 FastAPI 强大的自动文档和 SQLModel 的易用性,让学生感受到现代工具带来的便捷,消除对后端的畏难心理。
- 文档阅读: FastAPI 有着非常用户友好的文档,利用它来培养阅读文档的习惯。这也是本教程选择 SQLModel 而不是 SQLAlchemy 的原因之一
- 正确使用 AI: 不要让 Copilot 变成 Copybot
- 整个教程的每个模块会维护和精进同一个项目 (不与 Project 1 相同,教程项目更倾向于教学示范)
- 理解或掌握以下知识:
- 路由函数 (Routing) 与 HTTP 方法 (GET, POST, PUT, DELETE)。
- SQL, ORM 与数据库操作 (CRUD)。
- API - 服务 - 数据 的基本三层架构模式。
- 中间件 (Middleware) 的作用。
- 基本的安全思想.
- 基本的单元测试和集成测试概念和写法
- 配置管理:学会分离开发,测试,生产环境
- 学会现代部署:掌握使用 Docker 和 Docker Compose 对应用进行容器化部署的基本技能。
- 学会阅读框架文档
- 基本的 Git 团队协作能力
课程大纲
Lab 0
- 前后端的基本概念,后端是什么
- VSCode 配置,环境变量,Python 虚拟环境,PEP 规范和类型标注
- uv Python 环境管理
- Git 基本配置,Github
- ...
模块一: API 和 HTTP
- API 和 路由函数
- 路径参数和查询参数
- HTTP, GET 和 POST 方法
- 请求体和数据校验 (pydantic)
- API 文档 (展示 FastAPI 的自动生成的 Swagger 文档)
- ...
- 作业:
- 阅读文档,找到如何使用 FastAPI 构造一个上传文件的接口.
- 通过阅读文档,发现并解决 FastAPI 中路由函数先后定义产生的问题.
- 拓展阅读:
- HTTP MDN, 图解 HTTP
- RESTful API 和 WebSocket
- API 测试工具
- ...
模块二: 数据库
- SQL 语句:手动使用 SQL 来进行基础的查询和数据库操作
- ORM 与模型: ORM 概念,使用 SQLModel,定义第一个数据模型。
- 连接数据库:使用 SQLite 作为入门数据库,配置数据库连接。
- 实现 CRUD: 编写完整的增、删、改、查四个 API 接口。
- 数据库事务的概念和重要性 (ACID), SQLModel 的 session
- 索引设计
- 作业:
- 提供一个复杂的数据库 ER 图,要求编写几个不同复杂度的 SQL 查询语句,覆盖连接 (JOIN), 分组 (GROUP BY), 子查询等。
- 用 ORM 的关系预加载优化一个 N+1 查询问题.
- 拓展阅读:
- SQL, NoSQL(MongoDB, Redis, Neo4j)
- 索引,外键,多对多...
- alembic 等数据库同步工具
- ACID、CAP 和 BASE
- 软删除
- SQL 注入
- ...
模块三: 代码的规范化
- 问题引入:当业务逻辑变复杂时,所有代码都写在路由函数里的坏处。
- 重构代码:引入三层架构思想,把先前的代码清晰分为 API 层,服务层,路由层.
- 如何避免过度设计
- 拓展阅读:
- IoC 和 依赖注入
- 22 种设计模式
- SOLID 原则
- 领域驱动设计
- ...
模块四: 中间件
- 中间件基本概念
- 中间件一般应用场景
- 错误处理中间件 (统一错误响应格式)
- CORS 中间件
- 作业:
- 编写一个简单的记录 API 日志的中间件,统计请求处理时长.
- 实现自定义异常处理中间件
- 拓展阅读:
- ...
模块五:基本的安全思想
- JWT Token
- passwd_hashed
- CORS
- 环境变量管理敏感信息
- 永远不要相信用户的输入
- ...
- 作业:
- 实现一个完整的注册登陆流程,密码哈希存储
- 利用中间件实现 API 的 Token 鉴权
- ...
- 拓展阅读:
- ...
模块六:交付你的第一个后端服务 (容器化)
- Docker 入门:讲解什么是 Docker, 它解决了什么问题.
- Dockerfile: 为 FastAPI 应用编写一个 Dockerfile
- Docker Compose
- 作业:
- ...
- 拓展阅读:
- 除了 Docker 以外的容器,Podman, container.d
- CI/CD, Github Actions
- ...
Project 1: 电子书商城
- 与前端组协调,后端小组与前端小组共同完成电子书商城项目.
- 要求:
- 强制使用 Feature Branch 工作流
- 编写有意义的 Commit Message
- 团队成员之间需要进行 Code Review