显示表单数据和验证错误的最佳设计模式是什么?
在实际应用中,如果我使用一个表单框架,最终总会在某个时候和它发生冲突。
我对在网站上构建表单的最佳实践模式很感兴趣。如果能提到任何语言的实现,那就更好了(我通常使用Python)。我特别关注的是如何创建和展示表单给最终用户。
这是我对这个话题的看法。表单工作流程的大部分内容可以通过一些轻量级的组件来处理,这些组件可以从像 formencode 和 formish 这样的框架中提取出来。这里的“大部分”指的是解码提交的表单数据为一个合理的数据结构(例如,表单中重复的字段应该变成Python中的列表);转换这些值为我们想要的类型(例如,一个“年龄”字段应该变成一个整数);以及验证这些值(例如,“年龄不能为空”)。
我最终会和表单本身的创建和展示发生冲突。许多框架(例如 FormAlchemy)将它们的模式、验证和模型紧密结合到某种表单小部件生成方案中,这让我不太喜欢。
制作表单涉及的任务有:
- 制作动态小部件(例如,从数据库中获取值的下拉列表)
- 循环处理重复的字段集(例如,一组姓名和年龄的配对,每个代表一个人)
- 在表单字段中嵌入已有的值(来自数据结构)
- 在表单字段旁边或页面顶部显示验证错误
我看到的处理这些任务的选项有:
- 生成,基于在模式中定义的小部件(例如 Django)
- 后处理表单,通过将包含错误和值的数据结构应用到HTML模板中(例如 htmlfill)
- 接受对于除了最简单的情况之外,你可能需要在每个表单模板中手动编码逻辑(循环、错误显示等)
还有其他处理这个问题的模式吗?每种方法的优缺点是什么?
我目前查看过的框架(Python)包括: flatland, formencode, FormAlchemy, formish, WTForms, Django 表单, web2py, deform, FormConvert 和 web.py
更新:我还没有找到关于构建表单的最佳实践的答案,但我在当前项目中决定使用deform / colander,这是一种处理序列化等的合理方法,更重要的是,它有很好的文档和测试。我将尽量避免为除了最简单的表单之外的所有表单生成。
6 个回答
在2010年的PyCon大会上,有一个讨论小组,里面有几个表单库的作者,他们分享了一些内容,可能对你的问题有帮助:
你可以试试 django
。它有一个叫 forms
的模块,这个模块提供了很多方便的工具,可以帮助你处理网页表单。