web-dev-qa-db-de.com

Wie teilt man flask app in mehrere py-dateien auf?

Meine Flaschenanwendung besteht derzeit aus einer einzelnen test.py-Datei mit mehreren Routen und der definierten main()-Route. Gibt es eine Möglichkeit, eine test2.py-Datei zu erstellen, die Routen enthält, die nicht in test.py behandelt wurden?

@app.route('/somepath')
def somehandler():
    # Handler code here

Ich mache mir Sorgen, dass es zu viele Routen in test.py gibt und möchte es so machen, dass ich python test.py ausführen kann, das auch die Routen von test.py abholt, als ob es Teil derselben Datei wäre. Welche Änderungen muss ich in test.py vornehmen und/oder in test2.py einfügen, damit dies funktioniert?

97
Rolando

Sie können die übliche Python-Paketstruktur verwenden, um Ihre App in mehrere Module zu unterteilen, siehe die Flask-Dokumente.

Jedoch,

Flask verwendet ein Konzept von Blaupausen, um Anwendungskomponenten zu erstellen und gängige Muster innerhalb einer Anwendung oder zwischen Anwendungen zu unterstützen.

Sie können eine Unterkomponente Ihrer App als Blueprint in einer separaten Datei erstellen:

simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
    # stuff

Und dann im Hauptteil verwenden:

from yourapplication.simple_page import simple_page

app = Flask(__name__)
app.register_blueprint(simple_page)

Blaupausen können auch bestimmte Ressourcen bündeln: Vorlagen oder statische Dateien. Weitere Informationen finden Sie in den Flask docs .

114
pixelistik

Ich möchte flask-empty bei GitHub empfehlen.

Es bietet eine einfache Möglichkeit, Blueprints , mehrere Ansichten und Erweiterungen zu verstehen.

14
Jonathan Prates

Die Aufteilung der App in Blaupausen ist eine großartige Idee. Wenn dies jedoch nicht ausreicht und Sie den Blueprint selbst in mehrere py-Dateien unterteilen möchten, ist dies auch mit dem regulären Python-Modul-Importsystem möglich. Anschließend werden alle Routen durchlaufen, die aus den anderen Dateien importiert werden .

Ich habe eine Gist mit dem Code dafür erstellt:

https://Gist.github.com/Jaza/61f879f577bc9d06029d

Soweit mir bekannt ist, ist dies derzeit die einzige Möglichkeit, einen Blueprint aufzuteilen. Es ist nicht möglich, "Unter-Blaupausen" in Flask zu erstellen, obwohl ein Thema offen ist, das viele Diskussionen darüber enthält:

https://github.com/mitsuhiko/flask/issues/593

Selbst wenn dies möglich wäre (und es ist wahrscheinlich möglich, einige der Ausschnitte aus diesem Ausgabe-Thread zu verwenden), sind Sub-Blueprints für Ihren Anwendungsfall ohnehin zu einschränkend - z. wenn Sie nicht möchten, dass alle Routen in einem Untermodul das gleiche URL-Unterpräfix haben.

4
Jaza

Sie können wie Django teilen. Siehe unten skelett 

https://github.com/rohitchormale/cookiecutter-flask

0
userx