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

如题。

今天在看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. 多个实例。想象以下情景:您需要同时运行同一个应用的不同版本,您当然可以在你的Web服务器中配置多个实例并分配不同的配置,但是如果你使用工厂函数, 你就可以在一个随手即得的进程中运行这一个应用的不同实例了!

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