Para entender esse erro, você precisa entender o contexto do aplicativo .
É totalmente possível que alguém escreva vários aplicativos Flask que lidem com suas solicitações no mesmo processo. Os documentos fornecem o seguinte exemplo...
from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend
application = DispatcherMiddleware(frontend, {
'/backend': backend
})
Tenha em mente que, neste caso, o aplicativo front-end pode usar diferentes configurações do Mongo, mas usar exatamente o mesmo objeto de extensão do Mongo. Por esse motivo, o Flask não pode assumir qual é o aplicativo "atual" quando você executa um script. Portanto, coisas como
url_for()
, ou muitos dos métodos em extensões como a extensão MongoDB, precisam saber qual aplicativo é o "atual" antes de fazer qualquer coisa. Portanto, sempre que você estiver tentando usar o Flask ou funções de extensão para fazer qualquer coisa além de configurar os próprios aplicativos (com valores de configuração, etc.), você precisa informar explicitamente ao Flask qual é o aplicativo atual para atribuir ao contexto do aplicativo .
Os documentos dão uma maneira que você pode fazer isso ..
# Be careful about recursive imports here
from . import app
from .extention import mongo
@sched.interval_schedule(minutes=1)
def long_running_queries():
with app.app_context():
mongo.db.command("aggregate", "collection", pipeline = "some query" )
Portanto, você precisará criar o próprio objeto app e usar o
with app.app_context()
linha. Dentro dessa instrução with, todas as suas chamadas (como aquelas para o seu ramal Mongo) devem funcionar. Observe que você não precisa fazer nada disso em uma visualização porque o Flask fará tudo isso automaticamente como parte do tratamento de uma solicitação.