Python 现代开发学习笔记

(四)用应用工厂生成不同配置的应用

同一份书架程序需要打开真实数据文件,也需要在测试中使用临时库。先从一个只改变书架名称的工厂观察配置隔离。

# 项目文件:demos/factory_demo.py
from flask import Flask, current_app


def create_app(label="我的书架"):
    app = Flask(__name__)
    app.config["SHELF_LABEL"] = label

    @app.get("/")
    def index():
        # 每次请求读取正在处理它的应用配置。
        return {"label": current_app.config["SHELF_LABEL"]}

    return app


if __name__ == "__main__":
    first, second = create_app("阅读书架"), create_app("测试书架")
    print(first.test_client().get("/").json)
    print(second.test_client().get("/").json)

create_app 每次新建一个 Flask 对象,登记自己的路由并返回。app.config 是配置映射;两次调用返回两个独立应用,因此分别输出“阅读书架”和“测试书架”。current_app 在调用时指向当前应用,函数没有把第一个 app 固定在全局。

Flask 命令能够找到名为 create_app 的工厂并调用。完整项目仍按“配置 → 登记功能 → 返回应用”的顺序组织,数据库连接留到实际使用时再取得。工厂模式的接口见 Flask 应用工厂。

同一工厂分别创建阅读应用和测试应用,各自保存配置与路由,请求进入哪个应用就读取哪个 current_app

笔记正文与全部题解 · Ctrl / ⌘ K