为zope.formlib组件提供类似Grok的配置
项目描述
本软件包提供使用Zope Formlib库编写表单并直接在Python中注册(无需ZCML)的支持。
设置 grokcore.formlib
本软件包的设置类似于grokcore.component软件包,请参考其文档以获取详细信息。您需要的附加ZCML行如下:
<include package="grokcore.formlib" file="meta.zcml" /> <include package="grokcore.formlib" />
将第一行放在根ZCML文件顶部附近。
示例
我们需要一个示例接口
from zope import interface, schema class IMammoth(interface.Interface): name = schema.TextLine(title=u"Name") age = schema.Int(title=u"Age", min=0)
编辑表单
您可以为类似IMammoth的对象提供如下编辑表单:
from grokcore import formlib class Edit(formlib.EditForm): formlib.context(IMammoth)
如果您的内容对象定义在相同的Python文件中,并实现了grokcore.formlib.IContext,则它将成为您表单的默认上下文。
显示表单
显示表单与编辑表单一样简单
class Index(formlib.DisplayForm): formlib.context(IMammoth)
通用表单
您可以构建更通用的表单,为表单提供自己的操作
class ISearch(interface.Interface): search = schema.TextLine(title=u"Text")
然后,您定义您的表单。它应用于mammoth,但使用ISearch接口来生成字段
class Search(formlib.Form): formlib.context(IMammoth) form_fields = formlib.Fields(ISearch) def update(self): # Default search results are None self.search_result = None @formlib.action(u"Search") def search(self, text): self.search_result = 'something found with text'
创建一个自定义模板 search.pt 来渲染您的表单(在目录modulename_templates中)。
添加表单
添加表单的工作方式与通用表单类似,您必须提供Add操作。
自定义
由于Grok表单是Grok视图,所有在Grok视图中可用配置指令和属性在Grok表单上也是可用的。
这意味着您可以通过将其与模板相关联来自定义表单。模板负责显示小部件和操作。访问它们的API与Zope Formlib表单相同。
您不能通过在表单上提供一个render()方法来自定义表单,但如果需要,您仍然可以使用update()方法。
请参阅grokcore.view的文档以获取更多详细信息。
API概述
基本类
- EditForm
扩展Form以创建内容编辑表单。
- DisplayForm
创建简单的显示表单。
- Form
是创建通用表单的基础类。
- AddForm
扩展Form以创建添加表单。您必须提供add操作,该操作将创建新对象。
装饰器
- action
是一个装饰器,用于在表单上创建操作。您的操作只需要接受表单值作为参数。
辅助函数
- AutoFields
从给定上下文创建表单字段。如果上下文是一个接口,则在该接口中定义的Zope字段将被用于构建表单字段。如果上下文是一个常规对象,则将使用该对象的实现的所有接口的Zope字段来构建表单字段。
- Fields
在表单上创建和重新排序字段。
此外,grokcore.formlib软件包公开了grokcore.component、grokcore.security和grokcore.view API。
变更
4.0 (2023-08-28)
支持Python 3.7、3.8、3.9、3.10、3.11。
取消支持Python 2.7、3.4、3.5、3.6。
3.0.1 (2018-01-12)
重新排列测试,以便Travis CI可以拾取所有功能测试。
3.0.0 (2018-01-04)
Python 3 兼容性。
1.11 (2016-06-20)
grok.action 现在将触发对请求中完全缺失的必填字段的 RequiredMissing 验证错误。
1.10.1 (2016-02-15)
更新测试。
1.10 (2015-04-01)
表单现在通知 ObjectEditedEvent 而不是 ObjectModifiedEvent。
1.10a1 (2013-11-22)
添加 zope.formlib 中 CSRF 保护功能的兼容性。
1.9 (2012-05-01)
目前还没有任何变化。
1.8 (2010-11-03)
上下文指令现在有自己的默认计算。
1.7 (2010-11-01)
更新 martian、grokcore.component、grokcore.security 和 grokcore.view 的版本要求。
1.6 (2010-10-18)
使包符合 zope.org 存储库策略。
将功能测试更新为 zope.app.wsgi 浏览器,而不是 zope.app.testing 的一个。
不再依赖于 zope.app.zcmlfiles 进行测试。
1.5 (2009-12-13)
使用 zope.container 而不是 zope.app.container(在测试和 configure.zcml 中)。
修复了缺失的依赖项,并分开了常规和测试依赖项。
1.4 (2009-09-17)
在 grokcore.view 1.12 中反映了更改,其中 View 和 CodeView 再次成为单个 View。这回到了 grokcore.formlib 1.1 的 View 情况。
1.3 (2009-09-16)
删除了对已不再存在于 grokcore.security 1.2 中的 grok.View 权限的引用。
在 Grok 的发布信息中使用 1.0b1 版本的 versions.cfg,而不是本地副本;维护所有 grokcore 包的本地副本太困难了。
1.2 (2009-07-20)
调整测试以适应 View 和 CodeView 的 grokcore.view 分割。
修复表单以直接使用 self.template.render(),而不是使用从 grokcore.view 移除的私有方法。
为功能测试添加 grok.View 权限。
1.1 (2009-01-07)
GrokForm 默认定义一个空的 actions 属性,以便于“无操作”表单的工作。
1.0 (2008-09-25)
2008 年 7 月创建 grokcore.formlib,通过从 Grok 中提取基于 zope.formlib 的组件、grokkers 和指令来实现。
项目详细信息
下载文件
下载适合您平台文件的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。