使用 Python 从 0 开发属于你的个人管理系统 05 篇 | 蓝图的构建使用

我们知道,项目代码的结构越清晰,模块化管理越好,对我们以后的扩展和优化起到很大的作用。所以项目一开始,项目的结构组织还是很关键的,比如不同的功能,如何拆分好它们,但又能使用到相同的资源?又可以做到相互独立,也就是我们常说的「低耦合,高内聚」。

今天还要给你介绍的是 Flask 的项目结构组织方式,那就是 Flask 的蓝图——Blueprints。

什么是 Blueprints

Blueprints 是 Flask 提供的一个类,通过它可以创建蓝图,用于注册在 Flask 实例中,便于对自模块的管理,有效的提供了分离,共享应用程序的配置。

也就是说,你可以通过 Flask 创建实例 APP 来直接操作各种请求,但如果项目的功能比较多功能,我们需要归类好它们,比如你的项目有后台管理系统,也有前端使用的页面,那么就要我们可以分别为他们创建一个蓝图,前端有前端的操作方式和样式,后台管理有后台的统一操作,这样就可以做到具体每个蓝图得到统一管理操作,我们的程序就会很清晰。

蓝图的使用

蓝图的创建

我们可以在项目文件中,创建一个蓝图 package,用它来管理不同的模块,像这样这样:

blueprints
├── __init__.py
├── admin.py
├── auth.py
└── home.py

其中,admin 是后端的蓝图模块,auth 是用户认证的蓝图模块,home 是前端的蓝图模块。这样我们就可以分别在里面做相关的操作。

比如一个关于 admin 的蓝图你可以这样创建:

admin
├── __init__.py
├── views.py
├── templates
└── form.py

那这里面的操作也好,样式也好,都是可以统一到 admin 的,也可以和其他模块独立开来。

那么蓝图怎么写呢?我们以「前端蓝图」模块 home 为例,在 home.py 中定义模块:

from flask import Blueprint

home_bp = Blueprint('home', __name__)

@home_bp.route('/index')
def index():
    return '这是首页'
  
@home_bp.route('/hi')
def hi():
    return '你好啊啊!!'

在这里,我们首先导入了蓝图,通过它创建了 home_bp 实例,其中传入的第一个参数是蓝图的名称,第二个参数是

本文隐藏内容 登陆 后才可以浏览
你甚至可以让静态资源文件都独立于具体的蓝图下,也就是说,你可以在蓝图包下创建子包,在子包中统一管理各个蓝图的资源。

这样的目录:

blueprints
├── __init__.py
├── admin.py
├── auth.py
└── home.py

可以变成这样:

.
├── __init__.py
├── admin.py
├── auth.py
└── home
   ├── __init__.py
   ├── home.py
   ├── static
   │   └── home.css
   └── templates
       └── home.html

那么这时候你想要引用这些资源,可以在创建蓝图的时候会默认定义:

home_dp = Blueprint('home', __name__, template_folder='tempaltes', static_folder='static')

OK,以上就是 Flask 蓝图中的常用操作,接下来我们会使用到它,我们下一篇再见,peace!

发表回复