Das Verhalten des Flask-Sitzungswörterbuchschlüssels ändert sich bei Verwendung eines anderen Schlüssels

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Das Verhalten des Flask-Sitzungswörterbuchschlüssels ändert sich bei Verwendung eines anderen Schlüssels

by Anonymous » 24 Dec 2024, 08:59

Ich versuche zu verstehen, wie Formulardaten in Flask-Sitzungen gespeichert werden. Beim Anhängen von Daten an ein Sitzungswörterbuch, das bereits in einer vorherigen Anfrage definiert wurde, bin ich auf ein Verhalten gestoßen, das mir seltsam vorkommt.
Ich definiere die folgende Ansicht:
@bp.route("/new-form", methods=("GET", "POST"))
def new_form():

if request.method == "POST":

if not "x" in session:
session["x"] = []
session["x"].append(json.dumps(request.form))

return session.get("x")

return render_template("main/new-form.html")

Ich würde erwarten, dass session["x"] seine Daten behält und bei jeder Anfrage die neuen JSON-Daten aus dem Formular anhängt. Es wird jedoch immer nur das zuletzt an session["x"] angehängte Formular angezeigt.
Was ich wirklich nicht verstehe, ist das, wenn ich der Sitzung einen weiteren Schlüssel hinzufüge Bevor die Formulardaten an die Sitzung angehängt werden, verhalten sich die Formulardaten so, wie ich es erwarten würde, d. h. session["x"] wird zu einer langen Liste aller gesendeten Formulare, bis ich die Daten aus der Sitzung lösche:
if request.method == "POST":
session["idontgetit"] = 1
...

Allein das Hinzufügen der Zeile session["idontgetit"] = 1 sorgt dafür, dass sich session["x"] wie erwartet verhält.
Ich verwende die Zurück-Schaltfläche meines Browsers, um dies zu testen. Ich weiß nicht, ob das unerwartete Auswirkungen haben würde. Es verhält sich konsistent in beide Richtungen.

Top