Рекомендация для библиотеки проверки формы Python

Я хотел бы библиотеку проверки формы, которая

1. отделить генерацию HTML от проверки формы;

Ошибки 2.validation могут быть легко сериализованы, например. выгружается как объект JSON

Какую библиотеку проверки формы вы бы выбрали в веб-проекте Python?

5 ответов

отказ

Вообще говоря, я немного настороженно отношусь к библиотекам форм HTML. Если вы используете что-то из мега-фреймворка, вам обязательно нужно ввести всю мега-фреймворк как свою зависимость.

Многие подкомпоненты многих мега-фреймворков утверждают, что не зависят от фреймворка, но давайте не будем обманывать себя. Если вы не используете одну из них, я знаю, по крайней мере, дюжину библиотек форм с широким диапазоном различий в возможностях. Только один выбор может стать довольно запутанным. Вообще говоря, как говорит Ян Биккинг много лет назад и все еще верно, я думаю, что понятие библиотеки форм, которая подходит всем, довольно нелепо. На самом деле, я бы сказал, что вам, вероятно, нужно подумать дважды, прежде чем решить, что он вам действительно нужен. Скорее всего, в большинстве случаев вам просто нужна библиотека для проверки форм, такая как FormEncode. Это действительно зависит от того, как вы хотите его использовать.

Для меня, так как я не использую мега-фреймворк, я бы выбрал что-то более легкое, простое в подборе и настройке и что-то, что не мешает нормальному использованию HTML/JS/CSS,

END Отказ от ответственности

Я пробовал ToscaWidgets, ToscaWidgets 2, Formish, Deform, WTForms и FormEncode. Я должен сказать, что ни один из них не идеален. Вот мой опыт с ними:

  • ToscaWidgets, ToscaWidgets 2 - Чрезвычайно мощный, но и чрезвычайно сложный. ToscaWidgets 2 намного лучше, но все еще довольно альфа-банкомат. Для настройки требуется немало навыков ниндзя, и ваш код имеет тенденцию довольно быстро увеличиваться, когда вам нужно настроить шаблоны по умолчанию.
  • Formish / Deform - Почти такой же мощный, как TW, но Formish сейчас бездействует. Это также довольно тесно связано с Мако, поэтому, если вы не используете Мако, это, вероятно, не для вас. Деформация - это переписывание Formish, но она вносит тонны зависимостей Zope. Хамелеон также еще не совсем там с точки зрения поддержки других шаблонных языков, кроме ZPT. Эти 2 библиотеки также не очень просты в настройке.
  • WTForm - Очень просто, не мешает, и очень активен в плане разработки. Он далеко не такой мощный, как перечисленные выше библиотеки, но, как правило, учитывает 80% случаев, с которыми вы можете столкнуться, поэтому он достаточно хорош.
  • FormEncode - Испытано и проверено с 2005 года. Его хорошо протестировано, поставляется с наибольшим количеством встроенных валидаторов, поддерживает условную валидацию и полезные сообщения об ошибках на десятках языков. Он также обладает очень простой, но целенаправленной способностью генерировать код формы в HTML, предварительно заполненный значениями и сообщениями об ошибках. К его недостаткам относится иногда неинтуитивный API и его абсолютно спагетти-подобный внутренний код. Однако эта библиотека достаточно надежна и очень хорошо подходит для всех случаев использования проверки данных, и я всегда возвращаюсь к ней.

По состоянию на конец 2012 года быстрый поиск в Google и PyPI библиотеки проверки Python возвращается с сотнями пакетов. Есть чуть более десятка известных, исключая те расширения Django, которые находятся в стадии активной разработки. Кажется, что существует тенденция к определению схемы с использованием JSON-Schema и возможности общей проверки структур данных Python. Вероятно, это является отражением того, что разработчики серверных приложений принимают пользовательские данные из нескольких каналов (API-интерфейсы RESTful и HTML-формы), но по-прежнему хотят использовать только одну библиотеку проверки.

Учитывая, что выпуск Python 3.3, вероятно, вызовет массовое движение в сторону переноса существующих библиотек для поддержки Python 3.x (обратная сторона того, что старые библиотеки остаются неизменными и остаются совместимыми только с Python 2.x), может быть целесообразно выберите тот, который уже поддерживает или активно работает для поддержки Python 3.x.

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

Перспективные новички:

Я бы, наверное, выбрал WTForms.

Эта тема немного старая, но я подумал, что постыдно подключу библиотеку, которую пишу для этой цели. Это не только для HTML-форм, но было написано с ними, по крайней мере, частично.

Я не чувствовал себя очень креативно, когда назвал его, так что "Валидатору" придется сейчас заняться Здесь вы идете: https://github.com/wilhelm-murdoch/Validator

Это зависит от того, какой тип фреймворка вы используете.

Для вашей задачи я бы порекомендовал вам использовать web2py-Framework, который прост в использовании и по-прежнему "силен". Он имеет форму проверки по умолчанию ( web2py-книга бесплатна), которая делает именно то, что вы хотите: он отделяет генерацию HTML от проверки и делает это автоматически, но вы можете, если хотите, настроить его.

Пример:

def display_form():
    form=FORM('Your name:',
              INPUT(_name='name', requires=IS_NOT_EMPTY()),
              INPUT(_type='submit'))
    if form.accepts(request.vars, session):
        response.flash = 'form accepted'
    elif form.errors:
        response.flash = 'form has errors'
    else:
        response.flash = 'please fill the form'
    return dict(form=form)

Также возможно сериализовать ошибки, но для этих вопросов лучше всего задавать их в web2py-group. Они очень милые и очень быстро помогут.

Надеюсь, поможет! С наилучшими пожеланиями..

Это зависит от того, какую базовую структуру вы используете.

для django лучше всего использовать встроенную форму

в то время как Кей использует расширенную версию системы форм Zine

и tipfy использует WTForms.

Встроенная система в django пока лучшая.

какие рамки вы используете под капотом?

Другие вопросы по тегам