Flask扩展&它的配置

时间:2013-12-29 00:02:52

标签: python flask

我在查找运行带扩展程序配置参数的Flask应用程序的pythonic方法时遇到了一些麻烦。

这是我的myapp/__init__.py,它初始化了烧瓶应用及其扩展名:

from flask import Flask
from flask.ext.script import Manager
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.redis import Redis

app = Flask(__name__)

manager = Manager(app)
db = SQLAlchemy(app)
redis = Redis(app)

我决定将应用程序的配置存储在单独的文件中以进行调试和部署,并使用Flask.config.from_pyfile加载它们。

配置文件有几个选项,包括:

SQLALCHEMY_DATABASE_URI = "sqlite:////tmp/test.db"
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_DB = 0

我使用Flask-Script来运行服务器:

from myapp import app, manager

@manager.command
def debug():
    app.config.from_pyfile("debug.cfg")
    app.run()

虽然SQLAlchemy工作正常(在/tmp/test.db创建一个SQLite数据库),但我还没有运行Redis实例,因为它似乎很难在REDIS_HOST之前找到app.config甚至从配置文件加载。

有没有办法绕过它而不必在从文件导入配置之前硬编码默认设置?

1 个答案:

答案 0 :(得分:3)

是的,如果您将app传递给Redis()构造函数,则需要加载配置。

推迟传递app,加载配置后调用redis.init_app(app)

app = Flask(__name__)

manager = Manager(app)
db = SQLAlchemy()
redis = Redis()

def attach_extensions(app):
    db.init_app(app)
    redis.init_app(app)

然后加载配置时:

from myapp import app, manager, attach_extensions

@manager.command
def debug():
    app.config.from_pyfile("debug.cfg")
    attach_extensions(app)
    app.run()