TurboGears - Validación

Una buena biblioteca de widgets de formularios debe tener una función de validación de entrada. Por ejemplo, se debe obligar al usuario a ingresar datos en un campo obligatorio, o verificar si un campo de correo electrónico contiene un correo electrónico válido, sin recurrir a ningún otro medio programático (como la función de JavaScript) para la validación.

Las primeras versiones de la biblioteca de formularios ToscaWidgets solían depender del módulo FormEncode para el soporte de validación. ToscaWidgets2 ahora tiene soporte de validación incorporado disponible en el módulo tw2.core. Sin embargo, todavía es posible utilizar técnicas de validación de FormEncode.

Para someter un formulario ToscaWidgets a validación, se utiliza @validate decorator.

@validate(form, error_handler, validators)
  • los ’form’ es el objeto de formulario ToscaWidgets que se va a validar.

  • los ‘error-handler’ es el método de controlador utilizado para manejar errores de formulario.

  • los ‘validators’ son un objeto de diccionario que contiene validadores FormEncode.

Tipos de validadores

El módulo tw2.core contiene una clase de validación de la que se heredan otros validadores. También es posible diseñar un validador personalizado basado en él. Algunos de los validadores importantes se describen a continuación:

LengthValidator- Compruebe si un valor tiene una longitud prescrita. Los límites mínimos y máximos se definen con parámetros mínimos y máximos. Los mensajes personalizados para la longitud por debajo y por encima del mínimo y el máximo se pueden especificar como parámetro demasiado corto y largo.

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

RangeValidator- Usualmente usado junto con RangeField. Es útil para validar el valor de un campo numérico dentro de los límites mínimo y máximo. Los mensajes para parámetros demasiado cortos y largos se pueden personalizar.

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

IntValidator- Esta clase se deriva del RangeValidator. Esto se usa normalmente para validar si la entrada en un campo de texto normal contiene datos enteros. Se pueden establecer límites mínimos y máximos, así como mensajes de error. Además, el mensaje de error para la entrada no entera se puede especificar como parámetro 'notint'.

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

OneOfValidator - Este validador obliga al usuario a seleccionar un valor de las opciones disponibles solo en la lista.

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

DateValidator- Muy útil para asegurar que la entrada del usuario sea una fecha válida. El formato de fecha (el predeterminado es YMD) y el mensaje de error se pueden personalizar. También se pueden especificar límites de fecha mínimos y máximos. DateTimeValidator también está disponible para verificar el objeto de la clase DateTime.

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

EmailValidator- Valida la entrada del usuario con una dirección de correo electrónico válida. Esta clase se hereda de un RegexValidator más general.

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

UrlValidator- Esta clase también se hereda de RegexValidator. Valida la entrada del usuario para una URL válida.

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

MatchValidator- Confirma si el valor de un campo coincide con el otro. Esto es especialmente útil cuando el usuario debe elegir y confirmar un campo de contraseña. El uso típico de MatchValidator se muestra a continuación:

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

También es posible construir un validador compuesto, donde se desea que la validación sea exitosa, si cualquiera de las comprobaciones pasa. En otros casos, es posible que desee que la validación tenga éxito, solo si la entrada pasa todas las comprobaciones. Para ello, tw2.core proporciona los validadores Any y All, que son subclases del CompoundValidator extensible.