TurboGears - Проверка
Хорошая библиотека виджетов Forms должна иметь функцию проверки ввода. Например, пользователя следует заставить ввести данные в обязательное поле или проверить, содержит ли поле электронной почты действительный адрес электронной почты, не прибегая к каким-либо другим программным средствам (например, функциям JavaScript) для проверки.
Ранние версии библиотеки форм ToscaWidgets, которые использовали модуль FormEncode для поддержки проверки. ToscaWidgets2 теперь имеет встроенную поддержку проверки, доступную в модуле tw2.core. Однако по-прежнему можно использовать методы проверки FormEncode.
Для проверки формы ToscaWidgets используется декоратор @validate.
@validate(form, error_handler, validators)
В ’form’ это объект формы ToscaWidgets, который нужно проверить.
В ‘error-handler’ это метод контроллера, используемый для обработки ошибок формы.
В ‘validators’ являются объектом словаря, содержащим валидаторы FormEncode.
Типы валидаторов
Модуль tw2.core содержит класс валидатора, от которого унаследованы другие валидаторы. Также на его основе можно разработать собственный валидатор. Некоторые из важных валидаторов описаны ниже -
LengthValidator- Проверьте, имеет ли значение заданную длину. Минимальные и максимальные пределы определяются с помощью параметров min и max. Пользовательские сообщения для длины ниже и выше 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.