diff --git a/app/app.py b/app/app.py index 301e867..10a56f7 100644 --- a/app/app.py +++ b/app/app.py @@ -1,4 +1,4 @@ -from flask import Flask, request, session, redirect +from flask import Flask, request, session, redirect, url_for, abort import sqlite3 app = Flask(__name__) @@ -11,9 +11,11 @@ def get_db(): @app.route("/", methods=["GET", "POST"]) def start(): - + html = '

Verlies

' + if request.method == "POST": # Formular abgeschickt? - name = request.form["name"].strip() + # .get() verhindert Abstürze, falls "name" mal fehlt + name = request.form.get("name", "").strip() if name != "": session["spieler"] = name # App merkt sich: das bist du db = get_db() @@ -23,9 +25,10 @@ def start(): ) db.commit() db.close() - return redirect("/app/raum/1") + # url_for generiert den Pfad dynamisch (sehr viel sicherer!) + return redirect(url_for("raum", id=1)) - html = '

Verlies

' + # Wenn kein POST gesendet wurde, läuft der Code hier einfach weiter: if "spieler" in session: db = get_db() s = db.execute( @@ -34,23 +37,15 @@ def start(): ).fetchone() db.close() if s: + # Dynamische URL-Generierung auch hier für den Weiterspielen-Link + weiterspielen_url = url_for("raum", id=s["raum_id"]) html = html + '

Willkommen zurück, ' + session["spieler"] + '!

' \ - + 'Weiterspielen
' + + 'Weiterspielen
' + + # Jetzt existiert 'html' garantiert immer return html + '
Dein Name: ' \ - + '
' - - if "spieler" in session: - db = get_db() - s = db.execute( - "SELECT raum_id FROM spielstand WHERE spieler=?", - (session["spieler"],) - ).fetchone() - db.close() - if s: - html = html + '

Willkommen zurück, ' + session["spieler"] + '!

' \ - + 'Weiterspielen
' - return html + '
Dein Name: ' \ - + '
' + + ' ' + @app.route("/raum/", methods=["GET", "POST"]) def raum(id): @@ -63,27 +58,40 @@ def raum(id): ) db.commit() - r = db.execute("SELECT * FROM raeume WHERE id=?", (id,)).fetchone() + # Raum aus der DB holen + r = db.execute("SELECT * FROM r_aeume WHERE id=?", (id,)).fetchone() + + # Fehlerbehandlung: Was, wenn die ID nicht existiert? + if r is None: + db.close() + abort(404, description="Dieser Raum existiert nicht!") - if r["raetsel_frage"]: # Rätselraum? + # Rätselraum? + if r["raetsel_frage"]: if request.method == "POST": - if request.form["antwort"].strip() == r["raetsel_antwort"]: + user_antwort = request.form.get("antwort", "").strip() + if user_antwort == r["raetsel_antwort"]: + db.close() # DB schließen vor dem Return! return "

Befreit!

" - return 'Leider falsch. nochmal' + + db.close() # DB schließen vor dem Return! + nochmal_url = url_for("raum", id=id) + return 'Leider falsch. nochmal' + + db.close() # DB schließen vor dem Return! return "

" + r["name"] + "

" + r["beschreibung"] + "

" \ + '
' + r["raetsel_frage"] \ + '
' - # sonst: normaler Raum mit Ausgängen (wie bisher) + # Sonst: normaler Raum mit Ausgängen ausgaenge = db.execute("SELECT richtung, nach_raum FROM ausgaenge WHERE von_raum=?", (id,)).fetchall() - db.close() + db.close() # DB schließen für den normalen Pfad html = "

" + r["name"] + "

" html = html + "

" + r["beschreibung"] + "

" for a in ausgaenge: - html = html + '' \ + nach_raum_url = url_for("raum", id=a["nach_raum"]) + html = html + '' \ + a["richtung"] + '   ' - return html - -if __name__ == "__main__": - app.run(host="0.0.0.0", port=9011) \ No newline at end of file + + return html # Das hat gefehlt! \ No newline at end of file