ZOPE的SCHEMAS和WIDGETS(表单) 难度:新手 技能: 熟悉Python的各种内建类型。 熟悉HTML表单和CGI。 了解关于Formulator(Zope2)的知识将更好(可选)。 问题/任务: 此开发的初期,Zope3开发者清楚认识到手工地写HTML表单和手工地验证输入将是非常麻烦的。 我们意识到如果我们扩展接口,我们可以自动生成HTML表单以及自动的验证任何的输入。 本章给一些背景资料和正式的介绍zope.schema和zope.app.form包。 解决方案 历史和动机 本来,我简单想将Formulator移植到Zope3中,Formulator是Zope2非常成功产品,用来自动生成和验证表单。 在Formulator,你想要在一个表单里创建多样的输入栏(像整数或者本文行)和提供一些关于字段的元数据,像字符串长度的最大和最小值。 你可以告诉表单简单的自己提供这些。更多详情参见http://zope.org/Members/infrae/Formulator。 尽管Formulator试着去分离应用逻辑和显示,但是还有一些部分仍然没有充分的分离,主要由于Zope2的限制。 因此,直到Jim Fulton和Martijn Faassen(Formulator的原作者)开发了schemas的思想,才使原来的移植想法在Zope3里只剩下了一个hack。这个想法是Martijn Faassen在柏林BBQ Sprint上(2002年四月)当试图联合Zope3版本的Formulator 和类属性时提出的。 当所有的显示逻辑被删除后,Formulator字段感觉上更像属性的接口说明。如此我们意识到,如果我们在接口中多供应些属性的元数据,那么我们可以完成HTML表单的自动生成和校验。 这些扩展属性仍被称为"字段(fields)"。如果界面包含字段。那么这个界面通常称为schema。以下是schemas开发的三个主要的目标: 在API级别上的完整的属性规范 数据输入的校验和转换 自动化GUI表单生成(主要为Web浏览器) 模型(Schema)vs接口(Interfaces) 核心Schema字段 使用forms包来自动生成表单