第八章 总结与延伸
恭喜你完成了整个后台入门教程!本章回顾所学内容,并指出接下来可以探索的方向。
8.1 我们学到了什么
从零开始,我们走完了一个后台应用的完整开发流程:
知识地图
第一章 理解后台 → 前端、后端、数据库是什么,它们怎么配合
第二章 环境搭建 → 安装工具、创建项目、第一次跑起服务
第三章 FastAPI 核心 → 路由、参数、请求体、响应、自动文档
第四章 数据库入门 → SQLite + SQLModel,用 Python 类操作数据库
第五章 增删改查 → CRUD 四个接口,后台的核心工作
第六章 前后端联调 → CORS 跨域、axios 调用、完整数据闭环
第七章 调试技巧 → 看报错、用工具、定位问题
核心技能
| 技能 | 你已经掌握 |
|---|---|
| 搭建后台服务 | 用 FastAPI 创建应用,用 uvicorn 启动 |
| 定义接口 | GET / POST / PUT / DELETE,路径参数、查询参数、请求体 |
| 操作数据库 | 用 SQLModel 定义表、增删改查 |
| 前后端联调 | 处理 CORS、用 axios 请求接口 |
| 调试排错 | 看终端日志、用 /docs 测试、用 Network 面板排查 |
你做了什么
你亲手搭建了一个完整的 Todo 待办事项应用:
┌──────────────────────────────────────────────────┐
│ │
│ Vue 前端 │
│ ├── 输入框 + 添加按钮 │
│ ├── 待办列表(勾选完成 / 点击删除) │
│ └── 通过 axios 调用后端接口 │
│ │
│ FastAPI 后端 │
│ ├── POST /todos → 新增待办 │
│ ├── GET /todos → 查询所有待办 │
│ ├── GET /todos/{id} → 查询单个待办 │
│ ├── PUT /todos/{id} → 修改待办 │
│ └── DELETE /todos/{id} → 删除待办 │
│ │
│ SQLite 数据库 │
│ └── todo 表(id, title, done) │
│ │
└──────────────────────────────────────────────────┘
这个小项目虽然简单,但它涵盖了后台开发最核心的知识。所有复杂的系统,都是在这个基础上扩展的。
8.2 进阶方向
学完了基础,接下来可以根据兴趣探索以下方向(了解即可,不要求掌握):
方向一:用户认证
目前我们的接口是”裸奔”的——任何人都能访问。真实应用需要:
- 注册:新用户创建账号
- 登录:验证用户名和密码,发放 Token
- 鉴权:每次请求带上 Token,后端验证身份
关键词:JWT(JSON Web Token)、OAuth2
方向二:更强大的数据库
SQLite 适合学习和小项目,大型项目通常使用:
| 数据库 | 特点 |
|---|---|
| MySQL | 最流行的关系型数据库 |
| PostgreSQL | 功能最强大的开源关系型数据库 |
| MongoDB | 文档型数据库,存 JSON 格式的数据 |
| Redis | 内存数据库,速度极快,常用于缓存 |
好消息是:SQLModel 切换数据库只需要改一行连接地址,业务代码不用动。
方向三:部署上线
开发完成后,让别人也能访问你的应用:
- 买一台云服务器(阿里云、腾讯云等)
- 把代码上传到服务器
- 用 Docker 或直接运行
- 配置域名和 HTTPS
方向四:AI + 后台
这也是我们这门 AI 应用开发课程最核心的方向:
@app.post("/chat")
def chat(message: str):
# 调用大模型 API(如 OpenAI、通义千问等)
response = call_ai_model(message)
return {"reply": response}
学会了后台开发,你就可以:
- 搭建自己的 AI 聊天接口
- 做 AI 应用的后台服务(管理对话历史、用户数据等)
- 给 AI 应用加上数据库存储(保存聊天记录、用户偏好等)
后台开发 + AI 能力 = 你可以做出完整的 AI 产品。
附录 A:完整项目代码
models.py
from sqlmodel import SQLModel, Field
class TodoCreate(SQLModel):
title: str
done: bool = False
class TodoUpdate(SQLModel):
title: str | None = None
done: bool | None = None
class Todo(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
title: str
done: bool = False
database.py
from sqlmodel import SQLModel, Session, create_engine
DATABASE_URL = "sqlite:///database.db"
engine = create_engine(DATABASE_URL, echo=True)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
def get_session():
with Session(engine) as session:
yield session
main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from sqlmodel import Session, select
from database import create_db_and_tables, engine
from models import Todo, TodoCreate, TodoUpdate
@asynccontextmanager
async def lifespan(app: FastAPI):
create_db_and_tables()
yield
app = FastAPI(lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
def index():
return {"message": "Todo 后台服务已启动"}
@app.post("/todos", status_code=201)
def create_todo(todo: TodoCreate):
with Session(engine) as session:
db_todo = Todo.model_validate(todo)
session.add(db_todo)
session.commit()
session.refresh(db_todo)
return db_todo
@app.get("/todos")
def get_todos():
with Session(engine) as session:
todos = session.exec(select(Todo)).all()
return todos
@app.get("/todos/{todo_id}")
def get_todo(todo_id: int):
with Session(engine) as session:
todo = session.get(Todo, todo_id)
if not todo:
raise HTTPException(status_code=404, detail="待办事项不存在")
return todo
@app.put("/todos/{todo_id}")
def update_todo(todo_id: int, todo_update: TodoUpdate):
with Session(engine) as session:
todo = session.get(Todo, todo_id)
if not todo:
raise HTTPException(status_code=404, detail="待办事项不存在")
todo_data = todo_update.model_dump(exclude_unset=True)
todo.sqlmodel_update(todo_data)
session.add(todo)
session.commit()
session.refresh(todo)
return todo
@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int):
with Session(engine) as session:
todo = session.get(Todo, todo_id)
if not todo:
raise HTTPException(status_code=404, detail="待办事项不存在")
session.delete(todo)
session.commit()
return {"message": "删除成功"}
requirements.txt
fastapi
uvicorn
sqlmodel
Vue 前端关键代码(axios 调用)
import axios from 'axios'
const API = 'http://127.0.0.1:8000'
// 获取所有待办
const res = await axios.get(`${API}/todos`)
// 新增待办
await axios.post(`${API}/todos`, { title: '买牛奶' })
// 修改待办(标记完成)
await axios.put(`${API}/todos/1`, { done: true })
// 删除待办
await axios.delete(`${API}/todos/1`)
附录 B:常用命令速查
| 命令 | 作用 |
|---|---|
pip install fastapi uvicorn sqlmodel | 安装后端依赖 |
pip install -r requirements.txt | 根据清单安装依赖 |
uvicorn main:app --reload | 启动后端(热重载模式) |
uvicorn main:app --reload --port 8001 | 指定端口启动 |
uvicorn main:app --host 0.0.0.0 --port 8000 | 允许外部访问 |
npm install axios | 在 Vue 项目中安装 axios |
npm run dev | 启动 Vue 开发服务器 |
附录 C:推荐学习资源
| 资源 | 链接 |
|---|---|
| FastAPI 官方文档(中文) | https://fastapi.tiangolo.com/zh/ |
| SQLModel 官方文档 | https://sqlmodel.tiangolo.com/ |
| HTTP 状态码大全 | https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status |
| axios 文档 | https://axios-http.com/zh/ |
教程到此结束。 你已经从零开始,理解了后台是什么,搭建了后端服务,操作了数据库,实现了前后端联调。这是一个很好的起点,接下来就可以基于这个基础去构建更复杂的 AI 应用了!