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

如题。

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

一般的な意味は、アプリの量産に便利ということです。この create_app 関数メ​​ソッドを使用して、何千ものアプリを作成できます。

いいねを押す +0
巴扎黑

この例のファクトリー関数 create_app の本当の目的は、実際には 1 つだけです。アプリケーションのさまざまな使用シナリオに応じてさまざまな構成を使用することです。その中心となるのは、次のことです。

リーリー

したがって、アプリケーション インスタンスの作成プロセスをファクトリ関数に渡し、ファクトリ関数を使用して、さまざまな環境に適したアプリケーションを作成するために使用する構成を選択する必要があります

いいねを押す +0
洪涛

wslshanlin の回答を補足します。

create_app
のコードをグローバル名前空間 (つまり、manager.py) に移動すると、複数のアプリの構成が競合するなど、説明できない問題が発生します。

この目的は次のとおりです:

  1. テスト。アプリケーションの複数のインスタンスを使用し、各インスタンスに異なる構成を割り当てて、それぞれの異なるシナリオをテストできます。

  2. 複数のインスタンス。次のシナリオを想像してください。同じアプリケーションの異なるバージョンを同時に実行する必要がある場合は、Web サーバーで複数のインスタンスを構成し、異なる構成を割り当てることができますが、ファクトリ関数を使用すると、このアプリケーションの異なるインスタンスを割り当てることができます。プロセスで実行中です!

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート