Учебники

TurboGears — Валидация

Хорошая библиотека виджетов Forms должна иметь функцию проверки ввода. Например, пользователь должен быть вынужден ввести данные в обязательное поле или проверить, содержит ли поле электронной почты действительный адрес электронной почты, не прибегая к каким-либо другим программным средствам (таким как функция JavaScript) для проверки.

Ранние версии библиотеки форм ToscaWidgets использовались модулем FormEncode для поддержки проверки. ToscaWidgets2 теперь имеет встроенную поддержку проверки, доступную в модуле tw2.core. Тем не менее, все еще возможно использовать методы проверки FormEncode.

Для проверки формы ToscaWidgets используется @validate decorator.

@validate(form, error_handler, validators)
  • «Форма» — это объект формы ToscaWidgets, подлежащий проверке.

  • «Обработчик ошибок» — это метод контроллера, используемый для обработки ошибок формы.

  • «Валидаторы» — это объект словаря, содержащий валидаторы FormEncode.

«Форма» — это объект формы ToscaWidgets, подлежащий проверке.

«Обработчик ошибок» — это метод контроллера, используемый для обработки ошибок формы.

«Валидаторы» — это объект словаря, содержащий валидаторы FormEncode.

Типы валидаторов

Модуль tw2.core содержит класс валидатора, от которого наследуются другие валидаторы. Также возможно разработать собственный валидатор на его основе. Некоторые из важных валидаторов описаны ниже —

LengthValidator — Проверьте, имеет ли значение заданную длину. Минимальные и максимальные пределы определяются параметрами min и max. Пользовательские сообщения для длины ниже и выше мин и макс можно указать как параметр tooshort и toolong.

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

RangeValidator — обычно используется вместе с RangeField. Это полезно для проверки значения числового поля в пределах минимального и максимального пределов. Сообщения для параметров tooshort и toolong могут быть настроены.

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

IntValidator — этот класс является производным от RangeValidator. Обычно это используется для проверки, если ввод в обычном текстовом поле содержит целочисленные данные. Минимальные и максимальные пределы, а также сообщения об ошибках могут быть установлены. Кроме того, сообщение об ошибке для нецелочисленного ввода может быть указано как параметр notint.

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

OneOfValidator — этот валидатор заставляет пользователя выбирать значение из доступных опций только в списке.

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

DateValidator — очень полезно, чтобы гарантировать, что пользовательский ввод является действительной датой. Формат даты (по умолчанию YMD) и сообщение об ошибке настраиваются. Минимальные и максимальные пределы даты также могут быть указаны. DateTimeValidator также доступен для проверки объекта класса DateTime.

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

EmailValidatorпроверяет ввод пользователя по действительному адресу электронной почты. Этот класс унаследован от более общего RegexValidator.

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

UrlValidator — этот класс также унаследован от RegexValidator. Он проверяет вводимые пользователем данные для действительного URL.

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

MatchValidator — подтверждает, сопоставлено ли значение одного поля с другим. Это особенно полезно, когда пользователь должен выбрать и подтвердить поле пароля. Типичное использование MatchValidator показано ниже —

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

Также возможно построить составной валидатор, где валидация должна быть успешной, если какая-либо из проверок пройдена. В других случаях вы можете захотеть, чтобы проверка прошла успешно, только если входные данные прошли все проверки. Для этого tw2.core предоставляет валидаторы Any и All, которые являются подклассами расширяемого CompoundValidator.