Как закрыть дб с flask_mongoengine? - PullRequest
0 голосов
/ 31 января 2019

Я учусь использовать колбу и flask_mongoengine для создания веб-сайта.Следуйте учебному руководству по колбе версии 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() ...

1 Ответ

0 голосов
/ 31 января 2019

Путаница возникает из-за того, что в этих руководствах слишком много шаблонов программирования.В уроке о flask-1.0.2 они используют шаблон метода получения, но flask-mongoengine полагается на начальную загрузку экземпляра db в flask-app, который опирается на шаблон компоновщика - Фабрики приложений Flask .Это может все еще сбивать с толку, но я покажу вам, как это должно быть сделано.

Загрузите флеш-монго в 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()?Хорошо, эта функция существует в том случае, если выбранный вами db нуждается в некоторых действиях по очистке, которые необходимо закрыть.Но я не нашел в документации mongoengine никаких явных упоминаний о том, что соединение dongoengine db требует от вас выполнения действий по очистке, чтобы вы могли его просто пропустить.

...