WTForms: zwei Formulare auf der gleichen Seite?

8

Ich habe eine dynamische Webseite, die zwei Formulare verarbeiten sollte: ein Login-Formular und ein Registrierungsformular . Ich verwende WTForms, um die zwei Formulare zu verarbeiten, aber ich habe einige Probleme damit es funktioniert, da beide Formulare auf die gleiche Seite gerendert werden.

Das folgende ist der Code für das Login Formular meiner Webseite:

%Vor%

Das folgende ist der Code für das register Formular meiner Webseite:

%Vor%

Ich bekomme den folgenden Fehler, wenn ich die Webseite lade und lade:

%Vor%

Von dem, was ich verstehe, gibt es einen Konflikt zwischen den Formen, weil nach dem Traceback:

%Vor%

Gibt den folgenden Fehler zurück:

%Vor%

Wenn das Skript sieht:

%Vor%

Aber es ignoriert völlig:

%Vor%

Es könnte ein wenig verwirrend sein, ich bin auch verwirrt Lasten, und ich hoffe, dass jemand dieses Problem vor hat, damit ich es auch lösen konnte.

    
Jason Decastro 22.02.2014, 03:58
quelle

1 Antwort

13

Das ist ein wenig verwirrend, weil Sie index.html sowohl für index () als auch für register () ausgeben und beide die gleiche Route ( @application.route('/index') ) registrieren. Wenn Sie Ihr Formular an /index senden, wird nur einer von ihnen nur angerufen. Sie können entweder

  • Setzen Sie Ihre gesamte Logik in eine Indexfunktion und sehen Sie, welche Form (falls vorhanden) gültig ist.
  • Trennen Sie Ihre Logik und reichen Sie nur das entsprechende Formular ein

Im Allgemeinen möchten Sie die Logik trennen, auch wenn Sie sowohl die Anmeldung als auch die Anmeldung auf derselben Seite anzeigen möchten. Also werde ich versuchen, dir die richtige Richtung zu zeigen: -)

Trennen Sie zum Beispiel zuerst Ihre Anmelde- und Registeransichten, die nun nur die Logik für das Formular überprüfen, das sie betrifft:

%Vor%

Erstellen Sie dann eine index.html, die beide Formulare anzeigt und sie in die richtige Richtung sendet.

%Vor%

Der Code ist noch nicht getestet, es könnte also Fehler geben, aber ich hoffe, er bringt Sie in die richtige Richtung. Beachten Sie, dass wir sowohl lform als auch rform in allen Aufrufen übergeben ('index.html', ...).

Weitere einfache Möglichkeiten zur Verbesserung / Umgestaltung: Verwenden Sie eine Funktion, um nach einem vorhandenen Benutzer zu suchen (Ihre SELECT -Anweisung) und verwenden Sie die Includes oder Makros von Jinja2 für die einzelnen Formulare in den Vorlagen.

    
Menno 22.02.2014, 10:47
quelle