设计模式 - python flask 工厂函数?
PHPz
PHPz 2017-04-17 15:04:33
0
3
686

如题。

今天在看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
PHPz
PHPz

学习是最好的投资!

全部回覆(3)
Peter_Zhu

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

巴扎黑

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

app.config.from_object(config[config_name])

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

洪涛

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

這麼做的目的在於:

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!