用于显示表单数据和验证错误的最干净的设计模式?

时间:2011-01-27 13:38:33

标签: python design-patterns forms

在现实生活中,如果我使用表单框架,我不可避免地会在某些时候与它进行斗争。

我对在网站中构建表单的最佳实践模式感兴趣。参考任何语言的实现都是一个奖励(我通常使用Python)。我对向最终用户创建/显示表单的问题特别感兴趣。

以下是我看待主题的方式。表单工作流的大多数部分都可以使用相对轻量级的组件来处理,我可以从formencodeformish这样的框架中提取。 “大多数部分”是指解码将提交的表单数据转换为合理的数据结构(例如,表单中的重复字段应该成为Python中的列表); 编组将值转换为我们想要的类型(例如,“age”字段应该变成整数);并且验证值(例如“年龄不能为空”)。

我最终战斗的一点是制作和展示表格本身。许多框架(例如FormAlchemy)将他们的模式,验证和模型紧密地耦合到某种形式的小部件生成方案,这是我不喜欢的。

制作表单所涉及的任务是:

  • 制作动态小部件(例如,包含数据库中值的选择列表)
  • 循环重复的字段集(例如,名称列表,每个代表一个人的年龄对)
  • 在表单字段中嵌入现有值(来自数据结构)
  • 在表单字段旁边或页面顶部显示验证错误

我看到的选项是:

  • 生成,基于架构中定义的小部件(例如Django
  • 后期处理表单,将包含错误和值的数据结构应用于HTML模板(例如htmlfill
  • 接受除了最简单的情况之外,您可以从一开始就通过在每个表单模板中编码逻辑(循环,错误显示等)手动来开始

还有其他处理问题的模式吗?各自的优点和缺点是什么?

到目前为止我已经看过/已经指出的框架(Python)是:flatlandformencodeFormAlchemyformish,{{ 3}},WTForms表单,Djangoweb2pydeformFormConvert

更新:我回答关于构建表单的最佳实践的问题并不是很远,但我已经决定使用我当前的项目来进行变形/漏勺,是处理序列化等的理智方式,但更重要的是有充分的文档和经过充分测试。除了最简单的形式之外,我将完全避免使用表单生成。

6 个答案:

答案 0 :(得分:3)

您可以尝试django。它有forms模块,为Web表单提供了许多有用的机制。

答案 1 :(得分:1)

还有web.py的Form类,您可能会感兴趣。 cookbook中有一些例子。

答案 2 :(得分:1)

您可以查看web2py,它为generating and processing forms提供了多种机制(另请参见与表单相关的Javascript and Ajax functionality)。它的表单对象(和其他HTML帮助程序对象)是HTML DOM的服务器端表示,可以在序列化为HTML之前进行操作(请参阅ref1ref2ref3,{{ 3}})。如果您对此有任何疑问,请致电ref4

答案 3 :(得分:1)

在PyCon 2010上展示了一个由几位表单库作者组成的小组,该小组可能与您的问题相关:

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

答案 4 :(得分:1)

我最近使用flatland处理复杂的表单,发现它非常灵活。没有小部件库,但它有一个强大的HTML生成器/过滤器,并且在文档中作为pointed out,编写自己的小部件非常简单。不要让“0.0.2”版本欺骗你,图书馆非常成熟和稳定。

答案 5 :(得分:0)

你看过布鲁诺的django-floppyforms了吗?它没有回答你的问题,但值得注意它已经完成。