-1

我正在学习使用 flask 和 flask_mongoengine 创建一个网站。按照flask教程1.0.2版本。但是我遇到了一个问题,如何实现get_db()andclose_db()功能?

目前,我正在做的是:

我的应用程序.py

....
def create_app():
    app = Flask(__name__)

    from db import db
    db.init_app(app)

    @app.route('/')
    def home():
        ...

    return app

数据库.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()and close_db()...

4

1 回答 1

2

因为在那些教程中有太多的编程模式,所以会发生混乱。在flask-1.0.2 教程中,他们使用getter 方法模式,但是flask-mongoengine 依赖于将db 引导到flask-app-instance,而flask-app-instance 依赖于构建器模式——Flask Application Factories。它可能仍然令人困惑,但我会告诉你它是如何完成的。

在create_app中引导一个烧瓶-mongoengine :

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()?好吧,如果您选择的 db 需要关闭一些清理操作,则该功能存在。但是我在 mongoengine 文档中没有发现任何明确提到 mongoengine db 连接需要你的清理操作才能关闭,所以你可以通过它。

于 2019-01-31T10:09:00.147 回答