Flask的Blueprint(蓝图)是一种模块化设计工具,能够将复杂应用拆分为独立的功能模块,类似于Django的子应用管理。以下是其核心属性和模块化逻辑的详细说明:
Blueprint的核心属性
-
多蓝图支持
一个Flask项目可以包含多个Blueprint,每个蓝图对应独立的功能模块(如用户管理、文章管理)。例如,用户认证、文章管理等功能可分别封装到不同蓝图中,提升代码组织性。 -
灵活的路由配置
• URL前缀:在注册蓝图时,可通过url_prefix
参数为所有路由添加统一前缀(如/user
),避免路由冲突。
• 子域名支持:通过subdomain
参数实现子域名路由(如blog.example.com
),适用于多站点场景。 -
可重复注册
同一蓝图可多次注册到不同URL路径,实现代码复用。例如,一个API蓝图可同时绑定到/v1
和/v2
路径,支持多版本接口。 -
独立资源管理
每个蓝图可拥有专属的模板目录(template_folder
)和静态文件目录(static_folder
),实现资源隔离。例如,用户模块的模板可存放在user/templates
中。 -
必须注册到应用
蓝图本身无法独立运行,需通过app.register_blueprint()
注册到Flask应用实例后生效。注册操作通常在应用初始化阶段完成。
模块化逻辑示意图(文字描述)
Flask应用实例(App)
├── 蓝图1(Blueprint A)
│ ├── 路由:/moduleA/route1 → 视图函数1
│ ├── 路由:/moduleA/route2 → 视图函数2
│ ├── 模板目录:templates/moduleA
│ └── 静态文件目录:static/moduleA
│
├── 蓝图2(Blueprint B)
│ ├── 路由:/moduleB/route1 → 视图函数3
│ ├── 子域名:sub.moduleB.com → 视图函数4
│ └── 模板目录:templates/moduleB
│
└── 全局配置
├── 注册所有蓝图
└── 统一启动应用
使用示例
- 创建蓝图
```python
# user_controller.py
from flask import Blueprint
user_bp = Blueprint('user', name, url_prefix='/user')
@user_bp.route('/login')
def login():
return "用户登录"
```
- 注册蓝图
```python
# app.py
from flask import Flask
from user_controller import user_bp
app = Flask(name)
app.register_blueprint(user_bp)
```
访问路由
用户登录接口可通过http://127.0.0.1:5000/user/login
访问。