跳转到主要内容

为Zope 3提供的高级表单和部件框架

项目描述

z3c.form

Latest release Supported Python versions https://github.com/zopefoundation/z3c.form/actions/workflows/tests.yml/badge.svg https://coveralls.io/repos/github/zopefoundation/z3c.form/badge.svg?branch=master Documentation Status

z3c.form 为HTML和JSON表单以及相应的组件提供了实现。其目标是提供简单的API,但同时也允许轻松地自定义任何数据或步骤。

目前有两个维护分支

  • master 包含最新的更改

  • 3.x 没有对象组件的重构,仍然包括 ObjectSubFormSubformAdapter

有关此实现及其API的文档可以在 https://z3cform.readthedocs.io/ 找到

变更日志

5.1 (2023-07-19)

  • HTMLFormElement.attributes: 允许以编程方式扩展HTML属性。

5.0 (2023-07-17)

  • 添加对Python 3.11的支持。

  • 停止支持Python 2.7、3.5、3.6。

  • 停止对 python setup.py test 的废弃支持。

  • HTMLFormElement.addClass: 改进重复项的删除。现在可以添加多个类作为空格分隔的字符串,同时还能检测重复的类。

4.3 (2022-03-24)

  • 添加对Python 3.10的支持。

  • 更新测试到 lxml > 4.7,因此至少需要该版本。(#107

  • 删除未使用的 ISubformFactory`。(#110) [petschki]

4.2 (2021-07-29)

  • 修复 MultiConverter.toFieldValue 对元组类型字段的支持(当 field._type 是类型元组而不是单个类型时)。

  • 添加 Python 3.9 兼容性和测试。

  • 应用 zopefoundation.meta 配置

  • 修复 zope.schema.Bool 必需默认值更改的测试。

  • 修复 zope.interface repr() 变化的测试。

  • 修复与更改的重复语法的兼容性问题。修复了 问题 94

  • 西班牙语翻译的一些修复。[erral]

  • 停止支持 Python 3.4。

  • 添加对 Python 3.8b4 的支持。

  • 尝试修复复选框小部件的隐藏模式行为问题。修复了 问题 89

4.1.2 (2019-03-04)

  • 修复当字段 missing_value 不是 `None` 而是一个作为 None 工作的定制值时的情况。这最终导致使用 None 调用 zope.i18n NumberFormat.format,然后失败。

4.1.1 (2018-11-26)

  • 修复 FieldWidgets.copy()。自从 SelectionManager 使用 OrderedDict 重新实现以来,它已经损坏。

4.1.0 (2018-11-15)

  • 添加对 Python 3.7 的支持。

  • 处理有序字段小部件中具有相同名称但不同值的项目。[rodfersou]

  • 将自制的 Manager 实现移动到 OrderedDict。[tomgross]

  • 将测试适配到 lxml >= 4.2zope.configuration >= 4.3zope.schema >= 4.7

4.0.0 (2017-12-20)

3.5.0 (2017-09-19)

  • 添加对 Python 3.6 的支持。

  • 停止支持 Python 3.3。

  • 使用非必需字段和 z3c.formwidget.query.widget.QuerySourceRadioWidget 时避免重复的 ID。[pgrunewald]

3.4.0 (2016-11-15)

  • 停止支持 Python 2.6。

  • 官方支持 Python 3.5。

  • 修复 TypeError:类型为 ‘generator’ 的对象没有 len()。在 z3c.formwidget.query 中发生。[maurits]

  • 将所有小部件中的 items 转换回属性。对于选择小部件,它自 2.9.0 以来是方法。对于单选按钮和小部件,它自 3.2.10 以来是方法。对于有序选择和多选,它始终是属性。修复 https://github.com/zopefoundation/z3c.form/issues/44 [maurits]

  • 修复集合中缺少项的处理。(参见 2.9 版本描述此功能。)

  • 修复 orderedselect_input.js 资源,使其可用于不扩展 zope.publisher.interfaces.browser.IDefaultBrowserLayer 的浏览器层。

3.3.0 (2016-03-09)

  • 重大 重构 ObjectWidget

    • 低级单元测试通过,但高级测试不理想。基本规则是,小部件想要原始值,所有转换都必须在 ObjectConverter 中完成

    • 移除了 ObjectSubFormSubformAdapter,它造成了更多问题而不是好处

    • 添加了高级集成测试

  • test extra 中移除了 z3c.coverage。[gforcada, maurits]

3.2.10 (2016-03-09)

  • 在需要时更好地确定单选按钮小部件的项 [agroszer]

  • 在需要时更好地确定复选框小部件的项 [agroszer]

  • 错误修复:ChoiceTerms适配器盲目地假设传入的字段是未绑定,这在有趣的ObjectWidget场景中并不一定如此。现在它首先检查非None的字段上下文。[srichter]

3.2.9 (2016-02-01)

  • 正确处理了RadioWidget中的noValueToken,避免了LookupError: --NOVALUE--。[gaudenz,ale-rt]

  • 为表单添加了json方法,为小部件添加了json_data方法。[mmilkin]

  • 更改JavaScript以更新有序选择小部件的隐藏结构,使其在IE11上再次工作,并且不会在保存时发送空列表删除所有选择。修复了https://github.com/zopefoundation/z3c.form/issues/23 [fredvd]

  • 开始荷兰语翻译。[maurits]

3.2.8 (2015-11-09)

  • 标准化命名空间__init__。[agroszer]

3.2.7 (2015-09-20)

  • 从有序选择小部件中删除“无法向上/向下移动”的消息。[esteele]

  • 更新了繁体中文翻译。[l34marr]

3.2.6 (2015-09-10)

  • 修复了本地化文件头部的警告。使用msgfmt -c进行检查。[maurits]

  • 添加了芬兰语翻译。[petri]

  • 添加了繁体中文翻译。[l34marr]

3.2.5 (2015-09-09)

  • 修复了Python 3中的错误:NameError:全局名称‘basestring’未定义。这修复了3.2.1版本中引入的bug。[maurits]

3.2.4 (2015-07-18)

  • 修复了有序选择输入小部件无法工作的问题。[vangheem]

  • 修复了ReSt问题。[timo]

3.2.3 (2015-03-21)

  • 3.2.2是一个棕色袋发布。修复MANIFEST.in以包括3.2.2中添加的js文件。[timo]

3.2.2 (2015-03-21)

  • 将js移动到单独的文件,以防止在Plone 5中存在转义实体。[pbauer]

3.2.1 (2014-06-09)

3.2.0 (2014-03-18)

  • 特性:添加了plone.login所需文本和密码小部件的HTML5属性。

3.1.1 (2014-03-02)

  • 特性:为单选框和多选框小部件添加了一致的id。

3.1.0 (2013-12-02)

  • 特性:为有序选择小部件添加了一致id。

  • 特性:为textlines小部件添加了隐藏模板。

  • 特性:添加了一个API,可以分别渲染每个单选按钮。

3.0.5 (2013-10-09)

  • 错误:删除了当字典字段的关键字段使用序列小部件(最值得注意的是选择)时的错误。序列小部件始终返回列表作为小部件值,这些列表不可哈希。我们现在在字典支持中将那些列表转换为元组。

3.0.4 (2013-10-06)

  • 特性:将翻译目录的注册移动到单独的ZCML文件。

  • 错误:修复了德语翻译中的拼写错误。

3.0.3 (2013-09-06)

  • 特性:2.9版本引入了对词汇表中缺少术语的解决方案。也适配了此解决方案。

3.0.2 (2013-08-14)

  • 错误:修复了在checkbox.CheckboxWidget.update()radio.RadioWidget.update()(例如:当term.value是Plone Archetype ATFile)中发生奇怪情况时的Unicode解码错误。

3.0.1 (2013-06-25)

  • 错误:Alpha版本泄露为3.0.0,删除了ZODB-4.0.0dev.tar.gz以减少损害。

  • 错误:修复了widget.pydef wrapCSSClass的bug。

3.0.0 (2013-06-24)

  • 特性:在MultiWidget中添加了对IDict字段的支持。

  • 错误:仅在输入模式时将“required”CSS类添加到小部件。

  • 错误:捕获了一个bug,如果选择值设置为隐藏输入或通过REST URL作为单个值,则在尝试从忽略列表中删除时不会出错。这可能不是100%正确的修复,但可以捕获核心转储,并且无论如何是合理的。

3.0.0a3 (2013-04-08)

  • 特性:更新了pt_BR翻译。

  • 错误:修复了文件输入值被解释为UTF-8的bug。

3.0.0a2 (2013-02-26)

  • 错误:3.0.0a1 版本的发布中缺少一些文件(例如 locales),这是由于 MANIFEST.in 不完整所致。

3.0.0a1 (2013-02-24)

  • 特性:删除了一些默认安装的部分,因为一些包尚未移植。

  • 特性:添加了对 Python 3.3 的支持。

  • 特性:用等价的 zope.interface.implementer 装饰器替换了已废弃的 zope.interface.implements 使用。

  • 特性:停止支持 Python 2.4 和 2.5。

  • 错误:确保调用返回默认值的方法时,使用的字段已绑定上下文。

2.9.1 (2012-11-27)

  • 特性:updateWidgets 方法接收了一个名为 prefix 的参数,允许设置字段小部件适配器的前缀。

    这允许在更新单独的小部件之前更新公共小部件前缀,这在既不需要表单也不需要小部件前缀的情况下很有用。

  • 错误:将消息“无值”和“选择一个值”的首字母大写。此更改已应用于现有的翻译(适用时)。

  • 错误:TextLinesConverter:不要忽略输入字符串末尾的新行,因此不要忽略空白项。

  • 错误:TextLinesConvertertoFieldValue(),将转换异常转换为 FormatterValidationError,用于获取字符串而不是整数的案例。

2.9.0 (2012-09-17)

  • 特性:词汇表中的缺失术语:这至今为止一直是个麻烦。现在,在保存后的 EditForm 中,可以在对象上保持相同的(缺失的)值不变,就像编辑之前一样。这随之带来了一些变化

    • 重大:未更改的值/字段不再进行验证(除非它们为空或为文件上传)

    • 为缺失的值创建了一个临时的 SimpleTerm,默认标题为“缺失:${value}”。参见 MissingTermsMixin。

  • 特性:分割 configure.zcml

  • 错误:SequenceWidget 显示模式:静默忽略缺失的标记,因为输入模式和隐藏模式也是如此。

2.8.2 (2012-08-17)

  • 特性:添加了 IForm.ignoreRequiredOnValidationIWidgets.ignoreRequiredOnValidationIWidget.ignoreRequiredOnValidation。这些使 extractextractData 在必填字段未填写的情况下返回而不出错。这也意味着通常的“缺失值”错误不会显示。但 required-info(通常为 *)是的。这很有用,可以存储部分状态。

2.8.1 (2012-08-06)

  • 修复了损坏的发布版本,我的 Python 2.7 Windows 设置没有发布新的 widget.zcml、widget_layout.pt 和 widget_layout_hidden.pt 文件。在增强 MANIFEST.in 模式之后,一切似乎都正常。这可能是因为我使用 *build exclude 模式补丁修补了我的 Python 版本。而且,确实添加了新文件到 svn 仓库!再次深入研究后,似乎只有之前添加的 *.txt、*.pt 文件被添加到发布中。新鲜签出 sdist 发布仅包含 *.py 和 *.mo 文件。无论如何,增强的 MANIFEST.in 文件解决了问题。

2.8.0 (2012-08-06)

  • 特性:实现了类似于z3c.pagelet的小部件布局概念。新的布局概念允许除了小部件模板外,还可以注册布局模板。只有当调用小部件时,才会使用这种布局模板。这种增强是可选的,与所有之前的z3c.form版本兼容,并且不会影响现有的代码和自定义实现,除非您实现了小部件的__call__方法,而之前版本中没有实现。新的__call__方法将查找并返回一个支持额外HTML代码的布局模板,这些HTML代码用作小部件渲染方法返回的HTML代码的包装器。这种概念允许定义所有小部件提供的额外HTML结构,并在每个上下文、视图、请求等区分标准周围渲染特定CSS类。这种HTML结构通常在表单宏中支持,但无法在每个小部件、视图或上下文中进行自定义。

    总结:新的布局概念允许我们为每个小部件元素(标签、小部件、错误)定义包装CSS元素,并跳过z3c.formui提供的通用表单宏。

    注意:如果您在tal中定义小部件而没有使用前缀nocall:,例如tal:define=”widget view/widgets/foo”,则可能会遇到问题。如果您的渲染引擎默认调用__call__方法,请添加类似于tal:define=”widget nocall:view/widgets/foo”的nocall。请注意,以下内容也会调用__call__方法:tal:define="widget myWidget"

  • 修复了内容类型提取测试,该测试返回不同的值。这可能取决于guess_content_type的新版本。只需允许image/x-png和image/pjpeg作为有效值。

2.7.0 (2012-07-11)

  • 移除zope34额外内容,如果您需要支持ZTK之前的版本,请使用z3c.form的较旧版本。

  • 至少需要zope.app.container 3.7以添加支持。

  • 避免对ZODB3的依赖。

  • 添加了IField.showDefault和IWidget.showDefault,用于控制小部件是否应查找字段默认值以显示。这在EditForms中非常有用,其中您不希望显示默认值而不是实际的(缺失的)值。默认情况下,它是True,以提供向后兼容性。

2.6.1 (2012-01-30)

  • 修复了可能导致非ASCII词汇/源术语值引起复选框和单选按钮小部件崩溃的潜在问题。

  • 修复了与datetime.timedelta转换器的问题,当缺少日期部分时,它无法将字段值转换回。

2.6.0 (2012-01-30)

  • 从单选按钮输入中移除“:list”,因为根据定义,单选按钮只能有一个值。请参阅LP580840。

  • 将单选按钮和复选框小部件的标签从标记转换为值(通过Unicode转换包装),以使其与父SequenceWidget类保持一致。这样,小部件的编辑和显示视图将显示相同的标签。请参阅LP623210。

  • 移除对zope.site.hooks的依赖,该依赖已移动到zope.component 3.8.0(存在于ZTK 1.0及以上版本)。

  • 使zope.container依赖项更具选择性(它仅在测试中使用)

  • 为有序选择小部件的script标签正确转义JS代码。请参阅LP829484。

  • 清理页面模板中的空白。

  • 修复了IGroupForm接口,并在GroupForm类中实际使用它。请参阅LP580839。

  • 添加了西班牙语翻译。

  • 添加了匈牙利语翻译。

2.5.1 (2011-11-26)

  • 与Chameleon 2.x有更好的兼容性。

  • 添加了版本2.5.0中缺少的*.mo文件。

  • 固定测试依赖项z3c.template的最小版本。

2.5.0 (2011-10-29)

  • 修复了覆盖率报告生成器脚本的buildout设置。

  • 注意:z3c.pt和chameleon目前与TAL不完全兼容。遍历重复包装器的方式不同。ZPT使用以下模式:<tal:block condition=”not:repeat/value/end”>,</tal:block>

    Chameleon仅支持Python风格遍历:<tal:block condition=”not:python:repeat[‘value’].end”>,</tal:block>

  • 升级到Chameleon 2.0模板引擎,并使用最新的z3c.pt和z3c.ptcompat软件包,这些软件包已调整以与Chameleon 2.0一起工作。

    查看z3c.ptcompat包的注释

    更新z3c.ptcompat实现,以使用基于组件的模板引擎配置,直接集成到Zope Toolkit框架中。

    z3c.ptcompat包不再提供模板类或ZCML指令;您应直接从ZTK代码库导入。

    此外,请注意,环境选项PREFER_Z3C_PT已被弃用;现在,这通过组件配置管理。

    注意:您需要包含z3c.ptcompat中的configure.zcml文件以启用z3c.pt模板引擎。configure.zcml将插件模板引擎。另外,删除任何自定义构建的钩子,这些钩子在测试或其他地方导入z3c.ptcompat。

    如果需要,您可以直接使用zope.browserpage.viewpagetemplatefile中的BoundPageTemplate和ViewPageTempalteFile。如果已加载z3c.ptcompat的configure.zcml,这些模板将隐式使用z3c.pt模板引擎。

2.4.4 (2011-07-11)

  • 移除对已弃用的zope.app.security的不必要依赖。

  • 修复了ButtonActions.update(),使其在按钮条件变为false后再次调用时能够正确移除操作。

2.4.3 (2011-05-20)

  • 将TextLinesFieldWidget声明为IFieldWidget实现者。

  • 澄清MultiWidget.extract(),当没有项目时,现在是[]而不是<NO_VALUE>

  • 修复了一些错别字。

  • 修复了由于Python 2.7中浮点数表示法更改导致的测试失败。

  • 确保在输入模式下为MultiWidget渲染至少min_length小部件。

  • 添加了日语翻译。

  • 添加了捷克语翻译的基础。

  • 添加了葡萄牙语巴西翻译。

2.4.2 (2011-01-22)

  • 调整了内容提供者功能测试,以不依赖于在zope.contentprovider 3.5.0中引入的ContentProviderBase类。这恢复了与Zope 2.10的兼容性。

  • 安全问题,从IFormLayer中移除了IBrowserRequest。这防止了将IBrowserRequest混合到非IBrowserRequest中,例如IJSONRPCRequest。这应该兼容,因为使用z3c.form的浏览器请求已经提供了IBrowserRequest,而IFormLayer只是一个用作皮肤层的标记接口。

  • 添加了英文翻译(使用msgen z3c.form.pot > en/LC_MESSAGES/z3c.form.po从翻译模板生成)。

  • 添加了挪威语翻译,感谢Helge Tesdal和Martijn Pieters。

  • 更新了德语翻译。

2.4.1 (2010-07-18)

  • 从版本2.3.4开始,applyChanges要求在字段具有DictionaryField数据管理器时值存在,否则它会因AttributeError而中断。通过使用datamanager.query()而不是datamanager.get()来获取旧值,恢复了之前的操作,即在调用applyChanges之前值不必存在。

  • 添加了对zope.contentprovider的缺失依赖。

  • 不再使用已弃用的zope.testing.doctest,而是使用Python的内置doctest模块。

2.4.0 (2010-07-01)

  • 功能:在表单中混合字段和内容提供者。这允许通过交织内容提供者生成的HTML片段来丰富表单。在小部件外部添加HTML可以避免需要子类化或更改整个小部件渲染的系统性需求。

  • 错误:单选按钮小部件在隐藏模式下没有将值视为列表。

2.3.4 (2010-05-17)

  • 修复:applyChanges不应该尝试比较旧值和新值,如果旧值无法访问。

  • 修复DictionaryField以符合IDataManager规范:get()如果找不到值应引发异常。

2.3.3 (2010-04-20)

  • 在ErrorViewSnippet中使用的'message' IValue适配器的最后一个鉴别器称为'content',但它被查找为错误视图本身。现在它是在表单的上下文中查找的。

  • 不要让util.getSpecification()生成一个接口超过一次。当在值适配器中使用时,这会导致奇怪的效果:如果有两个适配器使用e.g. ISchema['some_field']作为'字段'的“区分符”,其中一个适配器在区分符列表中更具体(例如,ErrorViewMessage的'form'),那么根据这两个适配器设置的顺序,适配器特殊化可能不同,导致意外结果,看起来像适配器注册表选择了错误的适配器。

  • 修复了由pprint对字典排序的不同导致的Python 2.4的简单测试失败。

  • 如果HTTP状态码已设置为3xx范围内的一个(例如重定向或未修改响应),则不要调用render()来发布表单作为视图 - 浏览器将忽略响应体。

  • 处理约束和字段验证器中的Invalid异常。

  • 不要在DISPLAY_MODE的SelectWidget的update()方法中创建不必要的self.items。现在items是一个属性。

  • 为单选按钮和复选框添加隐藏的小部件模板。

2.3.2 (2010-01-21)

  • 由于getContent方法可以返回任何它想要的内容,只要数据管理器可以将字段映射到它,因此撤销了上一个版本中做出的更改。因此,应该使用context来实例化组。在不希望使用context的情况下,可以在父组或表单的update方法中实例化组。另请参阅https://mail.zope.org/pipermail/zope-dev/2010-January/039334.html

    (因此版本2.3.2与版本2.3.0相同。)

2.3.1 (2010-01-18)

  • GroupFormGroup现在在实例化组类时使用getContent方法,而不是直接访问self.context

2.3.0 (2009-12-28)

重构

  • 移除了已弃用的zpkg缩写和ZCML缩写。

  • 将测试适配到zope.schema 3.6.0。

  • 避免使用zope.testing.doctestunit,因为它已被弃用。

更新

  • 更新了德语翻译。

2.2.0 (2009-10-27)

  • 功能:添加z3c.form.error.ComputedErrorViewMessage工厂,以便轻松创建动态计算的错误消息。

  • 错误:在输入模式下,对于MultiWidget和ObjectWidget生成了两次<div class="error">

  • 错误:在生成表单id时,将点替换为连字符。

  • 重构了OutputChecker到其自己的模块,以便在不依赖lxml的情况下使用z3c.form.testing

  • 重构:将z3c.form.datamanager.AttributeField中的重复代码折叠成一个单一属性。

2.1.0 (2009-07-22)

  • 功能:现在DictionaryFieldManager允许所有映射(zope.interface.common.mapping.IMapping),甚至是persistent.mapping.PersistentMappingpersistent.dict.PersistentDict。然而,默认情况下,字段管理器仅注册dict,因为在其他情况下可能会在不需要的场景中被选中。

  • 错误:更新了代码,以便在最新包版本上通过所有测试。

  • 错误:完成了对Zope 3.4的后向兼容性。还创建了一个构建配置文件来测试Zope 3.4的兼容性。注意:您现在必须使用‘latest’或‘zope34’额外来获取所有所需的包。或者,您可以在产品的要求包中明确指定那些额外的包列表。

2.0.0 (2009-06-14)

特性

  • KGS 3.4兼容性。这是一件非常困难的事情,因为z3c.form测试使用lxml >= 2.1.1来检查测试输出,而KGS 3.4有lxml` 1.3.6。因此,我们同意,如果所有包版本通过KGS 3.4的测试,并且将lxml覆盖为2.1.1,则z3c.form包与纯KGS 3.4兼容。

  • 已移除硬编码的 z3c.ptcompat 以及对应的 z3c.pt 依赖。如果Python路径上存在 z3c.ptcompat,它将被使用。

  • 增加了嵌套分组支持。分组将渲染为字段集。嵌套字段集在表单设计时非常有用。

    警告:如果您的分组中已有 applyChanges()(或任何添加的)方法,此次更改添加的新方法可能不会匹配签名。

  • 添加了 labelRequiredrequiredInfo 表单属性。这在表单模板中条件渲染所需信息标题非常有用。默认情况下,requiredInfo 标签依赖于给定的 labelRequired 消息 ID,并且只有当至少有一个小部件字段是必需的时,才会返回标签。

  • 添加了对执行后刷新动作的支持。当按钮动作条件因动作执行而改变时,这非常有用。您只需在动作处理程序中将表单的 refreshActions 标志设置为 True 即可。

  • 添加了对使用来源的支持。以前可以使用词汇的地方,现在也可以使用来源。这适用于基本来源和上下文来源。

    重要:z3c.form.term 中的 ChoiceTermsCollectionTerms 现在是简单的函数,它们查询字段 sourcevalue_type 的实际 ITerms 适配器。因此,如果您的代码继承了旧的 ChoiceTermsCollectionTerms 类,您将需要审查并修改它。请参阅 z3c.form.term 模块及其文档。

  • 新的 z3c.form.interfaces.NOT_CHANGED 特殊值可用于表示当前值应保持不变。目前,它在 z3c.form.form.applyChanges() 函数中被处理。

  • 当文件上传小部件未指定文件时,不会用缺失的值覆盖值,而是保留旧数据。这是通过从 FileUploadDataConvereter 返回新的 NOT_CHANGED 特殊值来完成的。

  • 已添加对 schema.IObject 字段小部件的初步支持。然而,有一个很大的警告,请阅读包内的 object-caveat.txt 文档。

    提供了一种新的 ZCML 指令 objectWidgetTemplate,用于为特定对象字段模式注册小部件模板。

  • 实现了 MultiWidget 小部件。这个小部件允许您在 IListITuple 序列中使用简单字段,如 ITextLineIIntIPassword 等。

  • 实现了 TextLinesWidget 小部件。这个小部件提供了一个文本区域元素,并按序列项分割行。这对于高级用户界面非常有用。这个小部件可用于指定简单值类型字段(例如 ITextLineIInt)的序列字段(例如 IList)。

  • 向表单字段添加了一个新的标志 ignoreContext,以便可以单独选择哪些字段应该忽略上下文,哪些字段不应该忽略上下文。

  • 允许序列小部件的原始请求值非序列值,这使得与 JavaScript 库的集成更容易。

  • 在文件上传小部件的测试版本中添加了对在隐藏文本区域内指定 'base64' 编码字符串的支持,以便也可以上传二进制数据。

  • 允许使用 IValue 适配器覆盖 required 小部件属性,就像对 labelname 属性所做的那样。

  • SequenceWidgetprompt 属性添加到可适应属性列表中。

  • 添加了基准测试套件,展示了使用 z3c.pt 时的性能提升。

  • 添加了对 z3c.pt 的支持。通过“PREFER_Z3C_PT”环境变量或通过 z3c.ptcompat.config.[enable/diable]() 切换使用。

  • 当字段不提供 IFormUnicode 时使用的 TypeError 消息现在也包含字段的类型。

  • 添加了对 z3c.form 消息的国际化支持。添加了俄语、法语、德语和中文翻译。

  • 现在可以使用新的 docs 脚本创建包的 Sphinx 文档。

  • 现在通过查询 (field, field.vocabulary, request) 来查找实现 IChoice 的字段的适配器,以便可以根据用于字段的源类型进行区分。

  • formErrorsMessage 属性从 AddFormEditForm 移至 z3c.form.form.Form 基类,因为它是一个非常常见的验证状态消息,并且可以轻松重用(尤其是当提供了翻译时)。

重构

  • 删除了对 Zope 3.3 的兼容性支持。

  • 模板现在声明 XML 命名空间。

  • 现在使用 lxml 提供的 XML 感知输出检查器的修改版本来比较 HTML 输出。

  • 删除未使用的导入,调整 setup.py 中的 buildout 依赖项。

  • 使用 z3c.ptcompat 模板引擎兼容层。

修复的bug

  • 重要 - 由于对参数名称拼写错误的修复,z3c.form.util.extractFileName 函数的签名已更改。现在称为 allowEmptyPostfix(注意 Empty 而不是 EmtpyPostfix 而不是 PostFix)。

  • 重要 - 将 z3c.form.interfaces.NOVALUE 特殊值重命名为 z3c.form.interfaces.NO_VALUE 以遵循常见的命名风格。 backward-compatibility NOVALUE 名称仍然有效,但对象的 repr 输出也已更改,因此可能会破坏您的 doctests。

  • 在处理 Bytes 字段时,我们应该在进入其小部件值时进行空值转换。

  • FieldWidgets 的更新方法在每个更新调用中追加键和值。现在,util.Manager 使用 UniqueOrderedKeys 实现,这将确保我们无法添加重复的管理器键。该实现还确保我们无法通过装饰器使用新列表覆盖 UniqueOrderedKeys 实例。如果这个 UniqueOrderedKeys 实现不适合所有用例,我们可能需要使用定制的 UserList 实现。现在我们可以多次调用 widgets.update() 而不会产生任何副作用。

  • ButtonActions 的更新在每个更新调用中追加键和值。现在我们可以多次调用 actions.update() 而不会产生任何副作用。

  • 当传递非必填字段的值时(对于列表字段来说,这个值是 None),CollectionSequenceDataConverter 现在不再抛出 TypeError: 'NoneType' object is not iterable 异常。

  • SequenceDataConverterCollectionSequenceDataConverter 转换类现在在转换为小部件值时忽略不存在于术语中的值。

  • orderedselect_input.pt 中使用 nocall: 修饰符以避免调用可调用列表条目。

  • SingleCheckBoxFieldWidget 不会重复标签(一次在 <div class="label"> 中,一次在复选框旁边的 <label> 中)。

  • 避免在 Python 2.6 中引起警告。

  • validator.SimpleFieldValidator 现在能够处理 interfaces.NOT_CHANGED。当用户没有选择文件上传时,文件上传会设置此值。

1.9.0 (2008-08-26)

  • 功能:使用小部件管理器中的 query() 方法尝试提取值。这确保了查找永远不会失败,这对于基于字典的数据管理器特别有帮助,因为字典可能没有所有键。

  • 功能:将数据管理器的 get() 方法更改为在无法找到字段的数据时抛出错误。向数据管理器添加了 query() 方法,如果没有找到值,则返回默认值。

  • 功能:现在可以从字段小部件管理器中删除小部件。

  • 功能:组现在产生与常规编辑表单相同的详细 ObjectModifiedEvent 描述。(感谢 Carsten Senger 提供补丁。)

  • 功能:小部件管理器的 extract() 方法现在支持一个可选的 setErrors(默认值:True)标志,允许在数据提取期间不设置小部件和小部件管理器的错误。用例:您想检查输入数据并手动处理错误。

  • 错误:z3c.form.form.extends() 方法的 ignoreButtons 标志没有被尊重。(感谢 Carsten Senger 提供补丁。)

  • 错误:组类现在实现 IGroup。这也帮助检测组实例化。(感谢 Carsten Senger 提供补丁。)

  • 错误:由于假设组将修改互斥接口,因此组中的更改列表被错误地更新了。现在使用的是纯增量合并,而不是覆盖字典的 update() 方法。(感谢 Carsten Senger 提供补丁。)

  • 错误:在测试设置中添加了 IDecimal 字段的控件。

  • 功能:z3c.form.util 模块有一个新函数,createCSSId() 方法,可以从任何 Unicode 字符串生成可读的 ID,用于与 CSS 选择器一起使用。

  • 错误:组表单中的 applyChanges() 方法没有返回更改字典,而只是一个布尔值。现在已修复,并将组表单更改与主表单更改合并。

  • 错误:即使输入控件设置了样式属性,显示控件也没有设置样式属性。

1.8.2 (2008-04-24)

  • 错误:显示控件向显示值中添加了空格(由于代码缩进),在某些情况下,例如显示 Python 源代码时,这会导致外观不正确。

  • 错误:防止在 ITerms 上调用 __len__,并使用 is None 检查是否存在。因为 __len__ 不是 ITerms API 的一部分,并且 not widget.terms 将导致在现有术语上调用 __len__

1.8.1 (2008-04-08)

  • 错误:修复了一个阻止组具有与父表不同内容的错误。之前,组内容没有被正确更新。添加了关于如何使用组生成基于对象的子表的新文档。感谢Paul Carduner提供修复和文档。

1.8.0 (2008-01-23)

  • 特性:实现了IDisplayForm接口。

  • 特性:为表单接口添加了集成测试。在表单类中添加了默认类属性widgets,默认值为None。这有助于通过集成测试。现在,widgets属性也可以用作更新表单的指示器。

  • 特性:在AddForm中实现了额外的createAndAdd钩子。这允许您在单个方法中实现创建和添加。它还支持在未返回新对象时优雅地终止创建和添加过程。这意味着它也可以用作创建和添加过程中发生错误时的自定义错误消息的钩子。

  • 特性:为ISelectWidget添加了隐藏的控件模板。

  • 特性:有序选择控件中的箭头被命名实体替换。

  • 特性:将CollectionSequenceDataConverter添加到setupFormDefaults

  • 特性:CheckBox控件的模板现在注册在checkbox.zcml中。

  • 特性:如果无法使用字段的IFromUnicode接口将值从其Unicode表示形式转换为字段值,现在将显示字段名称(如果可用)的类型错误。

  • 错误:createId无法处理任意Unicode输入。感谢Andreas Reuleaux报告此错误及其补丁。(在此过程中添加了该函数的描述性doctests。)

  • 错误:当计算不变量所需的不是所有字段都在提交的表单中时,接口不变量不起作用。

  • 错误:有序选择没有提交选定的值。

  • 错误:有序选择列表显示标记而不是值。

  • 错误:SequenceWidget显示标记而不是值。

1.7.0 (2007-10-09)

  • 特性:实现了ImageButtonImageActionImageWidgetImageFieldWidget以支持图像提交按钮。

  • 特性:现在,AttributeField数据管理器支持在内容不实现此接口时将内容适配到字段接口。

  • 特性:实现了单个复选框控件,可用于布尔字段。它们默认不可用,但可以通过widgetFactory属性设置。

  • 错误:在文档中修复了更多多语言问题。感谢Martijn Faassen为此所做的。

  • 错误:在处理请求过程中发生错误时,控件最终被安全代理,并且系统开始抛出TraversalError尝试访问控件的label属性。声明这些控件需要zope.Public权限才能访问这些属性。

  • 错误:在渲染控件时,未遵守style属性。感谢Andreas Reuleaux报告。

  • 错误:在子表发生错误时,状态消息设置不正确。修复了代码和错误的测试。感谢Markus Kemmerling报告。

  • 错误:几个接口在方法签名中有self参数。感谢Markus Kemmerling报告。

1.6.0 (2007-08-24)

  • 特性:将事件处理器注册到ActionErrorOccurred事件,以便将操作错误合并到表单的错误收集器中,例如form.widgets.errorsform.widgets['name'].error(如果适用)。它还设置表单的状态。(感谢Herman Himmelbauer,他提出了这个功能,并提供了用例。)

  • 特性:动作现在可以抛出 ActionExecutionError 异常,这些异常将由框架处理。这些错误封装了原始错误。如果一个错误特定于某个小部件,则将小部件名称传递给特殊的 WidgetActionExecutionError 错误。(感谢 Herman Himmelbauer 请求此特性,并提供了用例。)

  • 特性:在执行动作处理程序之后,系统会发送一个动作执行事件。如果执行成功,则发送 ActionSuccessfull 事件。如果抛出了动作执行错误,则引发 ActionErrorOccurred 事件。(感谢 Herman Himmelbauer 请求此特性,并提供了用例。)

  • 特性:现在 applyChanges() 函数返回一个包含更改(按接口分组)的字典,而不是布尔值。这允许我们生成更详细的对象修改事件。如果没有应用任何更改,则返回空字典。新的行为与旧的行为兼容,因此不需要修改您的代码。(感谢 Darryl Cousins 的请求和实现。)

  • 特性:新的 InvalidErrorViewSnippet 类为 zope.interface.Invalid 异常提供了错误视图片段,这些异常通常用于不变性。

  • 特性:当需要小部件时,基于 HTML 的小部件现在声明一个“required”类。

  • 特性:验证数据包装器现在了解验证的上下文,这为不变性提供了访问环境的钩子。

  • 特性:BoolTerms 的项令牌现在是常量,即使标签已更改,它们也保持不变。令牌的选择是“true”和“false”。默认情况下,它使用的是“yes”和“no”,所以您可能需要更改一些单元测试。功能测试仍然可以正常进行,因为您是通过项标题进行选择的。

  • 特性:BoolTerms 现在将 true 和 false 值的标签公开给类。这使得更改布尔项的标签变得非常简单。

  • 特性:为了方便,将小部件管理器的几个属性公开给表单。属性包括:mode、ignoreContext、ignoreRequest、ignoreReadonly。

  • 特性:为数字格式提供更友好的错误消息。

  • 重构:特定于小部件的类名现在是驼峰式。后来发展起来的一种约定是始终使用基于破折号的命名来命名 HTML/CSS 相关变量。因此,例如,类名“textWidget”现在是“text-widget”。此更改可能需要修改您的 CSS 声明!

  • 文档:已对 field.txt 的文本进行语言审查。

  • 文档:在审查 form.txt 时,发现了一些不清晰和不完整语句,并已修复。

  • 错误(IE):在 Internet Explorer 中,当单选输入字段的标签仅围绕描述选择的文本时,则只有文本被围绕在虚线框中。IE 用户报告说这很令人困惑,因此我们现在将标签放在文本和输入元素周围,这样两者都被虚线边框所围绕。在 Firefox 和 KHTML(Safari)中,始终只围绕单选按钮。

  • 错误:在提取和验证小部件管理器中的数据时,不变性错误未转换为错误视图片段。

  • 错误:当错误视图片段不是特定于小部件的——换句话说,widget 属性是 None——渲染模板会失败。

1.5.0 (2007-07-18)

  • 特性:为显示模式中的小部件值添加了 span。这允许更容易地识别显示模式中的小部件值。

  • 特性:添加了小部件事件的概念,并实现了一个特定的“小部件更新后”事件,该事件在更新小部件后立即调用。

  • 特性:重构了自定义按钮动作的方法,要求适配器提供新的接口 IButtonAction。同时,现在默认提供适配器,仍然允许使用常规方法进行自定义。

  • 特性:添加了按钮小部件。虽然在没有JavaScript的情况下它不太有用,但它仍然属于此包,以完成功能。

  • 特性:所有既是HTML元素小部件的 IFieldWidget 实例现在声明了一个附加的CSS类,形式为“<fieldtype.lower()>-field”。

  • 特性:为HTML元素小部件添加了 addClass() 方法,以便添加新的CSS类更加简单。

  • 特性:将小部件的“css”属性重命名为“klass”,因为HTML元素的类是一种分类,而不是CSS标记。

  • 特性:审查了所有小部件属性。将所有可用的HTML属性添加到小部件中。

  • 文档:删除了提及小部件的“hint”属性,因为该属性不存在。

  • 优化:在多个组件中多次查找序列小部件的术语。现在小部件是术语的规范来源,以及其他组件,例如转换器使用它们。这避免了多次查找术语,对于某些应用程序来说这可能是一个昂贵的进程。

  • 错误/特性:正确创建单选按钮选择的标签。

  • 错误:如果在小部件内创建,按钮不尊重模式给出的名称,因为我们太急于给按钮命名。现在名称分配延迟到按钮添加到按钮管理器时。

  • 错误:按钮动作从未在动作管理器中更新。

  • 错误:添加了textarea小部件的测试。

1.4.0 (2007-06-29)

  • 特性:选择小部件新增了 prompt 标志,允许您明确请求在选择的第一个选项中显示选择提示(即使是必填字段)。当设置时,会显示提示消息。这样的提示作为选项在Web-UI中很常见。

  • 特性:允许使用属性值适配器动态更改选择小部件的“无值消息”。

  • 特性:对日期、时间、日期/时间、整数、浮点和十进制数据进行了国际化数据转换。现在使用区域数据格式化和解析这些数据类型,以提供到基于文本的小部件的桥梁。虽然这些功能需要最新的 zope.i18n 包,但提供了向后兼容性。

  • 特性:所有表单现在都有一个可选的标签,可以被UI使用。

  • 特性:在表单中实现了分组。分组允许您将一组字段/小部件组合成一个逻辑单元。它们的设计考虑了易用性。

  • 特性:按钮动作(即按钮字段的部件)现在可以指定为按钮字段的“actionFactory”或适配器。

  • 错误:在接口中记录了所有公共选择小部件属性。

1.3.0 (2007-06-22)

  • 特性:在一个编辑表单中,应用数据和生成所有必要消息都是在一个“应用”按钮处理程序中完成的。现在实际存储的任务被分解到一个新方法“applyChanges(data)”中,该方法返回数据是否已更改。这对于不处理对象的表单很有用。

  • 特性:添加了对 hidden 字段的支援。现在可以使用 hidden 模式为应渲染为 <input type="hidden" /> 的小部件。

    注意:请确保使用新的formui模板,这将避免渲染

    隐藏小部件的标签或调整您的自定义表单宏。

  • 特性:向数据/时间转换器添加了对 missing_value 的支持。

  • 特性:在 ChoiceTermsCollectionTerms 中添加了命名词汇查找。

  • 特性:在 FileWidget 中实现了对 FileUpload 的支持。

    • 添加了处理 FileUpload 小部件的辅助器。

      • extractContentType(form, id)

        如果使用了 IBytes/IFileWidget,则提取内容类型。

      • extractFileName(form, id, cleanup=True, allowEmtpyPostFix=False)

        如果使用了IBytesIFileWidget,则提取文件名。

        从Windows/IE上传需要一些清理,因为文件名中还包括路径。选项cleanup=True将为您执行此操作。选项allowEmtpyPostFix允许您传递没有扩展名的文件名。默认情况下,此选项设置为False,如果文件名不包含扩展名,将引发一个ValueError

    • 创建了一个针对IBytesIFileWidget注册的文件上传数据转换器,确保转换器仅用于文件控件。现在文件控件是字节字段的默认控件。如果您需要为IBytes使用文本区域控件,您必须使用以下方式在表单中注册自定义控件:

      fields['foobar'].widgetFactory = TextWidget
  • 功能:最初,当在未经授权或禁止属性异常中访问属性失败时,它们被忽略,就像属性没有任何值一样。现在这些错误将被传播,系统将失败,为开发人员提供更多反馈。数据管理器还增加了一个新的query()方法,该方法始终返回默认值,而get()方法传播任何异常。

  • 功能:当写入字段由于权限不足而被禁止时,结果控件模式将被设置为“显示”。可以通过在字段上明确指定模式来覆盖此行为。

  • 功能:添加了针对IAdding的添加表单实现。虽然这不是添加组件的推荐方法,但许多人仍然使用此API来扩展ZMI。

  • 功能:IFields类的select()omit()方法现在支持两个关键字参数“prefix”和“interface”,允许选择和忽略带前缀的字段,同时指定短名称。感谢Nikolay Kim提出这个想法。

  • 功能:包含点的HTML元素id不是很好,因为这样“element#id”CSS选择器就不起作用了,至少在Firefox中,id的属性选择器(“element[attr=value]”)也不起作用。已将代码库转换为使用短横线作为id。

  • 错误/功能:IWidgets组件现在不是表单上下文的适配器,而是表单内容的适配器。这保证了词汇工厂接收到的上下文实际上是很有用的。

  • 错误:字段内的只读标志从未得到尊重。现在当字段是只读时,它将以“显示”模式显示。可以通过控件管理器的“ignoreReadonly”标志来覆盖此行为,这对于添加表单是必要的。

  • 错误:在创建字段布局期间做出的模式选择没有得到尊重,控件管理器始终覆盖了选项,提供其值。现在字段指定的模式比控件管理器的模式更重要。

  • 错误:有时序列控件会将无值标记作为其中一个元素。这导致displayValue()失败,因为它试图为其找到一个术语。目前我们简单地忽略无值标记。

  • 错误:修复了当传入的值为空字符串时的转换器。空字符串实际上意味着我们没有值,因此它是缺失的,返回缺失值。

  • 错误:修复了一个略微不正确的实现。在现实世界的表单中,它没有造成任何伤害,但使得单元测试变得困难,因为API期望没有正确满足。

  • 错误:当在单选按钮和复选框控件中未选择必需的选择时,转换器的行为不正确。这也揭示了转换器代码中的一些问题,现在已经得到修复。

  • 错误:当字段只有词汇名称时,由于字段未绑定,选择术语适应会失败。现在这已经被纠正。

  • 文档:在form.txt中集成了Roy Mathew的英语语言和内容审查改进。

1.2.0 (2007-05-30)

  • 特性:增加了使用 IValue 适配器更改按钮动作标题的功能。

1.1.0 (2007-05-30)

  • 特性:增加了与 Zope 3.3 的兼容性,从而也支持 Zope 2.10。

1.0.0 (2007-05-24)

  • 初始发布

发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

z3c.form-5.1.tar.gz (368.0 kB 查看散列)

上传时间

构建分布

z3c.form-5.1-py3-none-any.whl (441.9 kB 查看散列)

上传时间 Python 3

支持者