删除前将删除的对象存储在垃圾桶中。

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中。您将需要恢复客户端和/或回滚更改 让课堂上有机会。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在数据库中存储工作日数据以及开始时间和结束时间?   mysql Java JPA内部联接查询不起作用   java MQ消息在不同的客户端应用程序中显示不同   javascript如何在xPage上提高typeAhead性能?   java在尝试保存EditText时无法暂停   mongodb“未能使用带参数的构造函数NO_构造函数实例化java.util.List”,   java如何修改使IllegalArgumentException:列“\u id”不存在的游标   转换Android。网Uri到Java。伊奥。输入流   java NetBeans RCP居中弹出窗口无法按预期工作   java将sql开发人员与netbeans连接起来   带有xmldsig签名的java JAXB编组   java ORACLE JDBC批处理执行不会返回受影响行的实际计数   java无法理解如何在由swagger自动生成的jaxrs服务器中访问请求头   java如何处理漏洞CVE20181258,同时将Spring安全版本5与外部客户端(最新版本)一起使用?   JavaSpring数据JPA存储库多租户单模式技术