Wie kann ich eine app-Fabrik in Flasche / WSGI-Server, und warum sollte es unsicher sein?

Eine Frage zu app-callables, WSGI-Server und Kolben zirkuläre Importe

Ich bin (möglicherweise) verwechselt. Ich will sicher anlegen Kolben /WSGI-apps
von app-Fabriken und noch in der Lage sein, um Sie in WSGI-Server ganz einfach.

tl;dr

  1. Kann ich sicher zu vermeiden, erstellen Sie eine app, die auf den import von init (als
    empfohlen)aus, und erstellen Sie stattdessen später (dh mit einer factory-Methode)

  2. Wie mache ich, dass die app funktioniert ordentlich mit einem WSGI-server? Besonders
    wenn ich bin vorbei und in der config andere Einstellungen nicht ziehen Sie
    aus ENV

Beispiel::

def make_app(configdict, appname):
    app = Flask(appname)
    app.config.update(configdict)
    init_db(configdict)
    set_app_in_global_namespace(app)

    #importing now will allow from pkg import app        
    from mypackage import views

    return app

Ich würde gerne die oben genannten "Fabrik", denn ich will einfach contorl config für Tests usw.

Ich dann vermutlich anlegen möchten wsgi.py Modul, stellt die app zu einem WSGI-server.

So schließlich die Dinge sehen ein bisschen aus wie diese

init.VJ::

app = None

def make_app(configdict, appname):
    flaskapp = Flask(appname)
    flaskapp.config.update(configdict)
    init_db(configdict)

    global app
    app = flaskapp    

    #importing now will allow from pkg import app        
    from mypackage import views

    return flaskapp

wsgi.py::

from mypackage import app

app = make_app(configfromsomewhere, "myname")

uWSGI::

uwsgi --module=mypackage.wsgi:app

Aber noch wsgi.py ist NICHT etwas, was ich nennen kann, wie wsgi.py --Einstellungen=x --host=10.0.0.1
Also ich weiß wirklich nicht, wie pass die config in.

Ich Frage, weil während dies scheint ... OK ... es ist auch ein bisschen chaotisch.

Leben war einfacher, als alles, was in der ENV.

Nicht nur, aber auch:

Was ist also unsicher über die Verwendung eines app-Fabrik

Den Rat gegeben here <http://flask.pocoo.org/docs/patterns/packages>_
ist ::

1. the Flask application object creation has to be in the
__init__.py file. That way each module can import it safely and
the __name__ variable will resolve to the correct package.

2. all the view functions (the ones with a route() decorator on
  top) have to be imported in the __init__.py file. Not the object
  itself, but the module it is in. Import the view module after
  the application object is created.

re: 2., klar die route decorator erwartet bestimmte Fähigkeiten aus
instantiierte app und kann nicht ohne funktionieren. Das ist gut.

re: 1., OK, wir brauchen die Namen richtig. Aber was ist unsicher ? Und
warum? Ist es unsicher, zu importieren und verwenden Sie die app, wenn es ist uninitialised?
Nun, es wird brechen, aber das ist nicht unsicher.
Ist es die viel beschworene thread-lokalen? Evtl. Aber wenn ich am zupfen
app-Instanzen wohl oder übel von random Module sollte ich erwarten, dass Schwierigkeiten.

Auswirkungen - wir verweisen nicht auf das app-Objekt aus alles andere als die Aussicht - im wesentlichen halten wir unsere Modularisierung schön und dicht, und pass around
dicts -, Fehler-Objekte, oder auch WebObs.

http://flask.pocoo.org/docs/patterns/appdispatch
http://flask.pocoo.org/docs/deploying/#deployment
http://flask.pocoo.org/docs/patterns/packages/#larger-applications
http://flask.pocoo.org/docs/becomingbig

Schreibe einen Kommentar