使用 Python 从 0 开发属于你的个人管理系统 24 | 使用好你的蓝本,灵活配置
之前给你分享过关于「蓝本」的知识点:一个项目,可以拆分成多个功能,我们可以将它们模块化,使得每个蓝本可以统一管理资源和操作。
你的个人管理系统,肯定不是一个简单的 py 模块就能搞定的事情,所以最好要把蓝本使用起来,让项目更加清晰一些,接下来我会继续给你演示,数据建模好了之后,如何把蓝本用好,以及如何让配置文件写的灵活起来。
创建蓝本
根据你的需求,你可以创建多个蓝本,比如现在给你演示的「任务拆分」,我们可以创建两个蓝本,一个是「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!