Moin bin recht neu bei flask und finde einfach keine Möglichkeit views via import auszulagern!
Meine jetzige Anwendungen wird langsam etwas unübersichtlich
Weiß da jemand vielleicht eine Lösung?
Flask view auslagern?
Naja ich wollte als Beispiel
In eine separaten Datei Beispiel route.py auslagern.
Und in der main.py dann mit Import route einfügen.
Ich glaube das blueprints hier die Lösung ist… werde es heute Abend dann mal ausprobieren.
So wie beschrieben habe ich aber kein Erfolg.
Code: Alles auswählen
@app.route("/")
def home():
return "Hello World!"
Und in der main.py dann mit Import route einfügen.
Ich glaube das blueprints hier die Lösung ist… werde es heute Abend dann mal ausprobieren.
So wie beschrieben habe ich aber kein Erfolg.
Beschreiben ist halt so ein Ding. Es sind genug erfolgreiche Aufteilungen auf verschiedene Module beschrieben. Sagt also genau gar nix. Da musst du schon konkret zeigen, was *genau* du gemacht hast, und was *genau* die Fehlermeldungen oder unerfuellten Erwartungen sind. Sonst kann man da nur mit den Achseln zucken.
route ist ein Decorator von Flask (wenn ich die Doku da richtig verstanden habe, kommt das eigentlich von Werkzeug). Interne Sachen von Flask auszulagern macht irgendwie gar keinen Sinn...
also das funktioniert jedenfalls.... (die Deklaration der Routen ist zwar immer noch in einer Datei, aber die 'ganz lange' Routine für die Beta-Welt ist ausgelagert in eine eigene Unit)
Code: Alles auswählen
# alpha_omega.py
from flask import Flask
from beta import beta_world
app = Flask(__name__)
@app.route("/")
def hello_world():
return """<p>Hello, World!</p>
<p>goto Planet <a href="/alpha">Alpha</a></p>
<p>goto Planet <a href="/beta">Beta</a></p>
<p>goto Planet <a href="/gamma">Gamma</a></p>
<p>goto Planet <a href="/delta">Delta</a></p>
"""
@app.route("/alpha")
def alpha_world():
return """<p>Alpha</p>
<p>Rücksturz zur <a href="/">Heimatwelt</a>"""
@app.route("/beta")
def beta():
return beta_world()
@app.route("/gamma")
def gamma_world():
return """<p>GAMMA</p>
<p>Rücksturz zur <a href="/">Heimatwelt</a>"""
@app.route("/delta")
def delta_world():
return """<p>delta</p>
<p>Rücksturz zur <a href="/">Heimatwelt</a>"""
Code: Alles auswählen
# beta.py
def beta_world():
return """<p>ausgelagertes Beta</p>
<p>Rücksturz zur <a href="/">Heimatwelt</a>"""
Hey genau das war mein Vorhaben die Deklaration habe ich dann wie hier im Video auch noch aus der „Main.py“ bekommen.grubenfox hat geschrieben: ↑Sonntag 9. April 2023, 14:17 also das funktioniert jedenfalls.... (die Deklaration der Routen ist zwar immer noch in einer Datei, aber die 'ganz lange' Routine für die Beta-Welt ist ausgelagert in eine eigene Unit)
Code: Alles auswählen
# alpha_omega.py from flask import Flask from beta import beta_world app = Flask(__name__) @app.route("/") def hello_world(): return """<p>Hello, World!</p> <p>goto Planet <a href="/alpha">Alpha</a></p> <p>goto Planet <a href="/beta">Beta</a></p> <p>goto Planet <a href="/gamma">Gamma</a></p> <p>goto Planet <a href="/delta">Delta</a></p> """ @app.route("/alpha") def alpha_world(): return """<p>Alpha</p> <p>Rücksturz zur <a href="/">Heimatwelt</a>""" @app.route("/beta") def beta(): return beta_world() @app.route("/gamma") def gamma_world(): return """<p>GAMMA</p> <p>Rücksturz zur <a href="/">Heimatwelt</a>""" @app.route("/delta") def delta_world(): return """<p>delta</p> <p>Rücksturz zur <a href="/">Heimatwelt</a>"""
Code: Alles auswählen
# beta.py def beta_world(): return """<p>ausgelagertes Beta</p> <p>Rücksturz zur <a href="/">Heimatwelt</a>"""
https://youtu.be/WteIH6J9v64
ach.. "Tech with Tim" habe ich auch kürzlich für mich entdeckt. Ich bin da aber aktuell bei den Videos mit "AI" im Titel unterwegs.
Dass Blueprint auch einen route-Decorator zur Verfügung stellt war mir jetzt nicht bekannt. Daher war mein erster Versuch beim obigen Code auch schon in beta.py mit zu arbeiten. Dazu musste ich in beta.py das app aus dem Hauptprogramm importieren und damit dann das beta auch irgendwie im Hauptprogramm wieder bekannt war auch beta.py importieren und schon war der zirkuläre Import da und das will man nun wirklich nicht...
Wobei die Deklaration(en) der ausgelagerten Dinge bekommt man dann mit den Blueprints weg, aber dafür hat man dann die „app.register_blueprint“-Zeilen in der main.py .... irgendeine Verbindung zu den ausgelagerten Python.Dateien braucht es ja immer.
Dass Blueprint auch einen route-Decorator zur Verfügung stellt war mir jetzt nicht bekannt. Daher war mein erster Versuch beim obigen Code auch schon in beta.py mit
Code: Alles auswählen
@app.route("/beta")
Wobei die Deklaration(en) der ausgelagerten Dinge bekommt man dann mit den Blueprints weg, aber dafür hat man dann die „app.register_blueprint“-Zeilen in der main.py .... irgendeine Verbindung zu den ausgelagerten Python.Dateien braucht es ja immer.
Ja korrekt aber ich hab nur eine Zeile blueprint pro XY.py
Code: Alles auswählen
app.register_blueprint(blueprintXY)
als Beispiel dann
Code: Alles auswählen
@blueprintXY.route("/comment/")
...
@blueprintXY.route("/posts/")
...
@blueprintXY.route("/whatever/")
...
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Zirkulären Import zwischen zwei Modulen kann man oft auch durch ein drittes Modul beseitigen. Also in diesem Fall eines wo das (globale) `app`-Objekt erstellt wird und das von den anderen beiden Modulen dann importiert wird.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman