ubuntuusers.de

Python Form Validation

Status: Ungelöst | Ubuntu-Version: Server 12.04 (Precise Pangolin)
Antworten |

ExcitedSpoon

Avatar von ExcitedSpoon

Anmeldungsdatum:
17. Juli 2010

Beiträge: 226

Wohnort: /home/berlin

Hi,

ich bin vor einer Weile damit betraut worden ein schon existierendes Projekt weiterzuführen. Es handelt sich hier im wesentlichen um ein Webfrontend, das Nutzereingaben in ein Formular entgegennimmt. Das Backend, was letztendlich die Eingaben verarbeitet, ist eine Python-Anwendung welche Tornado als Webserver nutzt.

Die Formulardaten werden im Frontend per XHR (also Javascript bzw. AJAX) an den Webserver versendet.

Nun ist es so, dass mein Vorgänger herzlich wenig Elan hatte die Nutzereingaben zu validieren. Heisst im Klartext, dass bei falschen Eingaben z.B. ein ValueError geworfen wird und das Frontend einen 500 Internal Server Error zurückbekommt anstatt einer aussagekräftigen Fehlermeldung.

Ich möchte jetzt natürlich, bevor die Daten verarbeitet werden, diese validieren und dem Nutzer aussagekräftige Fehlermeldungen ins Frontend weiterreichen, falls die Eingaben eine falsche Form haben.

Mein Problem: Die Eingabefelder im Frontend werden dynamisch per Javascript generiert, mit dymanischen Feldnamen. Die meisten Python Form Validator libs (ToscaWidgets/Formish/WTForm) bieten soweit ich das überblicken kann Form Creation (brauch ich nicht bzw. unmöglich) und Validierung eben dieses (vorher definierten) Formulars an. Ist für meinen Anwendungsfall zu statisch.

Nun meine Frage: Existieren Bibliotheken, mit denen man komfortabel Formulardaten validieren kann, ohne dass die Anzahl und die Namen der Formularfelder im vorherein bekannt sind? Mir schwebt da sowas vor wie: Wenn der Feldname auf "xyz" endet, dann wende folgende Validatoren an: is float?, is greater than zero? (Beispiel).

Viele Grüße

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

sowas ist mir nicht bekannt. Wie du ja sicherlich schon gesehen, basieren die meisten (bzw. alle mir bekannten) Form-Frameworks auf Klassen - und dafür musst du halt beim Anlegen der Klasse schon wissen muss, welche Felder es gibt.

Da bei dir das Formular aber client-seitig generiert wird, bringt dir ein Form-Framework nicht sooo viel, weil deren Stärke ist ja:

  • HTML generieren

  • Form valdieren

  • ggf. HTML mit Fehlermeldung neu generieren

2 der 3 Punkt brauchst du aber nicht. Ergo: macht wohl Sinn, dass du selber was schreibst ☺

Wenn dir der Regelsatz bekannt ist (so wie es sich anhört, kann man anhand des Namens des Formularfelds ja sehen, welche Bedingungen erfüllt sein müssen) sollte das nicht so aufwendig sein.

Und du müsstest dir mal Gedanken machen, wie die Fehlermeldungen denn an den Client kommen - da die Formulardaten ja per AJAX an den Server gehen, ist die Sache danach für den Client gehalten. Also müssten der Server entweder Daten pushen oder der Client nach dem Senden eines Formulars automatisch für X Sekunden den Server Fragen, ob was falsch war.

Was ist das eigentlich für eine Anwendungen? Client-seitig generierte Formularen mit "freier" Struktur klingt... ungewöhnlich.

Gruß, noisefloor

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Abgesehen von der natürlich unbedingt erforderlichen serverseitigen Validierung, könnte für dich zusätzlich eine clientseitige Vorvalidierung nützlich sein, wie sie HTML5 bietet (eine Übersicht).

ExcitedSpoon

(Themenstarter)
Avatar von ExcitedSpoon

Anmeldungsdatum:
17. Juli 2010

Beiträge: 226

Wohnort: /home/berlin

Hi, danke euch Beiden. Sowas habe ich mir schon gedacht. Dann werd ich das wohl komplett selbst in die Hand nehmen müssen.

Wenn dir der Regelsatz bekannt ist (so wie es sich anhört, kann man anhand des Namens des Formularfelds ja sehen, welche Bedingungen erfüllt sein müssen) sollte das nicht so aufwendig sein.

Ja, anhand des Feldnamens kann ich rausfinden, wie validiert werden soll.

Und du müsstest dir mal Gedanken machen, wie die Fehlermeldungen denn an den Client kommen - da die Formulardaten ja per AJAX an den Server gehen, ist die Sache danach für den Client gehalten. Also müssten der Server entweder Daten pushen oder der Client nach dem Senden eines Formulars automatisch für X Sekunden den Server Fragen, ob was falsch war.

Das ist ansich kein Problem. Der Server gibt ja im Erfolgsfall Daten im JSON-Format an den Client zurück. Die Fehler werde ich serverseitig "sammeln" und dann eben die Liste als JSON ans Frontend zurückgeben, wo ich die dann hübsch präsentieren kann.

Was ist das eigentlich für eine Anwendungen? Client-seitig generierte Formularen mit "freier" Struktur klingt... ungewöhnlich.

Das ist eine mathematisch-/physikalische Anwendung zum Auswerten und Plotten von Datensätzen. Durch unterschiedliche Arten von Diagrammen, frei wählbare Anzahl von Graphen pro Diagramm etc. kommen da einige Formularfelder zusammen, die validiert werden wollen, aber eben nicht immer vorhanden sind.

Abgesehen von der natürlich unbedingt erforderlichen serverseitigen Validierung, könnte für dich zusätzlich eine clientseitige Vorvalidierung nützlich sein, wie sie HTML5 bietet...

Das habe ich in einem weiteren Schritt schonmal angedacht. Wichtiger ist aber erstmal, dass der Server erstmal ordentlich auf Falscheingaben reagiert. Die clientseitige Validierung ist dann später ein nice-to-have.

Grüße

Antworten |