删除前将删除的对象存储在垃圾桶中。
ims.trashcan的Python项目详细描述
简介
在垃圾桶提供了一种方法来维护最近删除的内容的备份,而不必求助于 备份或回滚提交,这些提交可能包括在项 删除。在
工作原理
这个包的目标是存储实际的python对象,而不是实际的对象 对象。垃圾项目不应被遍历到或具有其任何方法 或访问属性,但在还原之前仅作为二进制数据存在。为此,它们被存储为 Python泡菜。pickle是可以反序列化的序列化python对象,事实上,这就是如何实现的 ZODB运作。为了将数据存储为pickle,我们实际上使用ZODB导出创建一个ZODB Blob 过程。垃圾项目具有以下属性:
- Blob实例:导出数据
- 路径:从中删除它的遍历路径
- id:垃圾桶中的唯一id,由原始项目的id+时间戳组成
- 标题:原始项目的标题
- _created:垃圾桶项目创建的日期时间实例
丢弃的项目将使用反向过程进行恢复,其中ZODB import将对Blob pickle进行反序列化。在
配置和清理
在网站门户网站的ZMI中,您可以配置保留内容的天数(默认为7)
在从站点中删除之前(在此之后,您仍然需要打包您的数据库
完全移除)。此工具的__call__
方法将考虑这一点,您可以访问该方法
以编程方式:
>>>importplone.api>>>can=plone.api.portal.get('portal_trash_can')>>>can()
或通过HTTP请求http://localhost:8080/Plone/portal_trash_can
建议您设置cron作业以定期执行此作业。在
可丢弃物品
默认情况下,提供plone.dexterity.interfaces.IdexteryItem接口将 可悲的。这并不包括IDexterityContainer。可以注册其他订户 触发使用ZCML进入垃圾桶。这个例子展示了如何注册一个想象中的接口 "foo.bar.接口.IMyInterface“在它被删除的情况下(IObjectRemovedEvent)。在
^{pr2}$注意这个 对于灵巧的非容器对象的项来说是完全不必要的,并且实际上会导致 重复
已删除容器
默认情况下,IDexterityContainer不是已注册的trashable接口。这是因为IObjectRemovedEvent 如果我们试图丢弃任何包含的对象,将触发两次。这不仅使 数据进入垃圾桶,这也使删除项目所需的开销时间加倍。一般来说, 容器只有元数据,我们关心的是其中包含的页面和文件。 强烈建议不要将容器注册为可丢弃容器,除非您了解这一点 警告,并认为这是绝对必要的,值得增加的成本。在
正在还原项目
要恢复一个项目,首先要通过站点的ZMI:${site\uurl}/portal\utrash_can/manage_工作区找到它。这个 按“id+timestamp”列出所有未过期的已删除项目。访问包含元数据的垃圾项目 包括原标题和删除日期/时间。恢复内容时没有选项,它将 只需将其恢复到原始位置即可。如果原来的位置不再存在,它将 将其还原到门户根目录
恢复整个文件夹
除非为该内容类型自定义删除订阅服务器,否则folderish对象通常不会自身 包括在垃圾桶里。考虑下面给定这些id的文件夹结构。在
portal/
└── folderA/
├── page1
└── page2
如果folderA被删除,垃圾桶将包含两个条目:page1和page2。默认情况下,因为 folderA不再存在,这些将被恢复到门户根目录。但是,您可以先创建 一个根文件夹,然后恢复这些页,这将恢复到它们原来的l位置。在
例外情况
在某些情况下,不需要额外的工作就无法恢复内容:
- 已删除的页面已被具有相同id的新页面替换。您必须重命名该id 在恢复之前
- 已删除的文件夹已替换为具有相同id的非容器 会关联到/portal/folderA被替换为具有该路径的页面。您将无法恢复 /portal/folderA/page1,因为当前的/portal/folderA不能包含项。你需要重命名 新文件夹并在其位置创建一个实际的文件夹
- python类不再包含在Zope客户机中。在这种情况下,腌菜不能 反序列化,直到它包含在Zope中。您将需要恢复客户端和/或回滚更改 让课堂上有机会。在
- 项目
标签: