Python之redomino-autodelete包语法、参数和实际应用案例 📅 2026/6/30 23:05:06 redomino-autodelete 完整使用文档前置重要说明redomino-autodelete是Plone CMSZope/Plone内容管理系统专用扩展包并非通用本地文件清理Python库仅用于Plone站点内内容自动过期删除不能直接作用于本地磁盘文件PyPI完整包名redomino.autodeletepip安装时使用短横线redomino-autodelete由Redomino公司开发适配Plone 4/5版本。一、包核心功能概述1. 核心定位为Plone内容类型文档、新闻、文件、图片、文件夹等增加自动过期删除机制支持定时、条件式、批量清理站点内容替代手动删除脚本。2. 核心功能清单给内容添加过期日期字段到达时间自动永久删除内容支持软删除移入回收站/硬删除直接销毁双模式全局规则单内容独立过期时间双层控制按内容类型、路径、发布时长批量设置过期策略定时任务集成zope.cron/Plone定时任务后台静默执行清理日志记录删除记录、异常内容、跳过条目过滤白名单指定文件夹/内容永不自动删除权限校验仅管理员配置自动删除规则普通用户仅能设置自身内容过期时间支持内容归档替代删除移动至归档目录。3. 依赖环境Python2.7Plone4/ 3.6~3.9Plone5依赖库plone.app.dexterity、zope.schema、DateTime、plone.app.caching、collective.cron系统仅Plone/Zope站点环境普通Python脚本无Plone环境无法单独运行二、安装方式方式1pip 标准安装构建out环境# Plone构建环境专用bin/pipinstallredomino-autodelete# 指定版本bin/pipinstallredomino-autodelete1.3.2方式2buildout.cfg 集成安装生产Plone站点推荐修改buildout配置文件[buildout] extends base.cfg eggs redomino.autodelete versions redomino.autodelete 1.3.2重新构建环境bin/buildout方式3ZMI后台快速激活安装完成后重启Zope服务进入Plone站点ZMI管理后台Add-on Products → 找到redomino.autodelete点击Install完成站点功能激活站点设置面板新增「Auto Delete Settings」全局配置页三、核心语法、类、参数详解3.1 核心模块导入Plone脚本/自定义脚本# 全局配置读取fromredomino.autodelete.interfacesimportIAutoDeleteSettings# 过期时间工具类fromredomino.autodelete.utilsimportAutoDeleteTool# 内容事件触发器fromredomino.autodelete.eventsimportContentExpiredEvent# 工具函数批量执行删除fromredomino.autodelete.apiimportrun_auto_delete,set_content_expiry3.2 全局配置接口 IAutoDeleteSettings 参数站点全局参数通过Plone registry注册表存储所有参数可后台可视化配置代码读写参数名类型默认值说明enable_auto_deleteboolTrue总开关关闭则所有自动删除失效delete_modestrtrash删除模式trash软删回收站 /hard永久删除 /archive移动归档archive_pathstr/archive归档根路径delete_modearchive时生效default_expiry_daysint90新建内容默认过期天数whitelist_pathslist[]白名单路径列表路径内内容永不自动删除allowed_typeslist[‘Document’,‘News Item’,‘File’,‘Image’]启用自动删除的内容类型skip_privateboolFalse是否跳过私有内容不自动删除cron_schedulestr0 1 * * *定时执行周期默认每日凌晨1点清理log_levelstrINFO日志级别DEBUG/INFO/WARNING/ERRORnotify_ownerboolTrue删除前给内容所有者发邮件提醒3.3 工具类 AutoDeleteTool 核心方法语法1. 初始化工具toolAutoDeleteTool(contextplone_site_root)contextPlone站点根目录对象必传2. run_auto_delete() 执行全站点过期清理# 语法tool.run_auto_delete(dry_run:boolFalse,limit:int0,filter_path:strNone)参数dry_run试运行只打印日志不实际删除调试用limit单次最大处理内容数量0无限制filter_path仅清理指定子路径下内容3. set_content_expiry() 单条内容设置过期时间tool.set_content_expiry(obj,expiry_date:DateTimeNone,days:intNone)参数objPlone内容对象文档/文件等expiry_date指定精确过期DateTime对象days相对当前天数过期二选一传入4. get_expired_items() 查询所有已过期内容expired_itemstool.get_expired_items(pathNone,type_nameNone)3.4 内容对象内置字段参数每个内容独立配置每个支持自动删除的内容会新增2个schema字段auto_delete_enabledbool当前内容是否开启自动过期custom_expiry_dateDateTime自定义过期时间覆盖全局默认天数四、8个完整可运行实战案例所有案例均运行在Plone ScriptZMI脚本环境前置变量portal Plone站点根对象案例1全局试运行过期清理dry_run调试不真实删除fromredomino.autodelete.utilsimportAutoDeleteTool toolAutoDeleteTool(portal)# 试运行打印所有待删除内容不执行删除tool.run_auto_delete(dry_runTrue)print(试运行完成无真实删除操作)案例2每日定时执行真实软删除移入回收站fromredomino.autodelete.utilsimportAutoDeleteTool toolAutoDeleteTool(portal)# 无数量限制全站点执行软删除tool.run_auto_delete(limit0)# 输出本次清理统计expired_listtool.get_expired_items()print(f本次清理过期内容总数{len(expired_list)})案例3指定文件夹批量设置30天自动过期fromredomino.autodelete.utilsimportAutoDeleteTool toolAutoDeleteTool(portal)# 获取目标文件夹对象target_folderportal.restrictedTraverse(/news/notice)# 遍历文件夹所有子内容forobjintarget_folder.objectValues():# 设置30天后过期tool.set_content_expiry(obj,days30)print(公告文件夹全部内容已设置30天过期)案例4归档模式处理过期文件不移除移动归档目录fromzope.componentimportgetUtilityfromplone.registry.interfacesimportIRegistryfromredomino.autodelete.interfacesimportIAutoDeleteSettingsfromredomino.autodelete.utilsimportAutoDeleteTool# 修改全局配置为归档模式registrygetUtility(IRegistry)settingsregistry.forInterface(IAutoDeleteSettings)settings.delete_modearchivesettings.archive_path/site_archive/expired_files# 执行清理过期内容自动移动归档toolAutoDeleteTool(portal)tool.run_auto_delete()print(已切换归档模式过期内容移动至归档目录)案例5添加白名单永久保护重要目录不自动删除fromzope.componentimportgetUtilityfromplone.registry.interfacesimportIRegistryfromredomino.autodelete.interfacesimportIAutoDeleteSettings registrygetUtility(IRegistry)settingsregistry.forInterface(IAutoDeleteSettings)# 添加白名单路径settings.whitelist_paths[/important_policy,/company_contract]print(合同、政策目录加入白名单永不自动删除)案例6仅清理图片、文件类型跳过文档新闻fromzope.componentimportgetUtilityfromplone.registry.interfacesimportIRegistryfromredomino.autodelete.interfacesimportIAutoDeleteSettingsfromredomino.autodelete.utilsimportAutoDeleteTool# 修改允许自动删除的内容类型registrygetUtility(IRegistry)settingsregistry.forInterface(IAutoDeleteSettings)settings.allowed_types[File,Image]# 仅清理上传附件、图片toolAutoDeleteTool(portal)tool.run_auto_delete(filter_path/upload_resource)案例7给单篇新闻设置精确指定过期日期fromDateTimeimportDateTimefromredomino.autodelete.utilsimportAutoDeleteTool toolAutoDeleteTool(portal)# 获取指定新闻对象news_objportal.restrictedTraverse(/news/2026/06/notice-001)# 设置精确过期时间2026-12-31expire_timeDateTime(2026-12-31 23:59:59)tool.set_content_expiry(news_obj,expiry_dateexpire_time)print(指定新闻自定义过期时间设置完成)案例8限制单次清理100条批量导出过期内容日志importloggingfromredomino.autodelete.utilsimportAutoDeleteTool# 初始化日志logging.basicConfig(filename/var/plone/autodelete.log,levellogging.INFO)toolAutoDeleteTool(portal)# 单次最多处理100条过期内容tool.run_auto_delete(limit100)# 查询剩余未清理过期内容remain_expiredtool.get_expired_items()logging.info(f本次处理上限100条剩余待清理{len(remain_expired)})五、常见错误、报错原因与解决方案错误1ImportError: No module named redomino.autodelete原因1未执行buildout/pip安装包原因2未重启Zope服务egg包未加载原因3普通本地Python环境运行无Plone/Zope依赖解决使用bin/pip install redomino-autodelete重启Zope该包无法脱离Plone单独运行。错误2AttributeError: ‘NoneType’ object has no attribute ‘restrictedTraverse’原因传入context为空未传入Plone站点根portal对象解决脚本第一行获取站点根portal context.portal_url.getPortalObject()。错误3ValidationError: archive_path folder does not exist原因全局配置delete_modearchive但归档路径文件夹不存在解决先在Plone后台手动创建归档目录再配置registry路径。错误4内容未自动删除定时任务无执行原因1总开关enable_auto_deleteFalse原因2cron定时任务collective.cron未激活原因3内容类型不在allowed_types列表原因4内容路径在白名单whitelist_paths内排查开启dry_run试运行打印日志查看过滤跳过原因。错误5DateTime format error when set expiry date原因set_content_expiry传入字符串时间未转换为Plone专属DateTime对象错误写法tool.set_content_expiry(obj, expiry_date2026-12-31)正确写法tool.set_content_expiry(obj, expiry_dateDateTime(2026-12-31))错误6PermissionError无法删除内容原因脚本运行用户无内容删除权限内容设置了锁定/私有保护解决使用管理员账户执行自动删除脚本关闭skip_private参数。错误7删除后回收站找不到内容原因全局delete_mode设置为hard永久删除模式解决修改配置settings.delete_mode trash开启软删除。错误8buildout安装提示版本冲突原因Plone版本过低redomino-autodelete高版本不兼容Plone4解决Plone4环境锁定低版本redomino-autodelete1.1.0。六、使用注意事项1. 环境限制无法脱离Plone CMS独立使用该包是Zope/Plone扩展不能用于本地文件、Django/Flask等其他Python项目Python版本区分Plone4仅支持Python2.7Plone5支持Python3。2. 数据安全规范生产环境优先使用trash回收站或archive模式禁止长期开启hard硬删除正式执行删除前必须使用dry_runTrue试运行核对待删内容重要目录务必加入whitelist白名单防止误删政策、合同、备案文件。3. 定时任务运维默认凌晨1点执行可调整cron_schedule避开站点访问高峰配置持久化日志文件留存删除记录用于审计追溯大批量站点建议添加limit参数避免单次清理占用服务器IO、拖慢站点。4. 内容权限与业务适配开启notify_owner删除前通知内容负责人降低误删纠纷私有草稿内容默认不会自动清理如需清理关闭skip_private自定义内容类型需手动添加至allowed_types列表才能生效过期规则。5. 升级与兼容升级包版本前备份Plone数据库避免字段结构变更导致内容丢失多站点隔离配置每个Plone站点拥有独立AutoDelete配置互不干扰不与其他内容过期插件collective.expiration同时安装存在字段冲突。6. 性能优化超大站点建议拆分filter_path分批次清理不要一次性全站点扫描定期清理回收站归档目录避免Plone数据库存储膨胀低峰时段执行自动删除定时任务减少前端页面卡顿。《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。