首頁  >  問答  >  主體

设计模式 - python flask 工厂函数?

如题。

今天在看flask web,说到了工厂函数,不是很理解,请大神来指教一下,上源码。

app/init.py:程序包的构造文件

from flask import Flask, render_template
from flask.ext.bootstrap import Bootstrap
from flask.ext.mail import Mail
from flask.ext.moment import Moment
from flask.ext.sqlalchemy import SQLAlchemy
from config import config

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)

    return app
PHPzPHPz2716 天前689

全部回覆(3)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 15:06:33

    大概意思就是,方便大量生產 app。你用這個 create_app 函數方法可以建立萬千上萬個 app。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 15:06:33

    例子中工廠函數 create_app 的真正目的其實只有一個————根據應用的不同使用場景來使用不同的配置,核心是為了實現:

    app.config.from_object(config[config_name])
    

    因此,要把應用的實例建立的過程交給工廠函數,透過工廠函數選擇你所要使用的配置,來創建適用於不同環境下的應用

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:06:33

    補充wslshanlin的回答。
    如果將
    create_app
    中的程式碼挪到全域命名空間(也就是manager.py)中,會出現多個app的config發生衝突等莫名其妙的問題。

    這麼做的目的在於:

    1. 檢定。你可以使用多個應用程式的實例,為每個實例分配分配不同的配置, 從而測試每一種不同的情況。

    2. 多個實例。想像以下情景:您需要同時運行同一個應用的不同版本,您當然可以在你的網絡伺服器中配置多個實例並分配不同的配置,但是如果你使用工廠函數, 你就可以在一個隨手即得的進程中運行這一個應用的不同實例了!

    回覆
    0
  • 取消回覆