BluePrint
Flask中的蓝图(Blueprint)是一种强大的组织工具,能够将大型应用拆分为可重用的模块化组件
1. 模块化组织
- 用途:将应用按功能拆分为独立模块,提升代码可维护性。
- 示例:
# user/views.py
from flask import Blueprint
user_bp = Blueprint('user', __name__)
@user_bp.route('/login')
def login():return "Login Page"
# blog/views.py
blog_bp = Blueprint('blog', __name__)
@blog_bp.route('/post')
def post():return "Blog Post"
2. 代码复用
- 用途:跨项目共享功能模块,避免重复开发。
- 示例:
# 在另一个项目中导入并注册
from auth.views import auth_bp
app.register_blueprint(auth_bp)
3. 路由拆分
- 用途:分散路由到不同文件,避免单一文件臃肿。
- 示例:
# 主应用注册蓝图
from user.views import user_bp
from blog.views import blog_bpapp.register_blueprint(user_bp)
app.register_blueprint(blog_bp)
4. URL前缀管理
- 用途:统一管理路由前缀,简化路径配置。
- 示例:
# 所有用户相关路由以/user开头
user_bp = Blueprint('user', __name__, url_prefix='/user')@user_bp.route('/profile') # 实际路径:/user/profile
def profile():return "User Profile"
5. 独立静态文件与模板
- 用途:每个蓝图可管理专属资源,避免命名冲突。
- 示例:
admin_bp = Blueprint('admin', __name__,static_folder='admin_static',template_folder='admin_templates'
)
6. 延迟注册
- 用途:动态决定是否启用某些功能模块。
- 示例
if config.get('ENABLE_ADMIN'):app.register_blueprint(admin_bp)
7. 嵌套蓝图
- 用途:构建层次化应用结构,适合复杂项目。
- 示例:
parent_bp = Blueprint('parent', __name__)
child_bp = Blueprint('child', __name__)parent_bp.register_blueprint(child_bp)
app.register_blueprint(parent_bp)
8. 与扩展集成
- 用途:结合Flask扩展(如LoginManager),实现模块化配置。
- 示例:
@user_bp.before_request
def check_auth():if not current_user.is_authenticated:return redirect(url_for('user.login'))