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.