第六章:解决循环导入和蓝图

上节回顾

  • 为什么项目需要结构化拆分?
  • 怎么引入配置文件到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.pysetting.py
      • setting.py 包含一些普通配置,比如说页码数等
      • secure.py 包含一些敏感数据,比如说数据库密码等
        在这里插入图片描述
    • 将配置信息注册到flask的核心app上
      在这里插入图片描述
      • 启动程序在这里插入图片描述

    至此,我们本节课结构化拆分和解决循环导入的问题就解决了。如果你更好的意见和建议,欢迎赐教谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值