随笔 - 2649  文章 - 2452  评论 - 0  阅读 - 80424

Flask 蓝图 (Blueprints)

Flask 蓝图 (Blueprints)

Flask 的蓝图(Blueprints)是一种组织代码的机制,允许你将 Flask 应用分解成多个模块。这样可以更好地组织应用逻辑,使得应用更具可维护性和可扩展性。

每个蓝图可以有自己的路由、视图函数、模板和静态文件,这样可以将相关的功能分组。

通过使用蓝图,你可以将 Flask 应用拆分成多个模块,每个模块处理相关的功能,使得代码更加清晰和易于管理。

  1. 创建蓝图:在独立的模块中定义蓝图,并指定路由和视图函数。

  2. 注册蓝图:在主应用中注册蓝图,并设置路由前缀。

  3. 使用蓝图中的模板和静态文件:将模板和静态文件放在蓝图的 templatesstatic 文件夹中。

  4. 使用请求钩子和错误处理:在蓝图中定义请求钩子和错误处理函数。

  5. 1. 创建蓝图

  6. 创建蓝图涉及到以下几个步骤:

  7. 定义蓝图:在一个独立的模块(文件)中定义蓝图。

  8. 注册蓝图:在主应用中注册蓝图,使其生效。

  9. 假设我们要创建一个博客应用,其中包含用户管理和博客功能,我们可以将这些功能分成两个蓝图:auth 和 blog。

  10. 项目结构:

  11. yourapp/
    │
    ├── app.py
    ├── auth/
    │   ├── __init__.py
    │   └── routes.py
    │
    └── blog/
        ├── __init__.py
        └── routes.py
    
  12. 2. 定义蓝图

  13. auth/routes.py 文件代码:

  14. 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')
    
  15. Blueprint('auth', name):创建一个名为 auth 的蓝图。

  16. 蓝图中定义的路由函数可以用来处理请求。

  17. blog/routes.py 文件代码:

  18. 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}'
    
  19. Blueprint('blog', name):创建一个名为 blog 的蓝图。

  20. 3. 注册蓝图

  21. app.py 文件代码:

  22. 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
  23. 4. 使用蓝图中的模板和静态文件

  24. 蓝图中的模板和静态文件应放在蓝图的文件夹下的 templates 和 static 子文件夹中。

  25. 项目结构:

  26. yourapp/
    │
    ├── app.py
    ├── auth/
    │   ├── __init__.py
    │   ├── routes.py
    │   └── templates/
    │       ├── login.html
    │       └── register.html
    │
    └── blog/
        ├── __init__.py
        ├── routes.py
        └── templates/
            ├── index.html
            └── post.html
    
  27. 5. 在蓝图中使用请求钩子

  28. 蓝图支持请求钩子,例如 before_requestafter_request,可以在蓝图中定义这些钩子来处理请求和响应。

  29. auth/routes.py 文件代码:

  30. @auth.before_app_request
    def before_request():
        # 执行在每个请求之前的操作
        pass
    
    @auth.after_app_request
    def after_request(response):
        # 执行在每个请求之后的操作
        return response
    
  31. 6. 在蓝图中定义错误处理

  32. 蓝图也可以定义自己的错误处理函数。

  33. blog/routes.py 文件代码:

  34. @blog.errorhandler(404)
    def page_not_found(error):
        return 'Page not found', 404
    
posted on   AtlasLapetos  阅读(17)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示