使用 Python 从 0 开发属于你的个人管理系统 24 | 使用好你的蓝本,灵活配置

之前给你分享过关于「蓝本」的知识点:一个项目,可以拆分成多个功能,我们可以将它们模块化,使得每个蓝本可以统一管理资源和操作。

你的个人管理系统,肯定不是一个简单的 py 模块就能搞定的事情,所以最好要把蓝本使用起来,让项目更加清晰一些,接下来我会继续给你演示,数据建模好了之后,如何把蓝本用好,以及如何让配置文件写的灵活起来。

通往 Python 高手之路

创建蓝本

根据你的需求,你可以创建多个蓝本,比如现在给你演示的「任务拆分」,我们可以创建两个蓝本,一个是「auth」蓝本,用来统一操作用户的行为,然后再创建一个蓝本,用来统一操作「计划」的行为。

用户蓝本

auth

├── init.py

├── forms.py

└── views.py

这里我们创建了一个 package,这个 package 就是一个蓝本,我们可以在这里面只做用户操作的行为,你还可以在这里创建 static, tempaltes 的静态资源文件,统一管理样式。

同样的,创建 todo 蓝本:

todo

├── init.py

├── forms.py

└── views.py

一个道理,你可以根据你自己的需求创建好相应的蓝本。

注册蓝本

一般在你创建 package 中的 init.py 中,导入 Flask 中的 Blueprint 进行注册,比如这里的 auth 蓝本注册:

from Flask import Blueprint

# 蓝本创建
auth = Blueprint('auth', __name__)

而在这之下可以统一些关于用户的路由,我们统一写到该蓝本下的 views.py 下,比如:

from mysystem import app, db, login_manager
from mysystem.auth import user
from mysystem.auth.forms import SignupForm
from mysystem.models import User


@user.route('/signup', method=['POST'])
def signup():
    form = SignupForm()
    if form.validate_on_submit():
        ....
        
@user.route('/login', method=['POST'])
def login():
        ....

然后在 init.py 中导入它们就好了:

from Flask import Blueprint

# 蓝本创建
auth = Blueprint('auth', __name__)

from . import views

那么在这里 auth 蓝本里所有的操作,都只与用户的操作有关。程序如何识别它们呢?

本文隐藏内容 登陆 后才可以浏览
现在你的配置已经创建好,以后需要别的配置,你只需要在这里面相应对象添加即可,可是如何确切的在不同环境下使用不同的配置呢?

我们之前 app 实例是直接在 init.py 中直接定义的,我们现在使用了这种配置方式就不好这么弄了,我们可以使用 Flask 提供的工厂方法来创建实例,在 init.py 中定义 create_app 方法:

# 工厂方法创建实例
def create_app(config_name):
    # 加载配置
    app = Flask('mysystem')
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    # 注册蓝本
    register_blueprints(app)
    # 注册插件
    register_extentions(app)
    return app

这个方法返回的是一个 app 实例。

这样当 Flask 运行的时候,就会识别这个工厂方法运行,这里面的参数我们定义了 config_name,也就是我们在不同场景下,传入我们定义好的相关参数就能得到相关的配置:

config = {
    "development": DevConfig,
    "testing": TestConfig,
    "production": ProConfig,
    "default": DevConfig,
}

比如我们在测试环境中,就可以这样来获得测试环境下的 app 实例:

create_app("testing")

进而所有的操作只作用于测试环境中。

OK,那么经过这样一番操作之后,你的项目结构会更加清晰,也便于之后的扩展。我们下回见,peace!

发表回复