diff --git a/.gitignore b/.gitignore index 85433ce..877ff42 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ *.swp *~ .DS_Store +venv/ +__pycache__/ +*.pyc + diff --git a/app.py b/app.py new file mode 100644 index 0000000..8d0d39f --- /dev/null +++ b/app.py @@ -0,0 +1,339 @@ +from flask import Flask, request, redirect +from datetime import datetime + +app = Flask(__name__) + +# Kommentare im Arbeitsspeicher (gehen beim Neustart verloren -> kommt Datenbank) +eintraege = [] + +# ───────────────────────────────────────────────────────────────────────────── +# Hilfsfunktion: gemeinsames HTML-Gerüst +# ───────────────────────────────────────────────────────────────────────────── +def seite(inhalt): + return """ + + + + + Flask-App – David & Karo + + + +
+ + +
+
""" + inhalt + """ +
+ +""" + + +# ───────────────────────────────────────────────────────────────────────────── +# Route 1: Startseite +# ───────────────────────────────────────────────────────────────────────────── +@app.route("/") +def hello(): + return seite(""" +

Willkommen in unserer Flask-App!

+

+ Diese App läuft mit Python & Flask direkt auf dem Server.
+ Probier die Frage oder die + Pinnwand aus. +

+""") + + +# ───────────────────────────────────────────────────────────────────────────── +# Route 2: Frage-Formular (GET + POST) +# ───────────────────────────────────────────────────────────────────────────── +@app.route("/frage", methods=["GET", "POST"]) +def frage(): + feedback = "" + if request.method == "POST": + antwort = request.form.get("antwort", "").strip() + if antwort == "8": + feedback = '

✔ Richtig!

' + else: + feedback = '

✘ Leider falsch. Versuch es nochmal!

' + + return seite(""" +

Rechenrätsel

+
+
+ + +
+""" + feedback) + + +# ───────────────────────────────────────────────────────────────────────────── +# Route 3: Pinnwand – YouTube-Kommentar-Style (ca. 2013) +# ───────────────────────────────────────────────────────────────────────────── + +PINNWAND_CSS = """ + +""" + +def avatar_farbe(name): + farben = ["#e53935","#8e24aa","#1e88e5","#00897b", + "#43a047","#fb8c00","#6d4c41","#546e7a"] + idx = sum(ord(c) for c in name) % len(farben) + return farben[idx] + +@app.route("/pinnwand", methods=["GET", "POST"]) +def pinnwand(): + if request.method == "POST": + name = request.form.get("name", "").strip() or "Anonym" + nachricht = request.form.get("nachricht", "").strip() + if nachricht: + eintraege.append({ + "name": name, + "text": nachricht, + "zeit": datetime.now().strftime("%d.%m.%Y, %H:%M Uhr") + }) + return redirect("/app/pinnwand") + + # Kommentare bauen (neueste zuerst) + kommentare_html = "" + for e in reversed(eintraege): + initial = e["name"][0].upper() + farbe = avatar_farbe(e["name"]) + # Einfaches HTML-Escaping + name_esc = e["name"].replace("&","&").replace("<","<").replace(">",">") + text_esc = e["text"].replace("&","&").replace("<","<").replace(">",">") + kommentare_html += f""" +
+
{initial}
+
+
+ {name_esc} + vor gerade  ·  {e['zeit']} +
+
{text_esc}
+
+ + + +
+
+
""" + + if not eintraege: + kommentare_html = '

Noch keine Kommentare. Sei der Erste! 💬

' + + anzahl = len(eintraege) + anzahl_text = f"{anzahl} Kommentar{'e' if anzahl != 1 else ''}" + + return seite(PINNWAND_CSS + f""" +
+ Kommentare +
+ + +
+
+
👤
+
+ + +
+ +
+
+
+
+ + +

{anzahl_text}

+ + +
+ {kommentare_html} +
+""") + + +# ───────────────────────────────────────────────────────────────────────────── +if __name__ == "__main__": + app.run(host="0.0.0.0", port=9002) # isa2 → Port 9002