Seite 1 von 1
Bottle einlesen aus Formular und float ...
Verfasst: Montag 28. Februar 2011, 18:25
von mathman
Einen schönen guten Abend
Ich habe folgendes Problem.
Aus einem Formular bekomme ich Daten.
Diese möchte ich dann in den richtigen Datentyp bringen
um diese dann ordnungsgemäß zu verarbeiten.
Jetzt müssen nicht alle Felder ausgefüllt werden, da es auf die Konfiguration ankommt.
Code: Alles auswählen
wp1 = float(request.forms.get('wp1'))
wp2 = float(request.forms.get('wp2'))
Wenn nun in dem oben angegebden Beispiel wie z.B. wp2 nicht angegeben ist,
dann kommt es zu dem Fehler
ValueError: empty string for float()
Gibt es eine Möglichkeit das es nicht zu diesem Fehler kommt?
Eine andere Möglichkeit wäre abzufragen welche Konfiguration gesetzt wurde
und dann nur die in den Dateiformat bringen, was aber umständlicher wäre
lg
mathman
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Montag 28. Februar 2011, 19:16
von Leonidas
``get`` hat vermutlich nen zweiten Parameter, den Standardwert falls der Wert nicht gesetzt ist. Dann gibst du dort ``0`` an (oder was du halt dann haben willst).
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Montag 28. Februar 2011, 19:28
von mathman
Habe in der Doku leider nichts dazu gefunden
wie man einen Wert setzen kann der automatisch kommt
wenn kein Wert vorhanden ist :K
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Montag 28. Februar 2011, 19:33
von Leonidas
Was hindert dich,
auszuprobieren, wie ich geschrieben habe?
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Dienstag 1. März 2011, 00:18
von Defnull
In der doku wird beschreiben, das request.forms/files/POST/GET u.s.w. im Grunde
dictionaries sind. Sie können also alles, was normale dictionaries auch können.
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Dienstag 1. März 2011, 08:37
von noisefloor
Hallo,
@mathman: Unabhängig davon solltest du so wie so mindestens noch ein "try... except" drum setzen, weil du auch eine Exception bekommst, wenn der Nutzer Buchstaben eingibt. Oder, eleganter, nimm' ein Framework wie WTForms, was die Eingaben direkt valdieren kann.
Gruß, noisefloor
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Dienstag 1. März 2011, 10:22
von mathman
Leonidas hat geschrieben:Was hindert dich,
auszuprobieren, wie ich geschrieben habe?
Hatte deine Antwort leider nicht verstanden
Ich habe es nun ausprobiert, leider kommt es immer noch zu dem Fehler :K
l1 = float(request.forms.get('l1', 0))
ValueError: empty string for float()
noisefloor hat geschrieben:Hallo,
@mathman: Unabhängig davon solltest du so wie so mindestens noch ein "try... except" drum setzen, weil du auch eine Exception bekommst, wenn der Nutzer Buchstaben eingibt. Oder, eleganter, nimm' ein Framework wie WTForms, was die Eingaben direkt valdieren kann.
Gruß, noisefloor
Das wollte ich eigentlich mit JavaScript im Vorfeld abfangen. Man könnte zwar JavaScript ausschalten, dann würde aber die gesamte Eingabemaske nicht funktionieren, von daher muss es ja eh an sein

Re: Bottle einlesen aus Formular und foat ...
Verfasst: Dienstag 1. März 2011, 11:37
von BlackJack
@mathman: So etwas sollte man immer auf dem Server machen. Das JavaScript kann ja auch aus ganz anderen Gründen nicht laufen. Zum Beispiel wenn jemand die Weboberfläche doof findet und sich ein Skript schreibt, welches deine Webanwendung per HTTP benutzt. Der kann dann aus versehen oder absichtlich falsche Daten schicken. Der Überprüfung von Daten beim Client darf man nicht vertrauen.
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Dienstag 1. März 2011, 14:12
von mathman
BlackJack hat geschrieben:@mathman: So etwas sollte man immer auf dem Server machen. Das JavaScript kann ja auch aus ganz anderen Gründen nicht laufen. Zum Beispiel wenn jemand die Weboberfläche doof findet und sich ein Skript schreibt, welches deine Webanwendung per HTTP benutzt. Der kann dann aus versehen oder absichtlich falsche Daten schicken. Der Überprüfung von Daten beim Client darf man nicht vertrauen.
das programm läuft lokal

Also wenn da einer Schabernack treibt dann ist er selbst schuld. Aber du hast recht.
Das Problem lässt sich leider auch nicht mit folgendem umgehen
Code: Alles auswählen
l1 = request.forms.get('l1')
if l1 != None: float(l1)
Da es irgendwie auch nicht Nichts ist :K
Re: Bottle einlesen aus Formular und foat ...
Verfasst: Dienstag 1. März 2011, 14:27
von Leonidas
Es wurde doch schon gesagt, dass du Exceptions nutzen sollst…
Re: Bottle einlesen aus Formular und float ...
Verfasst: Mittwoch 2. März 2011, 12:34
von Defnull
Wenn der Benutzer nichts in das Formular-Feld ein tippt, liefert "request.forms.get('l1')" korrekterweise einen leeren String zurück. Schließlich war das Formular-Feld ja da, es war nur leer. Nur wenn gar kein Formular-Feld mit diesem Namen übertragen wurde, liefert get() "None" bzw. der optionale Default-Wert zurück.
Unabhängig davon solltest du dir gleich zu Beginn angewöhnen, Benutzereingaben genauestens zu prüfen und für jede Eventualität bereit zu sein. "Wird ja nur im Intranet benutzt" ist eine beliebte Ausrede, aber sowas sollte man sich gar nicht erst angewöhnen
Code: Alles auswählen
try:
value = float(request.forms.get('l1'))
except (ValueError, TypeError):
value = None
Re: Bottle einlesen aus Formular und float ...
Verfasst: Donnerstag 3. März 2011, 09:40
von mathman
Vielen Dank für die Antworten,
ja ihr habt Recht, ich werde die Funktion jetzt umschreiben.
Gruß