蓝图
蓝图(Blueprint)用于把路由、模板、静态文件和错误处理器按功能模块组织,是 Flask 项目从单文件走向工程化的关键工具。蓝图本身不是应用,注册到应用后其内容才生效,因此同一套蓝图也可以复用到多个应用实例。
定义蓝图
第一个参数 "blog" 是蓝图名,决定端点命名空间;url_prefix 让该蓝图所有路由自动带上 /blog 前缀。
注册蓝图
在工厂函数内部导入并注册(延迟导入),可以避免循环导入问题。
端点命名空间
蓝图中的端点名为 蓝图名.视图名:
蓝图自带模板与静态文件
蓝图模板目录的优先级低于应用全局 templates/。惯例是在蓝图模板目录里再嵌套一层同名子目录(templates/blog/list.html)避免命名冲突。
蓝图级钩子与错误处理
注意:404 这类在路由匹配阶段就产生的错误不属于任何蓝图,只能由应用级 errorhandler 处理。
嵌套蓝图
Flask 2.0+ 支持蓝图嵌套,适合构建带版本的 API:
组织建议
- 按业务域拆分蓝图(auth、blog、admin、api),而不是按技术层。
- 每个蓝图一个包,内含
views.py、models.py、forms.py等。 - 蓝图保持对应用对象零依赖(不要
from app import app),只依赖current_app。