我正在使用:
创建一个烧瓶实例应用/的初始化的.py:
def create_app(config_name):
app = Flask(__name__)
mongo = PyMongo(app)
...
return app
manage.py
app = create_app(Config.FLASK_CONFIG)
manager = Manager(app)
应用程序开始使用:
python manage.py runserver
在视图中,我想访问在app中创建的mongo实例。知道如何访问应用程序周围的PyMongo包装器吗?
答案 0 :(得分:1)
在__init__.py
中,将app和mongo初始化为None
。
app = None
mongo = None
在setup.py
中创建一个单独的application
模块,然后在那里移动create_app工厂函数。这种方法的原因是将Flask应用程序实例和mongo实例绑定到您的应用程序包。
此外,重构app工厂将数据库工厂与它分开,因为我们需要保留数据库实例。
import application
def create_app(config_name):
app = Flask(__name__)
....
return app
def create_mongo(app):
return PyMongo(app)
app = create_app(Config.FLASK_CONFIG)
# bind to application package
application.app = app
application.mongo = create_mongo(app)
在manage.py
中,重写此内容以使用在setup.py
模块中创建的应用实例。
from application.setup import app
manager = Manager(app)
Mongo实例可以直接从应用程序包导入,因为实例早先绑定到了安装程序包中。
from application import mongo
您可能想知道初始化PyMongo实例会将pymongo
注册为您的烧瓶应用程序中的扩展名。
连接和数据库绑定到config_prefix
密钥,其默认值为已注册扩展中的'MONGO'
。它们都可以像这样检索:
cx, db = app.extensions['pymongo']['MONGO']