实战路线与学习安排
每次学习的固定动作
- 用自己的话解释本节概念。
- 运行示例,核对预期结果。
- 改一个字段、约束或路径,观察变化。
- 主动提交错误输入,理解错误信息。
- 合上示例,独立重写关键部分。
- 写下一条今天踩过的坑与解决方法。
看懂代码与独立写出代码不是同一步。遇到错误时,先保留完整错误信息,检查自己的声明与实际请求是否一致。
基础学习与数据库专题安排
下面是按每天约 45~90 分钟设计的参考节奏,可根据实际情况放慢。完成能力目标比按日历赶进度更重要。
| 阶段 | 章节 | 主要实践 | 这一阶段的成果 |
|---|---|---|---|
| 第 1 周 | 1~6 | 环境、路由、路径与查询、JSON 模型 | 能写参数清楚的基础接口 |
| 第 2 周 | 7~13 | 校验、响应、异常、依赖、拆分、内存 CRUD | 能独立实现待办事项 API |
| 第 3 周 | 14、25~31 | MySQL、模型、CRUD、条件查询 | 数据可持久化,能独立查询和修改 |
| 第 4 周 | 32~36 | 三种关系、预加载、事务 | 能查询关联记录并保证相关写入一致 |
| 第 5 周及之后 | 15~22、37~40 | 认证、完整接口、迁移、MySQL 测试与部署 | 能完成一个可演示的小项目 |
每周留一天复盘与修复问题。前面基础没有掌握时,先暂停进阶,不必强行学 WebSocket 或分布式任务。
最终项目:多用户学习任务管理
从第 14 章的项目逐步演化,而不是每次从零换一个项目。
| 阶段 | 要增加什么 | 验收方式 |
|---|---|---|
| A:基础接口 | 创建、列表、详情、PUT、PATCH、删除 | 完整走通一次增删改查 |
| B:规则 | 空白标题拒绝、分页、筛选、字段约束 | 合法输入成功,非法输入得到明确错误 |
| C:持久化 | MySQL 表、Tortoise 连接池、事务 | 重启后任务仍能查到 |
| D:多用户 | 注册、登录、当前用户、任务归属 | A 用户不能查看或修改 B 用户任务 |
| E:工程组织 | 多文件、配置、日志、迁移 | 入口清晰,敏感配置在代码外 |
| F:测试与运行 | 接口测试、隔离数据库、正式运行命令 | 测试可重复通过,能按说明准备新环境 |
注册逻辑至少包括用户名规则、重复用户处理、密码哈希;数据库应以唯一约束保障用户名唯一。任务归属必须在后端查询或权限逻辑中检查。
推荐项目结构
text
learning-tasks/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── config.py
│ ├── db.py
│ ├── models.py
│ ├── schemas.py
│ ├── dependencies.py
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── auth.py
│ │ └── todos.py
│ └── services/
│ ├── __init__.py
│ └── todos.py
├── tests/
│ ├── conftest.py
│ ├── test_auth.py
│ └── test_todos.py
├── .env.example
├── .gitignore
├── requirements.txt
└── README.md没有足够复杂业务时,可以先省略 services/,不要为了匹配目录图把一个简单函数拆到很多地方。
最终验收清单
- [ ] 可以在一个新虚拟环境中按说明启动项目。
- [ ] 接口参数来源明确,文档可读。
- [ ] 必填、可省略、可空字段符合业务约定。
- [ ] 创建、读取、更新、删除与分页都能工作。
- [ ] 数据重启后仍在。
- [ ] 密码只以专用哈希保存,响应中没有哈希。
- [ ] 未登录、无权限、资源不存在有合适的状态码。
- [ ] 用户不能访问其他用户的私人任务。
- [ ] PATCH 不会错误覆盖未传字段。
- [ ] 数据库测试使用隔离环境。
- [ ] 能解释自己用了哪些同步和异步工具。
- [ ] 敏感配置不直接写在提交的代码中。
完成这些目标后,你就具备了继续学习更完整后端项目的基础。