(十六)Flask之蓝图

蓝图

Flask蓝图(Blueprint)是Flask框架中用于组织和管理路由、视图函数以及静态文件的一种机制。它提供了一种将应用程序拆分为更小、可重用组件的方式,使得项目结构更清晰,代码更易于维护。

使用Flask蓝图,可以将相关功能的路由和视图函数打包在一个模块中,并将其注册到主应用中。这样可以实现模块化开发,每个蓝图负责不同的功能或子应用,提高了代码的可读性和可维护性。

一、基本使用:

  1. 创建蓝图对象:使用flask.Blueprint类创建蓝图对象。需要指定蓝图的名称和所在的包或模块。

    from flask import Blueprint
    
    user_op = Blueprint('user', __name__)
    
  2. 定义路由和视图函数:在蓝图对象上使用装饰器来定义路由和对应的视图函数。

    @user_op.route('/login', methods=['GET', 'POST'])
    def login():
        # 处理登录逻辑
        return 'Login Page'
    
  3. 注册蓝图:将蓝图对象注册到主应用中。

    from flask import Flask
    
    app = Flask(__name__)
    app.register_blueprint(user_op)
    

    这样,蓝图中定义的路由和视图函数就会和主应用一起生效了。

二、实战讲解:

使用蓝图的Flask项目的一般目录结构:

在这里插入图片描述

  • account.py文件:

    from flask import Blueprint
    
    ac = Blueprint('ac', __name__)
    
    
    @ac.route('/login')
    def login():
        return 'Login'
    
    
    @ac.route('/logout')
    def logout():
        return 'Logout'
    
    
  • admin.py文件:

    from flask import Blueprint
    
    ad = Blueprint('ad', __name__, url_prefix='/admin')
    
    
    @ad.route('/index')
    def index():
        return 'Admin-Index'
    
    
  • user.py文件:

    from flask import Blueprint
    
    us = Blueprint('us', __name__)
    
    
    @us.before_request
    def auth_():
        print('user-before_request中间件~')
    
    
    @us.route('/info')
    def info():
        return 'Info'
    
    
  • __init__.py文件:

    from flask import Flask
    
    from .account import ac
    from .admin import ad
    from .user import us
    
    app = Flask(__name__)
    
    app.register_blueprint(ac)
    app.register_blueprint(ad)
    app.register_blueprint(us)
    
    
  • manage.py文件:

    from flask_demo.views import app
    
    if __name__ == '__main__':
        app.run()
    
    

通过上述demo项目,可以看出蓝图的三大实用功能:

  1. 做目录结构的划分。

  2. 路由隔离:蓝图允许自定义URL前缀,从而将路由与其他蓝图或主应用程序隔离开。这样可以避免路由冲突,并为各个功能模块提供独立的URL命名空间(蓝图的命名空间还可以通过使用endpoint参数来进一步定制,它允许为蓝图中的路由和视图函数定义自定义名称)。不同蓝图之间的路由可以相互独立存在,提高了代码的灵活性和可扩展性。

    (比如:上述项目访问index路由的话就需要加上路由前缀/admin):

    在这里插入图片描述

  3. 可以给指定蓝图加只对当前蓝图生效的中间件(如:before_request等)。而不是全局的!

    在这里插入图片描述

除这三大实用功能外,蓝图还有以下不得不提到的优点:

  • 错误处理:蓝图可以定义自己的错误处理函数,并捕获特定蓝图范围内的异常。这样可以实现更细粒度的错误处理,并为不同功能模块提供特定的异常处理逻辑。
  • 静态文件和模板管理:蓝图可以包含静态文件和模板文件(上述demo项目创建了对应目录,但是我没用到),使得在多个模块中共享静态资源和模板更加方便。通过指定静态文件夹和模板文件夹,可以实现按需加载和管理静态资源,提高了项目的组织和可维护性。
  • 插件和扩展支持:蓝图可以使用Flask插件和扩展,从而为模块化应用程序提供丰富的功能和功能扩展。通过将插件和扩展与蓝图集成,可以使每个模块具有自己独立的功能和特性,同时又能与其他模块协同工作。

相关推荐

  1. Flask python 开发篇:蓝图的使用

    2023-12-12 20:42:03       20 阅读
  2. Flask开发实战】蓝图与子域名

    2023-12-12 20:42:03       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 20:42:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 20:42:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 20:42:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 20:42:03       20 阅读

热门阅读

  1. 分布式学习一

    2023-12-12 20:42:03       30 阅读
  2. 装饰器的典型行为

    2023-12-12 20:42:03       32 阅读
  3. 在Vue中 .sync作用

    2023-12-12 20:42:03       46 阅读
  4. 升级jdk1.8u391后,加解密部分报错解决

    2023-12-12 20:42:03       51 阅读
  5. 选择法排序

    2023-12-12 20:42:03       38 阅读
  6. 【Flink on k8s】 -- flink kubernetes operator 1.7.0 发布

    2023-12-12 20:42:03       40 阅读
  7. C语言——assert函数

    2023-12-12 20:42:03       40 阅读
  8. webrtc 设置不获取鼠标 启用回声消除

    2023-12-12 20:42:03       36 阅读
  9. 金蝶数据库常用表查询

    2023-12-12 20:42:03       31 阅读
  10. GO设计模式——8、桥接模式(结构型)

    2023-12-12 20:42:03       40 阅读