上节回顾
- 为什么项目需要结构化拆分?
- 怎么引入配置文件到flask的核心app上的方法?
- 循环导入的原因?
蓝图(blueprint)
- 什么是蓝图?
定义单个应用视图与静态资源。有点类似于公司的组织架构。
- 蓝图的作用是什么?
参照上图,蓝图最大的好处就是把不同的应用拆成不同的组件,这样结构清晰,便于阅读和管理。
- 继续拆分结构
- 在工程目录下新建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
- 将其注册到flask的核心app上
- 运行结果
http://127.0.0.1:8888/book
- 这样虽然能解决循环导入的问题,也能实现功能,但是只要有一个业务模块,我们就需要实例化一个新的蓝图,这样是不是也不好,尤其是对英文不好的同学是一个硬伤,那么我们怎么解决这个问题呢?其实方法很简单,只要把实例化蓝图的过程放在
web.__init__.py
下就可以了。 book.py
文件
- 引入
from app.web import web
user.py
文件
- 引入
from app.web import web
app.__init__.py
文件注册蓝图
- 引用
from app.web import web
- 运行结果
http://127.0.0.1:8888/book
http://127.0.0.1:8888/user
- 将配置文件
config.py
也拆分到结构中
- 新建
app.config
模块 - 新建
secure.py
和setting.py
-
setting.py
包含一些普通配置,比如说页码数等 secure.py
包含一些敏感数据,比如说数据库密码等
- 将配置信息注册到flask的核心app上
- 启动程序