我正在学习使用flask和flask_mongoengine创建一个网站。遵循Flask教程1.0.2版本。但是我遇到了一个问题,如何实现get_db()
和close_db()
函数?
当前,我正在做的是:
myapp.py
....
def create_app():
app = Flask(__name__)
from db import db
db.init_app(app)
@app.route('/')
def home():
...
return app
db.py
from flask import g
from flask_mongoengine import MongoEngine
db = MongoEngine()
def get_db():
g.db = ???
return g.db
def close_db():
db = g.pop('db', None)
if db is not None:
??? # db.close() doesn't exist!!!
我对如何执行此部分感到非常困惑。有人可以提出建议吗?在flask_mongoengine教程页面中,它们没有实现get_db()
和close_db()
...
答案 0 :(得分:1)
之所以会出现混乱,是因为这些教程中的编程模式太多。在flask-1.0.2教程中,他们使用getter方法模式,但是flask-mongoengine依赖于将数据库引导到flask-app-instance,而后者依赖于构建器模式— Flask Application Factories。它可能仍然令人困惑,但是我将向您展示它是如何实现的。
在create_app中引导烧瓶烧瓶引擎:
def create_app(test_config=None):
app = Flask(__name__)
# configure mongo settings here like in flask-mongoengine docs
g.db = db = MongoEngine()
db.init_app(app)
def get_db():
return g.db
def close_db():
pass
close_db()
是什么?好吧,如果您选择的数据库需要关闭一些清理操作,则该功能存在。但是我在mongoengine文档中没有找到任何明确提及mongoengine db连接需要您执行清理操作才能关闭的操作,因此您可以通过它。