Самый чистый шаблон проектирования для отображения данных формы и ошибок проверки? - PullRequest
9 голосов
/ 27 января 2011

В реальных приложениях, если я использую фреймворк форм, в какой-то момент я неизбежно столкнусь с ним.

Меня интересуют шаблоны наилучшей практики для создания форм на веб-сайте.Ссылка на реализации на любом языке будет бонусом (я обычно работаю на Python).Меня особенно интересует проблема создания / отображения форм для конечного пользователя.

Вот как я вижу предмет.Большинство частей рабочего процесса формы могут быть обработаны с помощью относительно легких компонентов, которые я могу извлечь из каркасов, таких как formencode и formish .Под «большинством частей» я имею в виду декодирование отправленных данных формы в разумную структуру данных (например, повторяющиеся поля в форме должны стать списками в Python); маршаллинг значений в нужные нам типы (например, поле "age" должно стать целым числом);и проверка значений (например, "возраст не должен быть пустым").

Бит, который я заканчиваю борьбой, заключается в создании и отображении самих форм.Многие фреймворки (например, FormAlchemy ) тесно связывают свои схемы, валидацию и модели с какой-то схемой генерации виджетов форм, что мне не нравится.

Задачи, связанные с созданием формы::

  • Создание динамических виджетов (например, список выбора со значениями из базы данных)
  • Цикл по повторяющимся наборам полей (например, список имен, возрастных пар, каждый из которых представляет человека)
  • Встраивание существующих значений в поля формы (из структуры данных)
  • Отображение ошибок проверки рядом с полями формы или в верхней части страницы

Параметры Iдля этого необходимо выполнить следующие действия:

  • генерировать на основе виджетов, определенных в схеме (например, Django )
  • пост-процесс формы, применяя структуру данных, содержащую ошибки и значения, к шаблону HTML (например, htmlfill )
  • допускают, что для всех случаев, кроме самых простых, вы можетехорошо начать с самого началаoding логика (циклы, отображение ошибок и т. д.) вручную в каждом из ваших шаблонов форм

Существуют ли другие шаблоны для решения проблемы?Каковы плюсы и минусы каждого?

Фреймворки (Python), на которые я смотрел / которые уже указывали: flatland , formencode , FormAlchemy , formish , WTForms , Django форм, web2py , деформации , FormConvert и web.py

Обновление: Мне не так уж и далеко до ответа на вопрос о наилучшей практике создания форм, но я сделалрешение с моим текущим проектом пойти на деформацию / дуршлаг, который является разумным способом обработки сериализации и т. д., но что более важно, хорошо документировано и хорошо протестировано.Я собираюсь избегать генерации форм для всех, кроме самых простых форм.

Ответы [ 6 ]

3 голосов
/ 27 января 2011

Вы можете попробовать django. Он имеет модуль forms, который предоставляет множество полезных механизмов для веб-форм.

1 голос
/ 24 января 2012

Я недавно использовал равнину для обработки сложной формы и обнаружил, что она очень гибкая.Там нет библиотеки виджетов, но у нее есть мощный генератор / фильтр HTML, и, как указывает в документации , довольно просто написать свои собственные виджеты.Не позволяйте версии "0.0.2" обмануть вас, библиотека вполне зрелая и стабильная.

1 голос
/ 08 февраля 2011

На PyCon 2010 была представлена ​​панель с несколькими авторами библиотеки форм, которая может иметь отношение к вашему вопросу:

http://www.pycon.tv/video/184/

1 голос
/ 28 января 2011

Вы можете проверить web2py , который предоставляет несколько механизмов для генерации и обработки форм (см. Также связанные с формами функции Javascript и Ajax ).Его объекты формы (и другие вспомогательные объекты HTML) являются серверными представлениями HTML DOM и могут использоваться до сериализации в HTML (см. ref1 , ref2 , ref3, ref4 ).Если у вас есть дополнительные вопросы, задайте их в списке рассылки .

1 голос
/ 27 января 2011

Также есть класс web.py , который может быть вам интересен. В его кулинарной книге .

есть примеры.
0 голосов
/ 14 февраля 2011

Вы видели Джанго-флоппиформ Бруно ?Это не отвечает на ваш вопрос, но стоит знать, что это делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...