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.