TurboGears - Convalida

Una buona libreria di widget di Form dovrebbe avere una funzione di convalida dell'input. Ad esempio, l'utente dovrebbe essere costretto a inserire i dati in un campo obbligatorio o verificare se un campo di posta elettronica contiene un messaggio di posta elettronica valido, senza ricorrere ad altri mezzi programmatici (come la funzione JavaScript) per la convalida.

Le prime versioni di ToscaWidgets Forms Library erano solite fare affidamento sul modulo FormEncode per il supporto di convalida. ToscaWidgets2 ora ha il supporto di convalida integrato disponibile nel modulo tw2.core. Tuttavia, è ancora possibile utilizzare le tecniche di convalida FormEncode.

Per sottoporre a convalida un modulo ToscaWidgets, viene utilizzato @validate decorator.

@validate(form, error_handler, validators)
  • Il ’form’ è l'oggetto form di ToscaWidgets da convalidare.

  • Il ‘error-handler’ è il metodo del controller utilizzato per gestire gli errori del modulo.

  • Il ‘validators’ sono un oggetto dizionario contenente validatori FormEncode.

Tipi di validatori

Il modulo tw2.core contiene una classe validatore da cui vengono ereditati altri validatori. È anche possibile progettare un validatore personalizzato basato su di esso. Alcuni dei validatori importanti sono descritti di seguito:

LengthValidator- Verificare se un valore ha una lunghezza prescritta. I limiti minimo e massimo sono definiti con i parametri minimo e massimo. I messaggi personalizzati per la lunghezza inferiore e superiore a min e max possono essere specificati come parametro tooshort e toolong.

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

RangeValidator- Solitamente utilizzato insieme a RangeField. È utile per convalidare il valore di un campo numerico entro i limiti minimo e massimo. I messaggi per i parametri tooshort e toolong possono essere personalizzati.

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

IntValidator- Questa classe è derivata da RangeValidator. Viene normalmente utilizzato per verificare se l'input in un normale campo di testo contiene dati interi. È possibile impostare limiti minimo e massimo nonché messaggi di errore. Inoltre, il messaggio di errore per un input non intero può essere specificato come parametro "notint".

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

OneOfValidator - Questo validatore forza l'utente a selezionare un valore solo dalle opzioni disponibili nell'elenco.

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

DateValidator- Molto utile per garantire che l'input dell'utente sia una data valida. Il formato della data (l'impostazione predefinita è YMD) e il messaggio di errore sono personalizzabili. È inoltre possibile specificare limiti di data minimi e massimi. DateTimeValidator è anche disponibile per verificare l'oggetto della classe DateTime.

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

EmailValidator- Convalida l'input dell'utente rispetto a un indirizzo e-mail valido. Questa classe viene ereditata da un RegexValidator più generale.

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

UrlValidator- Questa classe viene ereditata anche da RegexValidator. Convalida l'input dell'utente per un URL valido.

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

MatchValidator- Conferma se il valore di un campo è abbinato all'altro. Ciò è particolarmente utile quando all'utente viene richiesto di scegliere e confermare un campo password. L'utilizzo tipico di MatchValidator è mostrato di seguito:

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

È anche possibile costruire un validatore composto, in cui si desidera che la convalida abbia successo, se uno qualsiasi dei controlli viene superato. In altri casi, potresti volere che la convalida abbia successo, solo se l'input supera tutti i controlli. Per questo, tw2.core fornisce i validatori Any e All, che sono sottoclassi del CompoundValidator estendibile.