Alterator/module/types: различия между версиями
Ilis (обсуждение | вклад) |
Ilis (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
=== Автоматическая проверка данных === | === Автоматическая проверка данных === | ||
Иногда необходимо производить валидацию введённых пользователем данных. Можно это делать вручную в | Иногда необходимо производить валидацию введённых пользователем данных. Можно это делать вручную в бэкенде, но гораздо удобнее воспользоваться автоматической проверкой типов, выполняемой альтератором при передаче данных в бэкенд. | ||
==== Изменения в | ==== Изменения в бэкенде ==== | ||
Делается это следующим образом. В | Делается это следующим образом. В бэкенде добавляется ответ на запрос «type». В нем перечисляются параметры, с которыми работает бэкенд, и их типы. Для формирования правильного ответа стоит воспользоваться стандартной библиотекой, например для бэкенда на shell объявление типов будет выглядить следующим образом. | ||
<source lang="bash"> | <source lang="bash"> | ||
Строка 24: | Строка 24: | ||
</source> | </source> | ||
В примере выше объявлено что параметр 'a' будет иметь тип 'IP адрес', 'b' | В примере выше объявлено что параметр 'a' будет иметь тип 'IP адрес', 'b' — 'TCP порт' и теперь пользователь не сможет передать в бэкенд в качестве 'a' что-либо отличное IP адреса и в качестве 'b' что-либо отличное от целого числа находящегося в определённом диапазоне. | ||
==== Изменения в интерфейсе ==== | ==== Изменения в интерфейсе ==== | ||
На этом возможности системы типов не исчерпываются. Предположим, что пользователь ввёл-таки неправильное значение в поле, соотвествующее параметру 'a'. Он увидит следующее сообщение об ошибке: | На этом возможности системы типов не исчерпываются. Предположим, что пользователь ввёл-таки неправильное значение в поле, соотвествующее параметру 'a'. Он увидит следующее сообщение об ошибке: | ||
< | <source lang="text"> | ||
a: недопустимый IP-адрес | a: недопустимый IP-адрес | ||
</ | </source> | ||
Однако никакого 'a' на его экране не наблюдается. В каком именно поле случилась ошибка? | Однако никакого 'a' на его экране не наблюдается. В каком именно поле случилась ошибка? | ||
Система типов alterator в состоянии справиться с этим. Для этого всего-лишь необходимо, чтобы у '''названия поля''' был задан атрибут 'name' содержащий '''имя параметра | Система типов alterator в состоянии справиться с этим. Для этого всего-лишь необходимо, чтобы у '''названия поля''' был задан атрибут 'name' содержащий '''имя параметра бэкенда''', которому соответствует это поле. | ||
Пример для qt: | Пример для qt: | ||
< | <source lang="text"> | ||
... | ... | ||
(label text "Field" name "a") | (label text "Field" name "a") | ||
(edit name "a") | (edit name "a") | ||
... | ... | ||
</ | </source> | ||
Теперь в случае ошибки, пользователь увидит следующее сообщение: | Теперь в случае ошибки, пользователь увидит следующее сообщение: | ||
< | <source lang="text"> | ||
Field: недопустимый IP-адрес | |||
</ | </source> | ||
Аналогичный пример для html: | Аналогичный пример для html: | ||
< | <source lang="html4strict"> | ||
.... | .... | ||
<span name="a" translate="_">Field:</span> | <span name="a" translate="_">Field:</span> | ||
<input type="text" name="a"/> | <input type="text" name="a"/> | ||
... | ... | ||
</ | </source> | ||
==== Список типов ==== | ==== Список типов ==== |
Версия от 19:27, 26 октября 2008
Автоматическая проверка данных
Иногда необходимо производить валидацию введённых пользователем данных. Можно это делать вручную в бэкенде, но гораздо удобнее воспользоваться автоматической проверкой типов, выполняемой альтератором при передаче данных в бэкенд.
Изменения в бэкенде
Делается это следующим образом. В бэкенде добавляется ответ на запрос «type». В нем перечисляются параметры, с которыми работает бэкенд, и их типы. Для формирования правильного ответа стоит воспользоваться стандартной библиотекой, например для бэкенда на shell объявление типов будет выглядить следующим образом.
. alterator-sh-functions
on_message()
{
case "$in_action" in
type)
write_type_item a ipv4-address
write_type_item b tcp-port
;;
read)
...
esac
}
В примере выше объявлено что параметр 'a' будет иметь тип 'IP адрес', 'b' — 'TCP порт' и теперь пользователь не сможет передать в бэкенд в качестве 'a' что-либо отличное IP адреса и в качестве 'b' что-либо отличное от целого числа находящегося в определённом диапазоне.
Изменения в интерфейсе
На этом возможности системы типов не исчерпываются. Предположим, что пользователь ввёл-таки неправильное значение в поле, соотвествующее параметру 'a'. Он увидит следующее сообщение об ошибке:
a: недопустимый IP-адрес
Однако никакого 'a' на его экране не наблюдается. В каком именно поле случилась ошибка?
Система типов alterator в состоянии справиться с этим. Для этого всего-лишь необходимо, чтобы у названия поля был задан атрибут 'name' содержащий имя параметра бэкенда, которому соответствует это поле.
Пример для qt:
...
(label text "Field" name "a")
(edit name "a")
...
Теперь в случае ошибки, пользователь увидит следующее сообщение:
Field: недопустимый IP-адрес
Аналогичный пример для html:
....
<span name="a" translate="_">Field:</span>
<input type="text" name="a"/>
...
Список типов
название типа | комментарии |
---|---|
boolean | #t или #f |
date | YYYY-MM-DD, месяц от 01 до 12, день от 01 до 31 |
time | HH:MM:SS |
ipv4-address | NNN.NNN.NNN.NNN |
ipv4-address-list | список адресов, разделенный пробелами |
ipv4-network | NNN.NNN.NNN.NNN/MM |
hostname | ^[.a-zA-Z0-9_-]*$ |
hostname-list | список имен, разделенный пробелами |
tcp-port | 0..65535 |
iso-3166-alpha-2 | двухбуквенный код страны |
system-account-name | ^[a-z][a-z0-9_-]*$ |