Howto: Dynamische Generierung von CSRF-Token in WTForms mit Flask

8

Ich habe eine Obstform, die ein FieldList-Objekt für die Bananen hat:

%Vor%

Im Frontend füge ich zunächst eines dieser Felder zur FieldList hinzu

%Vor%

Jetzt mit Javascript habe ich Funktionen erstellt, die die Anzahl der BananaForm-Felder, die mit Informationen gefüllt werden können, dynamisch hinzufügen (Plus-Schaltfläche) oder entfernen (Minus-Schaltfläche) können.

FielstList erstellt automatisch IDs für alle Felder. Um dynamisches Hinzufügen mit js zu machen, dupliziere ich den HTML-Code und setze die Feld-ID + = 1, wie:

erstes Feld:

%Vor%

doppeltes Feld mit + = 1:

%Vor%

Wenn ich sie entsprechend benenne und das Formular abschicke, erkennt WTForms automatisch die hinzugefügten Felder im Backend (funktioniert gut).

So weit so gut, aber hier ist mein Problem: Damit ein Formular gültig ist, muss ich jedem WTForm ein CSRF-Feld hinzufügen. In der Jinja Vorlage tue ich das mit:

%Vor%

Wenn ich jedoch nur den HTML-Code mit meiner js-Funktion kopiere, fehlen mir die CSRF-Felder (weil das Back-End-Formularobjekt bis zum Übermitteln nichts über die hinzugefügten FormFields weiß). Wie kann ich diese CSRF-Felder dynamisch erzeugen? (Eine Ajax-Anfrage? Wenn ja, wie?)

Dies sollte ein Standard-Anwendungsfall mit Formen und Kolben sein. Ich hoffe meine Beschreibung war verständlich, wenn nicht, lass es mich wissen. Jede Hilfe geschätzt!

UPDATE: Hier ist mein Code

JS-Funktionen

%Vor%

Jinja Vorlage:

%Vor%

Jinja Vorlagenmakros:

%Vor%     
kadrian 01.08.2012, 12:56
quelle

1 Antwort

4

Ich habe herausgefunden, wie es funktioniert:

Der CSRF-Tag kann einfach kopiert werden. Die ID muss entsprechend geändert und inkrementiert werden, aber der Hash kann gleich bleiben.

Ich dachte nicht, dass es möglich ist, viele Felder mit dem gleichen CSRF-Tag-Hash zu haben, aber das ist es tatsächlich!

    
kadrian 19.08.2012, 08:34
quelle