TurboGears - Validierung
Eine gute Forms-Widget-Bibliothek sollte über eine Funktion zur Eingabevalidierung verfügen. Beispielsweise sollte der Benutzer gezwungen sein, Daten in ein Pflichtfeld einzugeben oder zu überprüfen, ob ein E-Mail-Feld eine gültige E-Mail enthält, ohne zur Validierung auf andere programmatische Mittel (wie die JavaScript-Funktion) zurückgreifen zu müssen.
Frühere Versionen der ToscaWidgets Forms Library verwendeten das FormEncode-Modul zur Unterstützung der Validierung. ToscaWidgets2 verfügt jetzt über eine integrierte Validierungsunterstützung, die im Modul tw2.core verfügbar ist. Es ist jedoch weiterhin möglich, FormEncode-Validierungstechniken zu verwenden.
Um ein ToscaWidgets-Formular einer Validierung zu unterziehen, wird @validate decorator verwendet.
@validate(form, error_handler, validators)
Das ’form’ ist das zu validierende ToscaWidgets-Formularobjekt.
Das ‘error-handler’ ist die Controller-Methode zur Behandlung von Formularfehlern.
Das ‘validators’ sind ein Wörterbuchobjekt, das FormEncode-Validatoren enthält.
Arten von Validatoren
Das Modul tw2.core enthält eine Validator-Klasse, von der andere Validatoren geerbt werden. Es ist auch möglich, einen benutzerdefinierten Validator basierend darauf zu entwerfen. Einige der wichtigen Validatoren werden nachfolgend beschrieben -
LengthValidator- Überprüfen Sie, ob ein Wert eine vorgeschriebene Länge hat. Minimal- und Maximalgrenzen werden mit Min- und Max-Parametern definiert. Benutzerdefinierte Nachrichten für Längen unter und über min und max können als tooshort- und toolong-Parameter angegeben werden.
tw2.core.LengthValidator(min = minval, max = maxval,
msgs = { 'tooshort': (‘message for short length’),
'toolong': (‘message for long length)})
RangeValidator- Wird normalerweise zusammen mit RangeField verwendet. Es ist nützlich, den Wert eines numerischen Feldes innerhalb der minimalen und maximalen Grenzen zu validieren. Meldungen für tooshort- und toolong-Parameter können angepasst werden.
tw2.core.RangeValidator(min = minval, max = maxval,
msgs = { 'tooshort': (‘message for short length’),
'toolong': (‘message for long length)})
IntValidator- Diese Klasse wird vom RangeValidator abgeleitet. Dies wird normalerweise verwendet, um zu überprüfen, ob die Eingabe in ein normales Textfeld ganzzahlige Daten enthält. Minimal- und Maximalgrenzen sowie Fehlermeldungen können eingestellt werden. Zusätzlich kann eine Fehlermeldung für eine nicht ganzzahlige Eingabe als 'notint'-Parameter angegeben werden.
tw2.core.IntValidator(msgs = {‘notint’:’Must be Integer’})
OneOfValidator - Dieser Validator zwingt den Benutzer, nur einen Wert aus den verfügbaren Optionen in der Liste auszuwählen.
tw2.core.OneOfValidator(values = [option1, option2,..],
msgs = {‘notinlist’:’Not in List’}}
DateValidator- Sehr nützlich, um sicherzustellen, dass Benutzereingaben ein gültiges Datum sind. Das Datumsformat (Standard ist YMD) und die Fehlermeldung können angepasst werden. Es können auch minimale und maximale Datumsgrenzen festgelegt werden. DateTimeValidator ist auch verfügbar, um das Objekt der DateTime-Klasse zu überprüfen.
tw2.core.DateValidator(msgs = {format = ’%Y-%m-%d’,
'baddatetime': ('baddate', ('Must follow date format $format_str'))}
EmailValidator- Überprüft Benutzereingaben anhand einer gültigen E-Mail-Adresse. Diese Klasse wird von einem allgemeineren RegexValidator geerbt.
tw2.core.EmailValidator(msgs = {'badregex': ('bademail',
('Must be a valid email address')) }
UrlValidator- Diese Klasse wird auch von RegexValidator geerbt. Es überprüft die Benutzereingabe für eine gültige URL.
tw2.core.UrlValidator(msgs = {'badregex': ('badurl', ('Must be a valid URL’)) }
MatchValidator- Bestätigt, ob der Wert eines Feldes mit dem anderen übereinstimmt. Dies ist besonders nützlich, wenn der Benutzer ein Kennwortfeld auswählen und bestätigen muss. Die typische Verwendung von MatchValidator ist unten dargestellt.
import tw2.core as twc
import tw2.forms as twf
class AdmissionForm(twf.Form):
class child(twf.TableLayout):
validator = twc.MatchValidator('pw', 'pwconfirm')
pw = twf.PasswordField()
pwconfirm = twf.PasswordField()
Es ist auch möglich, einen zusammengesetzten Validator zu erstellen, bei dem die Validierung erfolgreich sein soll, wenn eine der Prüfungen bestanden wird. In anderen Fällen möchten Sie möglicherweise, dass die Validierung nur dann erfolgreich ist, wenn die Eingabe alle Prüfungen bestanden hat. Zu diesem Zweck stellt tw2.core die Validatoren Any und All bereit, die Unterklassen des erweiterbaren CompoundValidator sind.