TurboGears - Validação

Uma boa biblioteca de widgets de Formulários deve ter um recurso de validação de entrada. Por exemplo, o usuário deve ser forçado a inserir dados em um campo obrigatório, ou verificar se um campo de email contém um email válido, sem recorrer a qualquer outro meio programático (como função JavaScript) para validação.

As primeiras versões da Biblioteca de Formulários ToscaWidgets costumavam contar com o módulo FormEncode para suporte de validação. ToscaWidgets2 agora tem suporte de validação embutido disponível no módulo tw2.core. No entanto, ainda é possível usar técnicas de validação de FormEncode.

Para submeter um formulário ToscaWidgets à validação, o decorador @validate é usado.

@validate(form, error_handler, validators)
  • o ’form’ é o objeto de formulário ToscaWidgets a ser validado.

  • o ‘error-handler’ é o método do controlador usado para lidar com erros de formulário.

  • o ‘validators’ são um objeto de dicionário contendo validadores FormEncode.

Tipos de validadores

O módulo tw2.core contém uma classe validadora da qual outros validadores são herdados. Também é possível projetar um validador personalizado com base nele. Alguns dos validadores importantes são descritos abaixo -

LengthValidator- Verifique se um valor tem um comprimento prescrito. Os limites mínimo e máximo são definidos com os parâmetros mínimo e máximo. Mensagens personalizadas para comprimento abaixo e acima de mínimo e máximo podem ser especificadas como parâmetro tooshort e toolong.

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

RangeValidator- Normalmente usado junto com RangeField. É útil para validar o valor de um campo numérico dentro dos limites mínimo e máximo. Mensagens para parâmetros tooshort e toolong podem ser personalizadas.

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

IntValidator- Esta classe é derivada do RangeValidator. Isso normalmente é usado para validar se a entrada em um campo de texto normal contém dados inteiros. Limites mínimo e máximo, bem como mensagens de erro, podem ser definidos. Além disso, a mensagem de erro para entrada não inteira pode ser especificada como parâmetro 'notint'.

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

OneOfValidator - Este validador força o usuário a selecionar um valor apenas das opções disponíveis na lista.

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

DateValidator- Muito útil para garantir que a entrada do usuário seja uma data válida. O formato da data (o padrão é YMD) e a mensagem de erro são personalizáveis. Os limites de data mínimo e máximo também podem ser especificados. DateTimeValidator também está disponível para verificar o objeto da classe DateTime.

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

EmailValidator- Valida a entrada do usuário em um endereço de e-mail válido. Esta classe é herdada de um RegexValidator mais geral.

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

UrlValidator- Esta classe também é herdada de RegexValidator. Ele valida a entrada do usuário para um URL válido.

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

MatchValidator- Confirma se o valor de um campo é compatível com o outro. Isso é especialmente útil, quando o usuário precisa escolher e confirmar um campo de senha. O uso típico do MatchValidator é mostrado abaixo -

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

Também é possível construir um validador composto, onde se deseja que a validação seja bem-sucedida, se alguma das verificações passar. Em outros casos, você pode querer que a validação seja bem-sucedida, apenas se a entrada passar em todas as verificações. Para isso, tw2.core fornece os validadores Any e All, que são subclasses do CompoundValidator extensível.