文件系统代码和ttw等内容类型的框架(zope/cmf/plone)
plone.dexterit的Python项目详细描述
灵巧性
< Buff行情> "相同,相同,但不同"dexterity是一个通过web和文件系统代码构建内容类型的系统。 它的目标是plone,尽管这个包应该与普通的zope+cmf系统一起工作。
关键用例
灵巧想让一些事情变得简单。这些是:
- 完全通过网络创建"真实"的内容类型,而无需知道编程。
- 作为业务用户,使用可视化或通过web工具创建一个模式,并使用适配器、事件处理程序和python程序员在文件系统上编写的其他python代码对其进行扩充。
- 在文件系统代码中快速、轻松地创建内容类型,而不丧失在需要时自定义类型的任何方面及其操作的能力。
- 支持以声明方式对自定义类型启用的常规"行为"。 行为可以是标题到ID的命名、对锁定或版本控制的支持,或者是带有相关UI元素的标准元数据集。
- 轻松打包和分发通过Web、文件系统或两者结合定义的内容类型。
哲学
灵巧的设计有一个特定的理念。 总结如下:
< DL>怎么回事?
把华夫饼放在一边,让我们更详细地了解一下 在灵巧系统中组成"内容类型"。
< DL>模型也用xml描述。 尽管在运行时,它是一个对象的实例,该对象提供来自 plone.supermodel 的imodel接口。 模型中的schemata是与 zope.schema 字段的接口。
如果一个类型是通过web创建的,那么这个模型可以作为数据存在于zodb中。 或者,也可以从文件中加载。 XML表示旨在为人类可读和自文档化。 它还设计了类似于agx的工具,这些工具可以从可视表示中生成模型。
所有内容类型都至少有一个(未命名)架构。 模式只是一个带有zope.schema字段的接口。 该模式可以在python代码中指定(在这种情况下,它只是通过名称引用),也可以从xml模型加载它。
未命名的架构也称为icontenttype架构。 在这种情况下,schema接口将提供zope icontenttype接口。 这意味着,如果对灵巧内容对象调用 queryContentType() ,则应返回其未命名的架构,该架构应由查询的对象提供。 因此,对象将直接支持模式承诺的属性。 这使得灵巧的内容对象成为"pythonic",并且易于使用。
dexterity的内容工厂将使用类型的内容模式中的字段初始化其中一个类的对象。 工厂将确保对象提供相关接口,包括架构接口本身。
向灵巧内容对象添加行为和逻辑的首选方法是通过适配器。 在这种情况下,您可能需要schema接口的文件系统版本(如果您 希望如此,但它将有一个带有真实模块路径的接口),您可以对其注册组件。
灵活内容是使用名为utility的标准zope ifactory构建的。 按照惯例,工厂实用程序与内容类型的门户类型同名。
当创建灵活的fti(工厂类型信息,见下文)时,除非已存在具有该名称的工厂,否则会将相应的工厂注册为本地实用程序。
默认工厂能够初始化泛型 项 或 容器 对象以显示内容类型架构,并在类型的模型中指定安全性和其他方面。 如果您愿意,您可以使用它,或者提供您自己的工厂。
默认情况下,灵巧性将创建: -添加视图(注册为本地实用程序,因为在确定要呈现的字段时,它需要考虑内容类型的门户类型)和 -编辑视图(注册为通用全局视图,在运行时检查上下文的门户类型)类型。 -存在一个默认主视图,它只输出上下文中设置的字段。
要注册新视图,通常需要一个文件系统架构接口。 然后,您可以像平常一样注册此界面的视图。
如果需要覆盖默认的添加视图,请创建一个与内容类型的门户类型相对应的名称用于iadding的视图。 这将防止在创建fti时灵活地使用相同的名称注册本地视图。
fti保存关于内容类型的各种信息。 灵巧框架执行的许多操作都是从查找类型的fti开始的,以查找有关类型的一些信息。
fti是存储在zmi中portal_类型中的对象。 大多数设置可以通过网络更改。 有关详细信息,请参阅idexterityfti接口。
创建灵活的fti时,事件处理程序将创建一些本地组件,包括factory实用程序和为新类型添加视图。fti本身也注册为一个命名实用程序,以便使用如下语法查找:
getUtility(IDexterityFTI, name=portal_type)
fti也可以使用genericsetup完全导入和导出。 因此,创建和分发内容类型的最简单方法是创建一个新的fti,设置一些属性(包括有效的xml模型, 如果没有要使用的文件或架构接口,则可以输入ttw,并将其导出为genericsetup扩展配置文件。
行为是一种写操作生成可重用功能位的方式,可以在每种类型的基础上打开或关闭。 示例可能包括通用元数据或通用功能,如锁定、标记或分级。
行为是使用plone.behavior包实现的。 有关如何编写自己的行为的详细信息,请参阅其文档。
在灵巧性方面,行为可以将字段"注入"到标准的添加和编辑表单中,并且可以为新创建的对象提供标记接口。 有关提供表单字段的行为示例,请参阅example.dexterity包。
在使用中,行为本质上只是一个适配器,只有在被调整对象的fti中启用了该行为时,该适配器才会显示为已注册。 因此,如果有my.package.imybehavio描述的行为,则通常通过执行以下操作与此行为交互:
my_behavior = IMyBehavior(context, None) if my_behavior is not None: ...
给定类型的启用行为将作为虚线接口名称的列表保存在fti中。
灵巧生态系统
灵巧系统包括许多软件包,其中大部分是 独立可重复使用。此外,灵巧使用了许多组件 Zope和CMF。
最重要的软件包是:
< DL>支持"条件"适配器。产品作者可以通过一个简单的适配器编写和注册通用行为。 适配器似乎已注册为具有可用命名行为的类型。
灵巧性将其连接起来,使得启用的行为列表作为属性存储在fti中。 这使得通过web添加/删除行为或在安装时使用genericsetup变得容易。
支持从/到xml的接口解析和序列化。 XML格式直接基于描述zope.schema类型字段的接口。 因此,它很容易扩展到新的字段类型。 这还有一个额外的好处,就是zope.schema包中的接口文档也适用于xml格式。
supermodel可以通过适配器和xml名称空间进行扩展。 plone.dexterity使用它允许安全性和ui提示作为元数据嵌入到xml模型中。
支持动态模块,可以动态创建对象。 dexterity使用它为仅通过web存在的类型生成"真实"接口。 这允许这些类型具有正确的IContentType架构。 它还允许为此接口注册本地适配器(例如,带有通过Web定义的模板的自定义视图)。
请注意,如果类型使用文件系统接口(无论是手动编写还是从XML模型加载),则不使用此模块。
开发人员手册
《敏捷开发者手册》是一个完整的文档,其中包含了一些实际的例子,也是官方plone文档的一部分。