推荐的Python表单验证库
我想要一个表单验证的库,它需要满足以下两个条件:
1. 将生成HTML的部分和表单验证的部分分开;
2. 验证错误可以很方便地转成其他格式,比如可以输出成一个JSON对象。
在一个Python的网页项目中,你会选择哪个表单验证库呢?
5 个回答
这个话题有点老了,但我想毫不客气地推荐一个我为这个目的写的库。这个库不仅仅适用于HTML表单,但至少部分是考虑到它们而写的。
我在给它起名字的时候没什么创意,所以就叫它“Validator”(验证器)吧。这里是链接: https://github.com/wilhelm-murdoch/Validator
我可能会选择 WTForms。
免责声明
总的来说,我现在对HTML表单库有点谨慎。如果你使用一个大型框架的东西,通常你得把整个框架都作为依赖引入进来。
很多大型框架的子组件声称不依赖于框架,但我们别自欺欺人。如果你不使用某个框架,我知道至少有十几种表单库,它们的功能差别很大。光是选择就可能让人感到困惑。一般来说,正如Ian Bicking多年前所说的那样,这种适合所有人的表单库的想法是相当荒谬的。实际上,我认为在决定真的需要一个之前,你可能需要再考虑一下。大多数情况下,你只需要一个像FormEncode这样的表单验证库。具体要看你想怎么用。
对我来说,因为我不使用大型框架,所以我会选择一些轻量级、易于上手和配置的东西,而且这些东西不会妨碍正常使用HTML/JS/CSS。
免责声明结束
我试过ToscaWidgets、ToscaWidgets 2、Formish、Deform、WTForms和FormEncode。我得说,没有一个是完美的。以下是我对它们的体验:
- ToscaWidgets,ToscaWidgets 2 - 功能非常强大,但也非常复杂。ToscaWidgets 2好很多,但现在还是处于初期阶段。设置起来需要一些技巧,而且每当你需要自定义默认模板时,代码会迅速变得臃肿。
- Formish/Deform - 功能几乎和ToscaWidgets一样强大,但Formish现在已经不再更新了。它也和Mako紧密绑定,所以如果你不使用Mako,可能不适合你。Deform是Formish的重写,但引入了很多Zope的依赖。Chameleon在支持其他模板语言方面也还不够成熟。这两个库的设置也不是特别简单。
- WTForm - 非常简单,不会妨碍你使用,而且开发活跃。它的功能没有上面那些库强大,但通常可以处理你可能遇到的80%的用例,所以足够用了。
- FormEncode - 自2005年以来一直被验证过的库。经过充分测试,提供了最多的预构建验证器,支持条件验证,并且能用几十种语言提供有用的错误信息。它还有一个非常简单但专注的功能,可以生成预填充值和错误信息的HTML表单代码。缺点是API有时不太直观,内部代码也比较混乱。不过这个库相当可靠,适合所有数据验证的用例,我总是回到这个库。
截至2012年底,快速搜索一下Python验证库,结果显示有数百个包。去掉那些Django扩展,活跃开发的库大约有十几个。似乎有一个趋势是使用JSON-Schema来定义模式,并能够通用地验证Python数据结构。这可能反映了服务器应用开发者希望从多个渠道(RESTful API和HTML表单)接受用户数据,但仍然希望只使用一个验证库。
考虑到Python 3.3的发布可能会引发大量现有库迁移到支持Python 3.x(反过来,旧库可能会停滞,只兼容Python 2.x),选择一个已经支持或正在积极支持Python 3.x的库可能是明智的。
最后,选择表单验证库时另一个重要的考虑是能够报告有用的错误信息,这通常意味着长期需要本地化错误信息。提供自己错误信息的便利性将迅速决定将库与其他Web应用架构集成的复杂性。
有前途的新兴库:
- Voluptuous(非常受欢迎,API非常简单)
- Kanone(受FormEncode启发)
- Schema(与docopt同一作者,API非常简单)