:::warning 📌 施工中 :::

Before Beginning

  • 前置知识需求: CS61A, 或掌握至少一门编程语言(如Python)的扎实基础,理解函数、类、简单数据结构(列表、字典、集合等)、递归等核心编程概念, 畅通的网络环境, 了解Python的基础写法, 基本的英语阅读能力, 提问的艺术, 基础CLI操作

第一部分: 后端基础 (Python + FastAPI + SQLModel)

教学目标(一)

  • 快速上手: 让学生在几小时内,从零开始搭建起一个功能完整的 CRUD (增删改查) API。
  • 建立自信: 通过 FastAPI 强大的自动文档和 SQLModel 的易用性,让学生感受到现代工具带来的便捷,消除对后端的畏难心理。
  • 文档阅读: FastAPI 有着非常用户友好的文档, 利用它来培养阅读文档的习惯. 这也是本教程选择SQLModel而不是SQLAlchemy的原因之一
  • 正确使用AI: 不要让Copilot变成Copybot
  • 整个教程的每个模块会维护和精进同一个项目(不与 Project 1 相同, 教程项目更倾向于教学示范)
  • 理解或掌握以下知识:
  1. 路由函数 (Routing) 与 HTTP 方法 (GET, POST, PUT, DELETE)。
  2. SQL, ORM 与数据库操作 (CRUD)。
  3. API-服务-数据 的基本三层架构模式。
  4. 中间件 (Middleware) 的作用。
  5. 基本的安全思想.
  6. 基本的单元测试和集成测试概念和写法
  7. 配置管理: 学会分离开发, 测试, 生产环境
  8. 学会现代部署: 掌握使用 Docker 和 Docker Compose 对应用进行容器化部署的基本技能。
  9. 学会阅读框架文档
  10. 基本的 Git 团队协作能力

课程大纲(一)

Lab 0

模块一: 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层, 服务层, 路由层.
  • 如何避免过度设计
  • 拓展阅读:

模块四: 中间件

  • 中间件基本概念
  • 中间件一般应用场景
  • 错误处理中间件(统一错误响应格式)
  • 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