Se DEVE coincidere con l'istanza della tua app, allora dovresti creare una sottoclasse di Flask. Questo in realtà non fa molto se tutto ciò che fai è collegare una risorsa all'oggetto, considerando che la creazione dell'app è un processo. La verità è che probabilmente non hai bisogno di farlo se l'applicazione non ha bisogno di usare la tua risorsa durante l'istanziazione.
class MyApp(Flask):
def __init__(self, *args, **kwargs):
setattr(self, 'some_resource', SomeResource())
super(Flask, self).__init__(*args, **kwargs)
app = MyApp(__name__)
app.some_resource.do_something()
A meno che non si dispone di alcuni casi uso specifico, si sono probabilmente meglio a scrivere una classe wrapper, trasformandolo in un pallone-estensione, creando sul livello di modulo e la memorizzazione su app.extensions.
class MyExtensions(object):
def __init__(self, app=None):
self.app = app
if app is not None:
self.init_app(app)
def init_app(self, app):
app.extensions['my_extension'] = SomeResource()
app = Flask(__name__)
my_extension = MyExtension(app)
Poi si può scegliere se si vuole dare ad ogni applicazione la propria risorsa (come sopra), o se si preferisce utilizzare una risorsa condivisa che è sempre rivolta alla applicazione corrente
from flask import _request_ctx_stack
try:
from flask import _app_ctx_stack
except ImportError:
_app_ctx_stack = None
stack = _app_ctx_stack or _request_ctx_stack
class SomeResource(object):
def do_something(self):
ctx = stack.top
app = ctx.app
my_resource = SomeResource()
my_resource.do_something()
non credo che si desidera memorizzare questo sul contesto applicativo, perché "inizia quando l'oggetto viene creata un'istanza Flask, e termina implicitamente quando la prima richiesta è disponibile in"
Invece, si vuole la vostra risorsa creato il il livello del modulo. Quindi puoi allegarlo all'applicazione come estensione, o sì, anche nella configurazione, anche se sarebbe più coerente e logico fare un'estensione veloce.
Perché il contesto dell'applicazione non sembra appropriato? – delnan
Trovo che la documentazione in quest'area sia confusa. Vorrei configurazione queste connessioni in fase di creazione delle applicazioni, ma non riesco a trovare un modo nell'API di farlo. Puoi fornire un esempio? – idbentley
Utilizzare il contesto dell'applicazione. L'esatto caso d'uso che citi è dimostrato nel [docs] (http://flask.pocoo.org/docs/appcontext/) –