TurboGears - walidacja
Dobra biblioteka widżetów Formularzy powinna mieć funkcję sprawdzania poprawności danych wejściowych. Na przykład użytkownik powinien zostać zmuszony do wprowadzenia danych w obowiązkowym polu lub sprawdzenia, czy pole wiadomości e-mail zawiera prawidłowy adres e-mail, bez uciekania się do innych środków programistycznych (takich jak funkcja JavaScript) w celu weryfikacji.
Wczesne wersje ToscaWidgets Forms Library wykorzystywały moduł FormEncode do obsługi walidacji. ToscaWidgets2 ma teraz wbudowaną obsługę walidacji dostępną w module tw2.core. Jednak nadal można używać technik walidacji FormEncode.
Aby poddać formularz ToscaWidgets do walidacji, używany jest dekorator @validate.
@validate(form, error_handler, validators)
Plik ’form’ to obiekt formularza ToscaWidgets do sprawdzenia.
Plik ‘error-handler’ jest metodą kontrolera używaną do obsługi błędów formularza.
Plik ‘validators’ są obiektami słownika zawierającymi walidatory FormEncode.
Typy walidatorów
Moduł tw2.core zawiera klasę walidatora, z której dziedziczone są inne walidatory. Możliwe jest również zaprojektowanie na jego podstawie własnego walidatora. Poniżej opisano niektóre z ważnych walidatorów -
LengthValidator- Sprawdź, czy wartość ma określoną długość. Minimalne i maksymalne limity są definiowane za pomocą parametrów min i max. Niestandardowe komunikaty o długości poniżej i powyżej min i max można określić jako parametr tooshort i toolong.
tw2.core.LengthValidator(min = minval, max = maxval,
msgs = { 'tooshort': (‘message for short length’),
'toolong': (‘message for long length)})
RangeValidator- Zwykle używany razem z RangeField. Jest to przydatne do sprawdzania wartości pola liczbowego w granicach minimalnych i maksymalnych. Można dostosować komunikaty dotyczące parametrów zbyt krótkich i długich.
tw2.core.RangeValidator(min = minval, max = maxval,
msgs = { 'tooshort': (‘message for short length’),
'toolong': (‘message for long length)})
IntValidator- Ta klasa pochodzi z RangeValidator. Zwykle jest używane do sprawdzenia, czy dane wejściowe w zwykłym polu tekstowym zawierają dane całkowite. Można ustawić minimalne i maksymalne limity, a także komunikaty o błędach. Ponadto komunikat o błędzie dla danych wejściowych nie będących liczbami całkowitymi można określić jako parametr „notint”.
tw2.core.IntValidator(msgs = {‘notint’:’Must be Integer’})
OneOfValidator - Ten walidator zmusza użytkownika do wybrania wartości tylko z dostępnych opcji na liście.
tw2.core.OneOfValidator(values = [option1, option2,..],
msgs = {‘notinlist’:’Not in List’}}
DateValidator- Bardzo przydatne, aby upewnić się, że dane wprowadzone przez użytkownika są poprawne. Format daty (domyślnie YMD) i komunikat o błędzie można dostosować. Można również określić minimalne i maksymalne limity dat. DateTimeValidator jest również dostępny do weryfikacji obiektu klasy DateTime.
tw2.core.DateValidator(msgs = {format = ’%Y-%m-%d’,
'baddatetime': ('baddate', ('Must follow date format $format_str'))}
EmailValidator- Weryfikuje dane wejściowe użytkownika na podstawie prawidłowego adresu e-mail. Ta klasa jest dziedziczona z bardziej ogólnego RegexValidator.
tw2.core.EmailValidator(msgs = {'badregex': ('bademail',
('Must be a valid email address')) }
UrlValidator- Ta klasa jest również dziedziczona po RegexValidator. Sprawdza poprawność danych wejściowych użytkownika pod kątem prawidłowego adresu URL.
tw2.core.UrlValidator(msgs = {'badregex': ('badurl', ('Must be a valid URL’)) }
MatchValidator- Potwierdza, czy wartość jednego pola jest zgodna z innym. Jest to szczególnie przydatne, gdy użytkownik musi wybrać i potwierdzić pole hasła. Typowe użycie MatchValidator pokazano poniżej -
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()
Możliwe jest również skonstruowanie walidatora złożonego, w którym walidacja ma się powieść, jeśli którykolwiek z testów przejdzie pomyślnie. W innych przypadkach możesz chcieć, aby walidacja zakończyła się powodzeniem, tylko jeśli dane wejściowe przejdą wszystkie testy. W tym celu tw2.core udostępnia walidatory Any i All, które są podklasami rozszerzalnego CompoundValidator.