TurboGears - Validation

Une bonne bibliothèque de widgets Forms devrait avoir une fonction de validation d'entrée. Par exemple, l'utilisateur doit être obligé de saisir des données dans un champ obligatoire ou de vérifier si un champ d'e-mail contient un e-mail valide, sans recourir à aucun autre moyen programmatique (comme la fonction JavaScript) pour la validation.

Les premières versions de la bibliothèque de formulaires ToscaWidgets reposaient sur le module FormEncode pour la prise en charge de la validation. ToscaWidgets2 a maintenant un support de validation intégré disponible dans le module tw2.core. Cependant, il est toujours possible d'utiliser les techniques de validation FormEncode.

Afin de soumettre un formulaire ToscaWidgets à la validation, @validate decorator est utilisé.

@validate(form, error_handler, validators)
  • le ’form’ est l'objet de formulaire ToscaWidgets à valider.

  • le ‘error-handler’ est la méthode de contrôleur utilisée pour gérer les erreurs de formulaire.

  • le ‘validators’ sont un objet dictionnaire contenant des validateurs FormEncode.

Types de validateurs

Le module tw2.core contient une classe de validateurs dont d'autres validateurs sont hérités. Il est également possible de concevoir un validateur personnalisé basé sur celui-ci. Certains des validateurs importants sont décrits ci-dessous -

LengthValidator- Vérifiez si une valeur a une longueur prescrite. Les limites minimum et maximum sont définies avec des paramètres mini et maxi. Les messages personnalisés pour une longueur inférieure et supérieure à min et max peuvent être spécifiés en tant que paramètre tooshort et toolong.

tw2.core.LengthValidator(min = minval, max = maxval, 
   msgs = { 'tooshort': (‘message for short length’), 
   'toolong': (‘message for long length)})

RangeValidator- Habituellement utilisé avec RangeField. Il est utile de valider la valeur d'un champ numérique dans les limites minimum et maximum. Les messages pour les paramètres tooshort et toolong peuvent être personnalisés.

tw2.core.RangeValidator(min = minval, max = maxval, 
   msgs = { 'tooshort': (‘message for short length’), 
   'toolong': (‘message for long length)})

IntValidator- Cette classe est dérivée de RangeValidator. Ceci est normalement utilisé pour valider si l'entrée dans un champ de texte normal contient des données entières. Des limites minimales et maximales ainsi que des messages d'erreur peuvent être définis. En outre, un message d'erreur pour une entrée non entière peut être spécifié comme paramètre «notint».

tw2.core.IntValidator(msgs = {‘notint’:’Must be Integer’})

OneOfValidator - Ce validateur force l'utilisateur à sélectionner une valeur parmi les options disponibles dans la liste uniquement.

tw2.core.OneOfValidator(values = [option1, option2,..], 
   msgs = {‘notinlist’:’Not in List’}}

DateValidator- Très utile pour s'assurer que l'entrée utilisateur est une date valide. Le format de la date (par défaut est YMD) et le message d'erreur sont personnalisables. Des limites de date minimum et maximum peuvent également être spécifiées. DateTimeValidator est également disponible pour vérifier l'objet de la classe DateTime.

tw2.core.DateValidator(msgs = {format = ’%Y-%m-%d’, 
   'baddatetime': ('baddate', ('Must follow date format $format_str'))}

EmailValidator- Valide l'entrée utilisateur par rapport à une adresse e-mail valide. Cette classe est héritée d'un RegexValidator plus général.

tw2.core.EmailValidator(msgs = {'badregex': ('bademail', 
   ('Must be a valid email address')) }

UrlValidator- Cette classe est également héritée de RegexValidator. Il valide l'entrée utilisateur pour une URL valide.

tw2.core.UrlValidator(msgs = {'badregex': ('badurl', ('Must be a valid URL’)) }

MatchValidator- Confirme si la valeur d'un champ correspond à l'autre. Ceci est particulièrement utile lorsque l'utilisateur doit choisir et confirmer un champ de mot de passe. L'utilisation typique de MatchValidator est illustrée ci-dessous -

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()

Il est également possible de construire un validateur composé, où la validation est souhaitée pour réussir, si l'un des contrôles réussit. Dans d'autres cas, vous souhaiterez peut-être que la validation réussisse, uniquement si l'entrée réussit toutes les vérifications. Pour cela, tw2.core fournit les validateurs Any et All, qui sont des sous-classes du CompoundValidator extensible.