it-swarm.com.de

Teilen Sie Python Flask app in mehrere Dateien auf

Ich habe Probleme beim Aufteilen einer flask app in mehrere Dateien.

Ich erstelle einen Webdienst und möchte die APIs in verschiedene Dateien aufteilen (AccountAPI.py, UploadAPI.py, ...), nur damit ich keine riesige python) habe Datei.

Ich habe gelesen, dass Sie dies mit Blueprints tun können, bin mir aber nicht ganz sicher, ob diese Route die richtige für mich ist.

Letztendlich möchte ich eine Main python Datei ausführen und andere Dateien mit einbeziehen, so dass sie, wenn sie ausgeführt werden, als eine große Datei betrachtet werden.

Zum Beispiel, wenn ich Main.py und AccountAPI.py habe, möchte ich in der Lage sein, dies zu tun:

Main.py:

from flask import Flask
import AccountAPI

app = Flask(__name__)

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

if __== "__main__":
    app.run()

AccountAPI.py:

@app.route("/account")
def accountList():
    return "list of accounts"

Ich weiß, mit diesem Beispiel wird es offensichtlich nicht funktionieren, aber ist es möglich, so etwas zu tun?

Vielen Dank

71
user1751547

Ja, Blueprints sind der richtige Weg. Was Sie versuchen, können Sie folgendermaßen erreichen:

Main.py

from flask import Flask
from AccountAPI import account_api

app = Flask(__name__)

app.register_blueprint(account_api)

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

if __== "__main__":
    app.run()

AccountAPI.py

from flask import Blueprint

account_api = Blueprint('account_api', __name__)

@account_api.route("/account")
def accountList():
    return "list of accounts"

Wenn dies eine Option ist, können Sie verschiedene URL-Präfixe für die verschiedenen APIs/Blueprints verwenden, um sie sauber voneinander zu trennen. Dies kann mit einer geringfügigen Modifikation des obigen register_blueprint Anruf:

app.register_blueprint(account_api, url_prefix='/accounts')

Weitere Dokumentation finden Sie auch unter die offiziellen Dokumente .

128
cyroxx

Mit Blueprint können Sie Ihre Routen im Verzeichnis routes hinzufügen.

Struktur

app.py
routes
    __init__.py
    index.py
    users.py

__init__.py

from flask import Blueprint
routes = Blueprint('routes', __name__)

from .index import *
from .users import *

index.py

from flask import render_template
from . import routes

@routes.route('/')
def index():
    return render_template('index.html')

users.py

from flask import render_template
from . import routes

@routes.route('/users')
def users():
    return render_template('users.html')

app.py

from routes import *
app.register_blueprint(routes)

Wenn Sie eine neue Routendatei hinzufügen möchten, z. B. accounts.py, Müssen Sie nur die Datei accounts.py Im Verzeichnis routes erstellen, genau wie index.py Und users.py Und dann in die Datei routes.__init__.py Importieren

from .accounts import *
29
Searene

Wenn Sie Blaupausen verwenden und eine URL Ihrer Blaupause in einer Vorlage, die Sie verwenden, weiterleiten möchten, müssen Sie die richtige url_for-Anweisung verwenden.

Wenn Sie in Ihrem Fall das URL-Konto Ihres Bauplans eröffnen möchten, müssen Sie dies in Ihrer Vorlage angeben:

href="{{ url_for('account_api.account') }}"

und für die main app würde es so aussehen:

redirect(url_for('account_api.account'))

Andernfalls wird die werkzeug Bibliothek einen Fehler auslösen.

3
Thomas Krickl

Eine andere Möglichkeit, dies zu tun, ist verzögertes Laden , wobei Sie Ansichtsfunktionen nach Bedarf explizit hinzufügen.

1
Bhaskar