2017-12-30 24 views
1

Ich habe Code in meiner Flask-App eingerichtet, der einige Datenbankeinträge in Mongo initialisiert und Cron-Jobs plant. Wie kann ich dies beim Start des Servers ausführen, nicht aber beim Ausführen von Tests?Flask-Setup-Code einmal ausgeführt, aber nicht während der Tests

ist mein Projekt strukturiert:

/crypto 
    __init__.py 
    main.py 
    /templates 
    /statis 
    /tests 
     tests.py 

wo das App-Objekt und Setup-Code in main.py und sieht aus wie

app = Flask(__name__) 

... 

with app.app_context(): 

    # do database setup 

    # do cron job setup 

Mein test.py Bedürfnis from crypto import main ausführen, um das App-Objekt zuzugreifen, aber die Akt des Importierens führt auch den Setup-Code, den ich nicht will. Gibt es etwas, das mir strukturell hier fehlt, das das lösen würde?


@Hi Ich bin Frogatto, habe ich versucht, if __name__ == "__main__": um den Setup-Code hinzufügen, aber dann, dass Code nicht ausgeführt, wenn ich den Server lokal mit flask run starten.

Antwort

1

Wenn der Python-Interpreter eine .py Datei liest (zum Beispiel wenn Sie import it), wird es alle seinen Code sofort ausführen. Also, um ein Stück Code auszuführen, wenn die .py Datei das Hauptmodul des Programms ist es, würden Sie Ihren Setup-Code in dem Körper der folgenden if setzen müssen:

if __name__ == "__main__": 
    # setup here. 

Diese if stellt sicher, dass Ihr Setup-Code wird ausgeführt, wenn die Datei .py das Hauptmodul ist, das ausgeführt werden soll.

+0

danke für die Antwort! Ich habe es versucht, aber 'flash run' führt den Code in diesem Abschnitt nicht aus. – Mike

+0

@Mike Es gibt viele Optimierungen, die Sie anwenden können, um das Problem zu lösen: (1) Führen Sie den Server im Code aus, der keine 'flash run' CLI verwendet. [Beispiel] (https://github.com/openshift-quickstart/flask-example/blob/master/wsgi/myflaskapp.py). (2) Vermeiden Sie den Import von 'main.py', indem Sie _the common_ part trennen und diesen Common Part aus' main.py' importieren und das zweite Modul, aus dem Sie 'main.py' importieren wollen. (3) Verwenden Sie CLI, um den Server zu initialisieren. [Beispiel] (http://flask.pocoo.org/docs/0.12/tutorial/dbinit/). –

Verwandte Themen