上节回顾

  • 为什么项目需要结构化拆分?
  • 怎么引入配置文件到flask的核心app上的方法?
  • 循环导入的原因?

蓝图(blueprint)

  • 什么是蓝图?
    定义单个应用视图与静态资源。有点类似于公司的组织架构。
  • 蓝图设计系统架构 蓝图结构图_实例化

  • 蓝图的作用是什么?
    参照上图,蓝图最大的好处就是把不同的应用拆成不同的组件,这样结构清晰,便于阅读和管理。
  • 蓝图设计系统架构 蓝图结构图_配置文件_02

  • 继续拆分结构
  • 在工程目录下新建app模块,在app模块下新建模块web
  • 将flask的核心app迁移到app下的__init__.py
  • 启动文件 index.py
  • user.py 文件迁移到app.web下,并写入如下代码
  • 引入Blueprint蓝图类
  • 实例化蓝图,第一个参数蓝图名称,第二个参数 模块名称或者文件名称,一般默认为__name__
  • 路由则用 实例化的蓝图对象.route() 实现
  • 注册蓝图到flask的核心对象app中
  • 运行结果 http://127.0.0.1:8888/user
  • 这样我们就解决了循环导入问题了。
  • 我们在继续优化结构。
  • 我们在app.web下新建book.py
  • 蓝图设计系统架构 蓝图结构图_配置文件_03


  • 将其注册到flask的核心app上
  • 运行结果 http://127.0.0.1:8888/book
  • 这样虽然能解决循环导入的问题,也能实现功能,但是只要有一个业务模块,我们就需要实例化一个新的蓝图,这样是不是也不好,尤其是对英文不好的同学是一个硬伤,那么我们怎么解决这个问题呢?其实方法很简单,只要把实例化蓝图的过程放在web.__init__.py下就可以了。
  • book.py 文件
  • 引入 from app.web import web
  • 蓝图设计系统架构 蓝图结构图_实例化_04


  • user.py 文件
  • 引入 from app.web import web
  • app.__init__.py 文件注册蓝图
  • 引用 from app.web import web
  • 蓝图设计系统架构 蓝图结构图_flask_05


  • 运行结果
  • http://127.0.0.1:8888/book
  • 蓝图设计系统架构 蓝图结构图_flask_06


  • http://127.0.0.1:8888/user
  • 蓝图设计系统架构 蓝图结构图_flask_07


  • 将配置文件 config.py 也拆分到结构中
  • 新建 app.config 模块
  • 新建 secure.pysetting.py
  • setting.py 包含一些普通配置,比如说页码数等
  • secure.py 包含一些敏感数据,比如说数据库密码等
  • 将配置信息注册到flask的核心app上
  • 启动程序