Краткое описание пакета ng.base.form
====================================
Пакет предоставляет возможность разработки продуктов, позволяющих
через веб-интерфейс задать поля и умолчания формы и затем вызывать ее,
обрабатывая введенные данные специфичным для продукта способом. Таким образом созданы
продукты [name:ng.app.registry] и [name:ng.app.mailform].

Основная составная часть **ng.base.form** - контейнер, в котором можно создать
поля формы и задать для них ограничения и значения по умолчанию.

Использование продуктов на основе ng.base.form
----------------------------------------------
Любой продукт на основе **ng.base.form** предоставляет упорядоченный контейнер, в котором создаются элементы, описывающие 
поля формы. Существуют поля следующих типов:

INT
    Поле позволяет ввести целочисленное значение. Настройки поля примерно соответствуют описанию 
    поля **ng.schema.Int**;

Textline
    Поле позволяет ввести одну строку текста. Настройки поля примерно соответствуют описанию 
    поля **ng.schema.Textline**;

Text
    Поле позволяет ввести многострочный текст. Настройки поля примерно соответствуют описанию поля **ng.schema.Text**;

Regexp
    Поле позволяет ввести одну строку текста, проверить ее на соответствие регулярному выражению, и выполнить несколько
    последовательных операций переписывания введенного значения. Настройки поля подробно описаны
    в [name:ng.schema:описании поля RegExp].

Самым удобным полем является поле **RegExp**, позволяющее создать понятную пользователю диагностику и привести введенное
значение к некоторому "нормальному" виду.

После того, как настройка продукта на основе **ng.base.form** выполнена, для этого продукта можно вызвать следующие виды::

form.html
    Соответствует обычной форме редактирования и может использоваться в стандартном интерфейсе редактирования для решения
    каких-либо административных задач;
    
dialog.html
    Специальная форма, ориентированная на конечного пользователя. Возможности настройки, предоставляемые продуктом **ng.base.form**
    позволяют указать текст, отображемый пользователю после отправки формы, и другие настройки.
    
Экземпляры объектов, созданных на основе **ng.base.form** можно регистрировать как утилиты с интерфейсом **ng.base.form.interfaces.IFormDialog**
и вызывать форму для заполнения через [keyword:namespace:пространство имен] **dialog** под указанным именем (если утилита зарегистрирована под именем **feedback**,
то форму можно вызвать как "**/++dialog++feedback**").

Способ обработки значений, введенных в форму, зависит от реализации продукта, основанного на **ng.base.form**.

Разработка продуктов на основе ng.base.form
--------------------------------------------
Разработка продукта на основе **ng.base.form** включает в себя создание
контент-класса, унаследованного от ng.base.form.form.Form, и реализация для
этого класса интерфейса **** (непосредственно или с использованием
адаптера). Пример такого класса::

    from ng.base.form.formcontainer import Form

    class MailForm(Form,Persistent) :
        implements(IFormDialog,I)
        
        value = u""
        
        def do(self,d,**kw) :
            self.value = "\n".join( [str(x) + ":" + str(y) for x,y in d.items()])

Этот класс сохраняет введенные в форме значения в виде текста в атрибуте **value**, который 
потом может как-то использоваться. 
    
Заключение
----------
На основе продукта **ng.base.form** удобно создавать средства интерактивной работы конечных пользователей сайтов,
позволяющие настраивать их редакторам сайта [keyword:ttw:через веб].

