Seite 1 von 1
Flask APP mit Button zur funktionalen Steuerung
Verfasst: Samstag 31. Januar 2026, 12:44
von DL3AD
Hallo in die Runde,
ich habe mal erste Gehversuche mit Flask gemacht , da ich gern eine Steuerung für eine Hardware über den Browser machen möchte.
Eine Desktopapp läuft schon einige Zeit.
Auf der Webseite sind etliche Button zu realisieren und jeder Button soll eine Python Funktion aufrufen.
Habe mal testweise folgendes realisiert.
Code: Alles auswählen
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
return render_template("index.html")
@app.route('/Btn01',methods=['POST', 'GET'])
def fkt01():
print("Button 01 Klick")
return '',204
@app.route('/Btn02',methods=['POST', 'GET'])
def fkt02():
print("Button 02 Klick")
return '',204
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)
und der HTML Teil
Code: Alles auswählen
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Button Test 014</title>
</head>
<body>
<a href="Btn01"><button>Button 01</button></a>
<a href="Btn02"><button>Button 02</button></a>
</body>
</html>
Dass funktionier auch soweit - alles ohne Ajax und Javascript
Frage: Ist dass soweit eine passable Lösung oder gibt es vieleicht Verbesserungsvorschläge.
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Samstag 31. Januar 2026, 18:44
von __blackjack__
Warum GET und POST? Und kann das eventuell Probleme geben weil AFAIK der Browser solche Antworten zumindest bei GET cachen darf‽
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Samstag 31. Januar 2026, 19:07
von noisefloor
Hallo,
man sollte auf Routen nur Methoden akzeptieren, die man wirklich braucht. POST ist im obigen Beispiel ziemlich sinnvoll, weil ja noch nicht mal geprüft wird, ob ein GET oder POST Request angekommen ist. Im obigen Beispiel kann / sollte man mit
Variablen in der Route arbeiten, um Codewiederholungen zu reduzieren.
Ob der Weg mittelfristig der richtige ist - kein sein, kann nicht sein. Dazu ist der Code zu generisch und die tatsächlichen Anforderungen zu undefiniert. Ggf. macht es mehr Sinn, im Browser auf JavaScript und die fetch-API zu gehen. Was am serverseitigen Code gar nicht viel ändert - du brauchst ja nach wie vor Routen, die via `fetch` angesprochen werden und wo was passiert. Es ändert sich eher der browserseitige Teil und das ggf. nicht jedes Mal die Seite neu geladen werden muss.
Persönlich würde ich _nicht_ 204 zurück liefern sondern entweder eine Bestätigung, dass die serverseitige Aktion mit der Hardware erfolgreich war oder halt eine Fehler. Aktuell ist das eine Blackbox - die klickst auf den Button und es passiert clientseitig nichts.
Gruß, noisefloor
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Samstag 31. Januar 2026, 19:52
von DL3AD
Danke für die Rückmeldungen.
@__blackjack__
wie kann ich es dann besser machen ?
Ajax oder Javascript will ich bewust vermeiden !
bei 204 wird die Seite doch nicht neu geladen - oder liege ich da falsch ?
Wenn ich in einer GUI einen Butten Drücke dann habe ich auch keiune Rückmeldung wenn ich expliziet nix einbaue.
Ich beschäftige mich gerade mit Turbo Flask bezüglich Rückmeldungen / Aktualisierung vin Werten auf dem Client - bin noch nicht soweit im Erkenntnissprozess
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 08:23
von noisefloor
Hallo,
rein Interesse halber:
Ajax oder Javascript will ich bewust vermeiden !
Weil...? BTW: Das "J" in Ajax steht für JavaScript. Und AJAX ist die ältere Methode, aktuell (und IMHO einfacher ist die fetch-API von JavaScript.
bei 204 wird die Seite doch nicht neu geladen - oder liege ich da falsch ?
Korrekt.
Wenn ich in einer GUI einen Butten Drücke dann habe ich auch keiune Rückmeldung wenn ich expliziet nix einbaue.
Wenn das für dich OK ist - ok. Ist halt ungewöhnlich, dass man nicht wissen will, ob was passiert ist.
Ich beschäftige mich gerade mit Turbo Flask bezüglich Rückmeldungen / Aktualisierung vin Werten auf dem Client - bin noch nicht soweit im Erkenntnissprozess
Turbo Flask implementiert, soweit ich das sehe, WebSockets zwischen Server und Client. Natürlich via JavaScript. Ich sehe aber hier nicht, worum du eine Websocket-Verbindung zwischen Client und Server brauchst und das nicht via fetch-API lösen könntest.
Gruß, noisefloor
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 12:31
von __blackjack__
@DL3AD: Wenn GET gecached werden darf, dann wäre es sinnvoller POST zu machen. Sonst kann es passieren das GET nichts bewirkt, weil der Browser das gar nicht erst macht, weil er ja noch eine Antwort im Cache hat.
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 15:26
von DL3AD
... habe es mal auf POST umgebaut
Code: Alles auswählen
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Button Test 017</title>
</head>
<body>
<form action="/Btn01" method="POST"><button>Button 01</button></form>
<form action="/Btn02" method="POST"><button>Button 02</button></form>
</body>
</html>
Habe das mit den POST nun über form gemacht - ist dass OK oder geht das auch eleganter ?
Als nächsten Test möchte ich ein Label vom Server aus mit neuen sich ständig veränderlichen Werten beschreiben - wie lößt man das am besten ?
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 15:37
von noisefloor
Hallo,
Als nächsten Test möchte ich ein Label vom Server aus mit neuen sich ständig veränderlichen Werten beschreiben - wie lößt man das am besten ?
Entweder die Seite nach einem Request serverseitig neu rendern ausliefern oder bei Verwendung der JS fetch-API den gewünschten Wert als Antwort auf den Request zurück liefern und clientseitig das Label des Buttons via JS ändern.
Gruß, noisefloor
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 16:09
von DL3AD
Die Label sind unabhängig von den Button - in meiner Hardware ändert sich zufällig ein Wert und den möchte ich dann ohne User Interaktion auf der Seite aktualisieren - am besten ohne die ganze Seite neu zu laden.
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 16:22
von noisefloor
Was bezeichnest du denn als "Label" genau?
Label ist im HTML Kontext ja eindeutig definiert.
Der Punkt "ohne Nutzerinteraktion" ist dabei wichtig - hättest du in der Frage schon erwähnen sollen, weil das die mögliche Technik ändert. Es gibt würde ich sagen drei Ansätze:
* periodisch via JS und fetch-API den Server auf Änderungen abfragen und die Seite clientseitig mit der Antwort der Abfrage via JS aktualisieren.
* bidirektionale Kommunikation per Websocket, braucht auch Client-seitig JavaScript
*
SSE - Server Side Events, mit denen der Server Nachrichten an den Client pushen kann. Braucht clientseitig auch JS.
Die ersten beiden Weg sind IMO deutlich gängiger als SSE. Wenn du "Echtzeit" brauchst sind Websockets der Weg, weil bei der fetch-API halt periodisch abgerufen wird. "periodisch" kann zwar auch hochfrequent sein, dann stellt sich aber die Frage der Sinnhaftigkeit gegenüber Websockets.
Gruß, noisefloor
Re: Flask APP mit Button zur funktionalen Steuerung
Verfasst: Sonntag 1. Februar 2026, 19:06
von __blackjack__
Womit wir dann bei JavaScript sind. Da führt nicht wirklich ein Weg drum herum. Damit braucht man dann aber auch den 204-Hack nicht mehr und kann auch bei den Buttons eine Rückmeldung an das Front-End senden ob der Aufruf erfolgreich war.