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

2024-06-08 22:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在实际的应用程序中,如果我使用表单框架,我不可避免地会在某个时候与之抗衡。在

我对在网站中构建表单的最佳实践模式感兴趣。引用任何语言的实现都是一个额外的好处(我通常在Python中工作)。我对创建/向最终用户显示表单的问题特别感兴趣。在

以下是我对这个主题的看法。表单工作流的大多数部分都可以用相对轻量级的组件来处理,这些组件可以从formencode和{a2}等框架中提取出来。我所说的“大多数部分”是指将提交的表单数据解码为一个合理的数据结构(例如,表单中的重复字段在Python中应该变成列表);将值编组成我们想要的类型(例如,“age”字段应变为整数);以及验证这些值(例如,“年龄不能为空”)。在

我最后要做的就是制作和展示这些表格。许多框架(例如FormAlchemy)将它们的模式、验证和模型与某种表单小部件生成方案紧密地耦合在一起,这是我不喜欢的。在

制作表格的任务包括:

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

我认为这样做的选择是:

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

有没有其他处理这个问题的模式?各有哪些利弊?在

到目前为止,我所研究/指出的框架(Python)是:flatlandformencodeFormAlchemyformishWTFormsDjango形式,web2pydeformFormConvert和{a15}

更新:关于构建表单的最佳实践,我的回答还不算太远,但我已经在我当前的项目中决定使用deform/colander,这是处理序列化等问题的一种合理方法,但更重要的是,它有很好的文档记录和良好的测试。除了最简单的表单之外,我将完全避免表单生成。在


Tags: django框架表单数据结构列表部件错误模式
3条回答

还有一个web.py的表单类,您可能会觉得很有趣。在它的cookbook中有一些例子。在

你可以试试django。它有forms模块,为web表单提供了许多有用的机制。在

您可以查看web2py,它为generating and processing forms提供了几种机制(另请参见与表单相关的Javascript and Ajax functionality)。它的form对象(和其他HTML helper对象)是htmldom的服务器端表示,可以在序列化为HTML之前对其进行操作(请参见ref1ref2ref3ref4)。如果您对它有进一步的问题,请在mailing list上提问。在

相关问题 更多 >