2016-11-20 5 views
2

Ich spiele mit Kolben. Meine Verzeichnisstruktur ist wie folgt:Eine Flask-App in mehrere Dateien aufteilen

|--------flask-test 
|----------------app 
|-----------------------static 
|-----------------------templates 
|-----------------------venv 
|-----------------------__init__.py 

Der venv Ordner enthält meine virtuelle Kolben-Installation. Mein __init__.py ist etwa so:

from flask import Flask 
app = Flask(__name__) 
@app.route("/") 
def hello(): 
    return "Hello World!" 
if __name__ == "__main__": 
    app.run() 

Dies ohne Probleme funktioniert aber jetzt würde Ich mag diese in zwei Dateien __init__.py und main.py aufzuspalten. Die main.py wäre im selben Verzeichnis wie __init__.py. Bisher habe ich versucht:

__init__.py:

from flask import Flask 

app = Flask(__name__) 
import main 

main.py:

from app import app 
@app.route("/") 
    def hello(): 
     return "Hello World!" 

Jedoch habe ich eine Störung erhalte, dass das Modul app nicht in main.py existiert dann versuche ich __init__.py zu laufen. Was mache ich hier falsch? Auch wo sollte ich die Run-Methode setzen?

+0

Sie haben einen kreisförmigen Import ... Sie können main nicht in '__init__' importieren. Und setzen Sie die Methode run in main, nachdem Sie die Routen –

Antwort

7

Verwenden Flask Items herzustellen

file1:

from flask import Blueprint, render_template, session,abort 

app_file1 = Blueprint('app_file1',__name__) 
@app_file1.route("/hello") 
def hello(): 
    return "Hello World from app 1!" 

file2:

from flask import Blueprint, render_template, session,abort 

app_file2 = Blueprint('app_file2',__name__) 
@app_file2.route("/world") 
def world(): 
    return "Hello World from app 2!" 

file3

from flask import Flask 
from file1 import app_file1 
from file2 import app_file2 
main_app = Flask(__name__) 
main_app.register_blueprint(app_file1) 
main_app.register_blueprint(app_file2) 
+1

erstellt haben, warum beide Datei1 und Datei2 den Parameter 'app_classifieds' verwenden, sollten sie anders sein? Wäre Datei 3 das "__init __. Py"? Auch wo ist die Laufmethode? – KexAri

+0

Da ich aus einer bestehenden App eingefügt habe, sind Sie richtig. Ich werde Antwort beheben –

+0

Datei 3 könnte __init__.py oder alles, was Sie wollen, zu sein. Es ist der Code, der alle Apps aus mehreren Dateien zu einer einzigen App zusammenführt. Das Prinzip ist das gleiche –

1

ich das Beispiel ein wenig verändert, aber wollen es einfach zu halten so einfach so wie möglich. Struktur sieht wie folgt aus:

app/ 
    __init__.py # empty this time 
    main.py 
    run.py 

In Lauf Sie die App init, legen Sie die Routen aus Haupt- und setzen app.run in __name__ == ‚__main__‘ funktioniert der Trick - weil der gesamte Code, bevor ausgeführt wird.

# in run.py 
from flask import Flask 
app = Flask(__name__) 
from main import * 


if __name__ == '__main__': 
    print app.url_map 
    app.run(debug=True) 

Geben Sie Ihre Routen in main.py an und importieren Sie sie, bevor Sie die App starten.

# in main.py 
from run import app 

@app.route("/") 
def hello(): 
    return "Hello World!" 
+0

Erhalte den Fehler Datei "__init__.py", Zeile 4, in von App Import Haupt ImportError: Kein Modul namens app – KexAri

+0

Feste und aktualisierte Beispiel. – rebeling

Verwandte Themen