Plone 控制面板的最佳实践

Posted

技术标签:

【中文标题】Plone 控制面板的最佳实践【英文标题】:Best practices for Plone control panels 【发布时间】:2011-10-25 06:07:50 【问题描述】:

我正在开发一个package,其中包括一个使用 plone.app.registry 创建的控制面板。我关注了Timo's tutorial,但在尝试向其中添加额外记录时,我遇到了臭名昭著的KeyError:没有记录的字段

所以我有几个关于最佳实践的问题:

我的第一个问题是:一个包必须在卸载时删除它的注册表?

我在我的包的 registry.xml 中使用了这个:

<registry>
  <records interface="collective.nitf.controlpanel.INITFSettings" />
</registry>

这在 metadata.xml 上:

<metadata>
  <version>1</version>
  <dependencies>
    <dependency>profile-plone.app.registry:default</dependency>
  </dependencies>
</metadata>

但在卸载配置文件上添加 delete="true" 似乎不起作用。我也尝试按名称列出所有记录,但没有成功,除非我在 ZMI 手动运行该步骤。

那么,我的第二个问题是:如何在卸载时优雅地删除控制面板记录?

为了测试记录是否在注册表中,我执行以下操作:

def setUp(self):
    self.portal = self.layer['portal']
    setRoles(self.portal, TEST_USER_ID, ['Manager'])
    # Set up the NITF settings registry
    self.registry = Registry()
    self.registry.registerInterface(INITFSettings)

def test_record_sections(self):
    # Test that the sections record is in the control panel
    record_sections = self.registry.records[
        'collective.nitf.controlpanel.INITFSettings.sections']
    self.failUnless('sections' in INITFSettings)
    self.assertEquals(record_sections.value, set([]))

第三个问题可能是如何测试记录是否在未安装时被删除。

还有其他推荐吗?

【问题讨论】:

【参考方案1】:

注意:我自己还没有直接在包中使用 plone.app.registry。

我的第一个问题是:一个包必须在卸载时删除它的注册表 时间?

是的。至少从社区包的作者那里期待这一点似乎是合理的。我希望 plone.app.registry 不会因为旧的已删除软件包中丢失的东西而绊倒,就像它似乎在这里所做的那样,但这可能很棘手。

那么,我的第二个问题是:如何在卸载时优雅地删除控制面板记录?

在大多数 GenericSetup 文件中remove="True" 有效。不确定这个具体案例。

【讨论】:

plone.app.registry 上的 Deleting records 有点不同,对我不起作用;您必须执行以下操作: 我正在尝试将前缀属性添加到 creation based on an interface,但在文档中不是很清楚。跨度> 【参考方案2】:
My first question is: a package must remove it's registry at uninstall time?

我不参与在卸载时删除内容,因为有时您不想在重新安装时丢失配置...提供一种清理注册表的方法对于站点管理员来说应该更好。在您不想丢失数据的测试实例上进行测试。

第二个问题maurits已经回答了,所以你应该注意错字:

delete="true" != "remove="True"

【讨论】:

这就是为什么在安装了具有 GenericSetup 配置文件的产品后,添加/删除产品面板仅提供卸载它的选项,而不再提供重新安装它的选项(Plone 3.3 及更高版本)。它仅提供应用升级步骤(如果已注册)。高级用户仍然可以通过 portal_quickinstaller 重新安装,但他们应该知道可能的障碍,就像你上面提到的那样。 delete="true" 在 plone.app.registry 中有效,但前提是我在 portal_setup 手动运行该步骤; remove="true" 没有记录。 @hvelarde 文档:plone.org/documentation/kb/genericsetup/… 和 packages.python.org/Products.GenericSetup/… @maurits 我猜这也是为了迫使开发人员创建升级步骤,至少这就是我开始在自己的附加组件上编写它们的原因:)

以上是关于Plone 控制面板的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

为啥控制面板的 PIDL 会不同?

桌面应用程序和 Windows 服务之间通信的最佳方式

调整JScrollPane大小的最佳实践

piwik安装部署最佳实践

怎么找英伟达控制面板?

win10右击开始按钮不显示控制面板