Flask 蓝图 (Blueprints)
Flask 蓝图 (Blueprints)
Flask 的蓝图(Blueprints)是一种组织代码的机制,允许你将 Flask 应用分解成多个模块。这样可以更好地组织应用逻辑,使得应用更具可维护性和可扩展性。
每个蓝图可以有自己的路由、视图函数、模板和静态文件,这样可以将相关的功能分组。
通过使用蓝图,你可以将 Flask 应用拆分成多个模块,每个模块处理相关的功能,使得代码更加清晰和易于管理。
-
创建蓝图:在独立的模块中定义蓝图,并指定路由和视图函数。
-
注册蓝图:在主应用中注册蓝图,并设置路由前缀。
-
使用蓝图中的模板和静态文件:将模板和静态文件放在蓝图的
templates
和static
文件夹中。 -
使用请求钩子和错误处理:在蓝图中定义请求钩子和错误处理函数。
-
1. 创建蓝图
-
创建蓝图涉及到以下几个步骤:
-
定义蓝图:在一个独立的模块(文件)中定义蓝图。
-
注册蓝图:在主应用中注册蓝图,使其生效。
-
假设我们要创建一个博客应用,其中包含用户管理和博客功能,我们可以将这些功能分成两个蓝图:auth 和 blog。
-
项目结构:
-
yourapp/ │ ├── app.py ├── auth/ │ ├── __init__.py │ └── routes.py │ └── blog/ ├── __init__.py └── routes.py
-
2. 定义蓝图
-
auth/routes.py 文件代码:
-
from flask import Blueprint, render_template, request, redirect, url_for auth = Blueprint('auth', __name__) @auth.route('/login') def login(): return render_template('login.html') @auth.route('/logout') def logout(): return redirect(url_for('auth.login')) @auth.route('/register') def register(): return render_template('register.html')
-
Blueprint('auth', name):创建一个名为 auth 的蓝图。
-
蓝图中定义的路由函数可以用来处理请求。
-
blog/routes.py 文件代码:
-
from flask import Blueprint, render_template blog = Blueprint('blog', __name__) @blog.route('/') def index(): return render_template('index.html') @blog.route('/post/<int:post_id>') def post(post_id): return f'Post ID: {post_id}'
-
Blueprint('blog', name):创建一个名为 blog 的蓝图。
-
3. 注册蓝图
-
app.py 文件代码:
-
from flask import Flask app = Flask(__name__) # 导入蓝图 from auth.routes import auth from blog.routes import blog # 注册蓝图 app.register_blueprint(auth, url_prefix='/auth') app.register_blueprint(blog, url_prefix='/blog') if __name__ == '__main__': app.run(debug=True)
-
app.register_blueprint(auth, url_prefix='/auth')
:注册auth
蓝图,并将所有的路由前缀设置为/auth
。app.register_blueprint(blog, url_prefix='/blog')
:注册blog
蓝图,并将所有的路由前缀设置为/blog
。
-
4. 使用蓝图中的模板和静态文件
-
蓝图中的模板和静态文件应放在蓝图的文件夹下的 templates 和 static 子文件夹中。
-
项目结构:
-
yourapp/ │ ├── app.py ├── auth/ │ ├── __init__.py │ ├── routes.py │ └── templates/ │ ├── login.html │ └── register.html │ └── blog/ ├── __init__.py ├── routes.py └── templates/ ├── index.html └── post.html
-
5. 在蓝图中使用请求钩子
-
蓝图支持请求钩子,例如 before_request 和 after_request,可以在蓝图中定义这些钩子来处理请求和响应。
-
auth/routes.py 文件代码:
-
@auth.before_app_request def before_request(): # 执行在每个请求之前的操作 pass @auth.after_app_request def after_request(response): # 执行在每个请求之后的操作 return response
-
6. 在蓝图中定义错误处理
-
蓝图也可以定义自己的错误处理函数。
-
blog/routes.py 文件代码:
-
@blog.errorhandler(404) def page_not_found(error): return 'Page not found', 404
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具