如题。
今天在看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
大概意思就是,方便大量生產 app。你用這個
create_app
函數方法可以建立萬千上萬個 app。例子中工廠函數
create_app
的真正目的其實只有一個————根據應用的不同使用場景來使用不同的配置,核心是為了實現:因此,要把應用的實例建立的過程交給工廠函數,透過工廠函數選擇你所要使用的配置,來創建適用於不同環境下的應用
補充wslshanlin的回答。
如果將
create_app
中的程式碼挪到全域命名空間(也就是manager.py)中,會出現多個app的config發生衝突等莫名其妙的問題。
這麼做的目的在於:
檢定。你可以使用多個應用程式的實例,為每個實例分配分配不同的配置, 從而測試每一種不同的情況。
多個實例。想像以下情景:您需要同時運行同一個應用的不同版本,您當然可以在你的網絡伺服器中配置多個實例並分配不同的配置,但是如果你使用工廠函數, 你就可以在一個隨手即得的進程中運行這一個應用的不同實例了!