🧪 实战 Python Flask 开发
照着《实战 Python Flask 开发》(佐藤昌基、平田哲也 監修,寺田學 著,衛宮紘 譯,碁峯資訊 GOTOP 繁体中文版,原版 SE SHOEISHA,副题「基礎知識 × 物件偵測 × 機器學習應用」)做的自学笔记 —— 这本书的路子很特别:它不教语法,直接教你交一个能上线的应用。第 0 章装环境、第 1 章写 hello,第 2 章就上数据库和增删改查,第 3 章做注册登录,中间只隔了二十来页;然后一路做完一整个物件侦测 Web 应用(传图、检测、打标签、搜索、报错页、单元测试),再把它改成 API、装进 Docker、部署到 Google Cloud Run,最后用逻辑回归从头做一个机器学习 API。五块节奏是「先能跑,再能改,最后能上线」:绪论 4 篇(第 0 章,Flask 是什么、和 Django/Bottle/FastAPI 怎么比、环境怎么装)→ Flask 入门 21 篇(1~3 章,MVT、路由、模板、表单、Flash、会话,再到 SQLAlchemy 增删改查与登录验证)→ 实作① 16 篇(4~11 章,完整物件侦测应用,从页面规格做到单元测试与覆盖率)→ 实作② 10 篇(12~15 章,包成网络 API、Docker 打包、Cloud Run 部署)→ 机器学习 API 8 篇(16~17 章,逻辑回归的数学式与代码,再改造成带错误码和请求校验的产品级 API)。三句话:路由函数返回的不是字符串,是响应,状态码、请求头、Cookie 都在响应里,make_response 之后才看得见;请求一来就进应用上下文,出函数就没了,数据库会话、current_user、url_for 全靠它活着;能跑起来不等于能交付,错误码分得清、参数校验得住、映像打得出来、容器跑得起来。教材 17 章、93 个二级节,底下还挂着约 232 个三级节,按节成篇会碎成一百多篇,所以按主题合成 59 篇、篇号章内顺排(第 0 章就是 0.1~0.4,不动它的编号)。沙箱是 Windows / Python 3.13.14,这次把 Flask 全家桶装齐了:Flask 3.1.3、Werkzeug 3.1.9、Jinja2 3.1.6、SQLAlchemy 2.1.6、flask-sqlalchemy 3.1.1、flask-migrate 4.1.0、flask-wtf 1.3.0、WTForms 3.3.2、flask-login 0.6.3、alembic 1.20.1、pytest 9.2.0、python-dotenv 1.2.4,另加 Pillow 12.3.0、numpy 2.5.2、scikit-learn 1.9.1——能真跑的全真跑,而且是真的发请求:用 app.test_client() 走与真服务器同一条处理链(路由匹配、请求解析、模板渲染、会话、重定向、状态码),真建应用、真发 GET/POST、真写数据库、真断言 302 与 404。只有四类照实标:桌面软件(Python 安装界面、VS Code 插件、Docker Desktop、GCP 控制台)标「平台原样 · 本沙箱不执行」;需要 GPU 与权重的(PyTorch/YOLO)用纯 Python 复刻「输入图片、输出标签框」的语义并注明;要联网的(Cloud Run、GCR、Gmail SMTP)讲清命令与参数、不假装跑过;教材用 Flask 2.x 写的写法(FLASK_ENV、before_first_request、app.json_encoder)逐个给出「原书写法 / 现在怎么写」对照。
内容来自我的 Obsidian 自学笔记 · 全书 18 章(第 0~17 章)、共 59 篇已全部写完 · 全书完结 🎉
第0章 Flask 的概要与环境架设
Flask 的设计思想:一个不替你做决定的框架
微框架只给路由和模板,其余自己选
Django、Bottle、FastAPI 与 Flask 的取舍
四个框架的分界线是替你决定多少
装 Python、建虚拟环境、装 Flask
虚拟环境隔离依赖,flask 命令跑起来
VS Code、代码检查器与 .gitignore
编辑器三件套:解释器、检查器、格式化
第1章 建立最基础的应用程序
MVT 模型:Model、View、Template 各管什么
M 管数据、V 管逻辑、T 管长相
最小可运行应用与除错模式
一个 app 实例加一个路由就是应用
.env 与环境变量:配置不能写死在代码里
配置进环境变量,代码里只读
路由:URL 规则、变量与转换器
URL 规则写在装饰器里,变量带转换器
模板引擎 Jinja2 与 url_for
模板继承省重复,url_for 防断链
表单与请求内容
GET 拿查询串,POST 拿表单,都要…
Flash 消息与日志记录
flash 只活一跳,日志要分五级
Cookie、Session 与 Response
会话靠签名 Cookie,响应才是真返回…
第2章 建立数据库应用程序
目标架构与 Blueprint 分模块
蓝图把一堆路由装成一个包
项目骨架:FLASK_APP、模型、模板与静态文件
FLASK_APP 指到工厂函数,模板静…
设置 SQLAlchemy
一个 db 对象绑一个数据库地址
定义模型、初始化与迁移
模型即表,迁移即版本控制
SQLAlchemy 基本数据操作
add 只是挂进会话,commit 才落…
CRUD 之一:新增与列表
表单类、端点、模板,三件套一次成型
CRUD 之二:编辑与删除
改要取出旧值,删要先去子表
模板通用化与配置管理
base 收公共布局,配置类收公共开关
第3章 建立验证功能
验证功能的目标架构与 Blueprint 登录
蓝图挂上前缀,验证功能独立成块
flask-login:让应用认识谁在登录
flask-login 要四样:加载器…
注册功能:端点、模板与必须登入
注册三件事:查重、哈希、登录
登录功能:校验与状态保持
登录就是校验加 login_user
登出与登录状态显示
登出清会话,页面才敢显示状态
第4章 应用程序的规格与准备
第5章 建立图片列表页面
第6章 建立注册与登录页面
第7章 建立图片上传页面
第8章 建立物件侦测功能
UserImageTags 模型与检测程序库
标签单独一张表,检测库单独一个模块
检测端点:从图片到标签
端点四件事:取图、推理、存标签、回页面
列表页显示标记与删除功能
列表页拼查询,删除要连带文件
第9章 建立搜索功能
第10章 建立自定义错误页面
第11章 建立单元测试
pytest 入门:测试、断言与失败信息
断言失败信息比断言本身更重要
fixture 与 conftest.py
fixture 是依赖注入,confte…
给应用写测试并输出覆盖率
覆盖率看的是漏测,不是分数
第12章 网络 API 的概要
第13章 物件侦测 API 的规格
第14章 实作物件侦测 API
第15章 部署物件侦测应用
Docker:把环境一起打包
镜像等于代码加依赖加系统
Cloud Run 与 GCP 准备
Cloud Run 只认容器,按请求计费
步骤 1~3:配置、Dockerfile、建置映像
Dockerfile 四行起步:FROM…
步骤 4~5:推上 GCR、部署到 Cloud Run
打标、推送、部署,三步都要项目号
第16章 机器学习概要
机器学习的概念、资料与任务
机器学习就是从数据里找那个函数
数学式与代码表达
公式落到代码,就是几行矩阵乘
逻辑回归:NumPy 手写与 sklearn 对照
逻辑回归三步:sigmoid、交叉熵、梯…