如何使用烧瓶基础导入应用程序?

时间:2014-12-23 14:44:48

标签: python flask

我正在使用Flask foundation开始我的新烧瓶应用。

init .py文件有一个方法:

def create_app(object_name, env="prod"):
    """
    An flask application factory, as explained here:
    http://flask.pocoo.org/docs/patterns/appfactories/

    Arguments:
        object_name: the python path of the config object,
                     e.g. sservice.settings.ProdConfig

        env: The name of the current environment, e.g. prod or dev
    """

    app = Flask(__name__)

    app.config.from_object(object_name)
    app.config['ENV'] = env

    #init the cache
    cache.init_app(app)

    debug_toolbar.init_app(app)

    #init SQLAlchemy
    db.init_app(app)

    login_manager.init_app(app)

    # Import and register the different asset bundles
    assets_env.init_app(app)
    assets_loader = PythonAssetsLoader(assets)
    for name, bundle in assets_loader.load_bundles().iteritems():
        assets_env.register(name, bundle)

    # register our blueprints
    from controllers.main import main
    app.register_blueprint(main)

    return app

在manage.py中导入。

但是如果我需要使用此app变量来访问应用程序中的模块中的应用程序配置?我不能在请求上下文之外使用current_app。创造一个是丑陋的。

我需要在 models.py 文件中添加一个app变量:

在models.py

# how to import? Below doesn't work
from appname import app

# access config
print(app.config)

我无法调用此方法create_app,因为它应该只调用一次来创建应用程序。您无需在任何时候导入该应用。我该怎么解决这个问题?

我只想在包外面使用create_app()一次给它wsgi服务器,但我不想在包中使用它。

1 个答案:

答案 0 :(得分:0)

现在为我工作的是什么:

只要没有current_app(我想在请求上下文之外),只需使用这样的东西

app = Flask(__name__)
app.config.from_object('appname.settings_file.DevConfig')
print(app.config)