ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

django CMS 2.3.4 升级指南:WymEditor 修复、挪威语语言码迁移与多站点 slug 冲突防护详解

django CMS 2.3.4 升级指南:WymEditor 修复、挪威语语言码迁移与多站点 slug 冲突防护详解 CMS后端【免费下载链接】django-cmsThe easy-to-use and developer-friendly enterprise CMS powered by Django项目地址https://gitcode.com/gh_mirrors/dj/django-cms点击查看免费下载本文基于 django CMS 官方 2.3.4 release notesdocs/upgrade/2.3.4.rst编写系统梳理该版本在编辑器资源加载、语言代码迁移、时区支持、slug 冲突校验、PlaceholderField 相关名约束及页面修改表单等方面的修复与变更并结合当前仓库源码验证其底层实现。读者阅读后可完整掌握 2.3.4 升级所需的所有配置变更、行为差异与排查要点。升级背景与本文目标django CMS 是一个基于 Django 的企业级内容管理系统。每个 minor/patch 版本都可能带来行为变更或强制性的配置调整官方在 docs/upgrade/index.rst 中明确建议升级前务必仔细阅读 release notes并且对数据库做备份。2.3.4 属于 2.x 时代的维护版本其改动虽不涉及数据库迁移但包含多项影响运行行为、权限校验和 URL 生成的修复。本文将逐条拆解 2.3.4 的变更并给出对应源码佐证与升级操作建议。一、WymEditor 关键修复JavaScript 资源加载失败变更内容2.3.4 修复了 WymEditor 的严重问题——此前它无法正确加载自身的 JavaScript 资源prevented it from load its JavaScript assets correctly导致富文本编辑功能不可用。影响范围使用 WymEditor 作为富文本编辑器Text Plugin 编辑器后端的站点。升级建议升级后需清除浏览器缓存并在编辑页面中重新验证 Text 插件编辑器能否正常渲染若你仍在使用基于 WymEditor 的第三方插件建议同步检查该插件与 2.3.4 的兼容性。说明WymEditor 相关资源加载逻辑在后续版本中已逐步从 django CMS 核心中移出当前仓库 cms 源码中已无 WymEditor 相关实现属于历史版本组件本修复仅对 2.3.4 及之前版本的用户有实际意义。二、挪威语翻译迁移no→nb变更内容挪威语翻译的语言代码从旧的no迁移为nb。nb挪威博克马尔语自 2003 年起就是挪威语的官方语言代码no属于已废弃的旧代码。强制操作重要如果站点运行在挪威语环境下必须修改LANGUAGES设置否则语言切换会失效# settings.py 修改前 LANGUAGES [ (no, Norwegian), # 其他语言... ] # settings.py 修改后 LANGUAGES [ (nb, Norwegian), # 其他语言... ]同时需要确认LANGUAGE_CODE是否也引用了no如引用了需同步改为nb数据库中已保存的language字段值如 Page、CMSPlugin 的语言记录若存有旧值no需评估是否需要数据修正该版本 release notes 未提供自动迁移需站点自行处理。仓库佐证当前仓库 cms/locale 目录中同时保留了nb与no两个语言目录cms/locale/nb 与 cms/locale/no可见nb已成为主要语言目录no作为历史遗留保留进一步印证了该语言码迁移方向。三、新增时区支持Django 1.4 USE_TZTrue变更内容在 Django 1.4 及以上版本中当USE_TZTrue时django CMS 开始使用**时区感知timezone-aware**的日期时间对象此前使用的是 naive datetime。影响范围所有依赖页面、插件创建时间的逻辑以及缓存键生成、前台渲染中的时间显示。配置方式# settings.py USE_TZ True # 开启时区支持 TIME_ZONE Europe/Oslo # 按站点实际时区设置源码佐证当前仓库实现cms/models/contentmodels.py 中creation_date字段使用defaulttimezone.now作为默认值timezone.now()在USE_TZTrue时返回 aware datetimecms/models/pluginmodel.py 中插件模型的creation_date同样使用timezone.nowcms/cache/page.py 的缓存逻辑会根据settings.USE_TZ分支处理时间说明时区设置会直接影响缓存键的生成与命中测试配置 cms/tests/settings.py 中USE_TZ bool(os.environ.get(USE_TZ))表明测试环境可通过环境变量切换时区行为验证了USE_TZ是 django CMS 可感知的配置项。升级建议升级到 2.3.4 后如果开启USE_TZTrue应重点回归测试页面创建时间、插件创建时间是否正确显示使用了timezone.now()的自定义字段是否仍正常缓存是否因时间对象类型变化而产生异常。四、修复 slug 冲突发布重复 URL 的页面不再静默出错变更内容在更早的版本中发布一个与其他已发布页面具有相同 slugURL的页面可能导致错误。2.3.4 起当要发布的页面与其他已发布页面 URL 相同时系统会向用户显示错误提示并要求其修改该页面的 slug 后再发布。当前仓库源码验证同层级 slug 唯一性 当前版本在页面移动/树形操作表单 cms/admin/forms.py 中实现了完整的唯一性校验链def _validate_slug_uniqueness(self, parent, language, slug): target_siblings Page.objects.filter( parentparent, siteself._site, is_page_typeself.page.is_page_type, ).exclude(pkself.page.pk) if target_siblings.filter(urls__slugslug, urls__languagelanguage).exists(): raise ValidationError( _( You cannot have two pages with the same slug at the same page level. Please alter the slug of one of the pages before trying to move again. ) )这段代码揭示的现代校验规则slug 唯一性按父页面parent 站点site 页面类型is_page_type 语言language维度校验校验发生在页面移动move场景下_validate_slug_uniqueness由 cms/admin/forms.py 的移动流程调用随后还会调用_validate_url_uniqueness校验完整路径唯一性冲突时抛出ValidationError用户界面会看到明确的错误文案并需要修改 slug。2.3.4 中引入的正是这一冲突从静默出错变为显式报错并提示修改 slug的行为其核心思想延续至今——即在发布/移动环节强制保证 URL 唯一。升级建议升级前检查站点中是否存在历史上遗留的重复 slug 页面提前修正升级后测试发布slug 与其他已发布页面相同的页面确认能正确收到错误提示。五、PlaceholderField 禁止省略 related_name权限校验的前提变更内容cms.models.fields.PlaceholderField不再允许省略related_name即不允许传入related_name来禁止反向关联。尝试省略会抛出ValueError。此变更的目的是让 django CMS 能正确检查 Placeholder 字段上的权限。当前仓库源码佐证cms/models/fields.py 中PlaceholderField的定义class PlaceholderField(models.ForeignKey): .. warning:: This field is for django CMS versions below 4 only. It may only be used inside migrations. ... def __init__(self, slotname, *args, **kwargs): kwargs.update({null: True}) # always allow Null kwargs.update({editable: False}) # never allow edits in admin self.slotname slotname kwargs[to] cms.Placeholder kwargs[on_delete] models.CASCADE super().__init__(**kwargs)需要说明的是在当前仓库django CMS 4.x/5.x 主线中PlaceholderField已被标记为仅用于 django CMS 4 以下版本、只能在 migrations 中使用并带有系统检查提示cms.E001建议改用PlaceholderRelationField。这一演进正是 2.3.4 权限校验思路的延续——让 Placeholder 与宿主模型之间保持可追踪的反向关系是 cms/models/placeholdermodel.py 中has_change_permission、has_add_plugin_permission等权限方法能够定位该 placeholder 属于哪些模型的基础。升级建议针对 2.3.4 时代的项目检索项目中所有使用PlaceholderField且传入了related_name或related_nameNone场景的模型定义为每个PlaceholderField提供明确的related_name如related_namepost_placeholders如使用抽象基类模式需保证每个子类都有不冲突的 related_name若项目沿用至今并升级到 django CMS 4应规划迁移至PlaceholderRelationField见 cms/models/fields.py 的PlaceholderRelationField(GenericRelation)实现。六、页面修改表单change form的两处修复2.3.4 修复了页面管理后台修改表单的两个问题6.1 无发布权限用户编辑页面报错问题当编辑页面的用户没有发布权限时页面修改表单会抛出错误。修复2.3.4 起无发布权限的用户也能正常打开并编辑页面修改表单发布操作仍受权限控制。升级建议回归测试仅具有编辑权限、无发布权限的用户角色确认其可以进入页面修改表单并保存草稿。6.2DEBUGFalse时 slug 字段无法正确预填问题当DEBUG设置为False时页面修改表单无法正确预填充 slug 字段。修复2.3.4 起无论在DEBUGTrue还是False下slug 字段都会正确预填。升级建议在DEBUGFalse的生产配置下进入页面修改表单确认 slug 字段已正确显示当前值该问题与表单初始化依赖调试模式相关上下文的历史实现有关修复后表单渲染不再受DEBUG开关影响。七、升级操作清单Checklist结合上述变更从 2.3.4 之前的版本升级时建议按以下清单操作备份数据库官方 docs/upgrade/index.rst 强烈建议检查语言设置如使用挪威语将LANGUAGES与LANGUAGE_CODE中的no改为nb并核对存量数据中的语言字段检查时区设置确认USE_TZ与TIME_ZONE配置符合预期回归测试时间显示与缓存行为检查 slug 冲突审查站点内是否存在重复 slug 的已发布页面升级后验证发布冲突提示是否生效检查 PlaceholderField 定义为所有PlaceholderField显式提供related_name移除related_name用法回归测试页面修改表单覆盖无发布权限用户编辑与DEBUGFalse下 slug 预填两个场景验证 WymEditor升级后确认富文本编辑器资源正常加载如仍在使用 WymEditor 作为编辑器后端。八、与当前仓库的关系说明2.3.4 是 django CMS 2.x 时代的维护版本其大部分修复WymEditor、no→nb语言码在后续大版本中已被组件演进或语言目录更新所吸收而slug 唯一性校验与Placeholder 权限校验基础这两项设计理念在现行源码中依然清晰可见slug 唯一性当前通过 cms/admin/forms.py 的_validate_slug_uniqueness与_validate_url_uniqueness在页面移动/树操作时强制执行Placeholder 权限当前通过 cms/models/placeholdermodel.py 的has_change_permission/has_add_plugin_permission等接口实现且 Placeholder 与宿主模型的关联已演进为 PlaceholderRelationField。因此本升级指南不仅适用于仍停留在 2.3.4 时代的存量项目也可帮助开发者理解 django CMS URL 唯一性与权限校验机制的设计脉络。赞分享CMS后端【免费下载链接】django-cmsThe easy-to-use and developer-friendly enterprise CMS powered by Django项目地址https://gitcode.com/gh_mirrors/dj/django-cms点击查看免费下载相关推荐django CMS 5.0.3 升级指南Django 6 兼容性、迁移注意点与关键修复详解django CMS 5.0.3 升级指南Django 6 兼容性、迁移注意点与关键修复详解 导读 本文基于 django CMS 5.0.3 官方发布说明CMS后端Tess-4-27B-OptiQ-4bit推理加速实战MTP推测解码在Apple Silicon上的3条落地路径Tess 4 27B OptiQ 4bit推理加速实战MTP推测解码在Apple Silicon上的3条落地路径 想在Apple Silicon上跑27B大模CMS后端Django Trunc()/Extract() 函数 SQL 注入漏洞 CVE-2022-34265 分析与复现指南Vulhub 靶场Django Trunc /Extract 函数 SQL 注入漏洞 CVE 2022 34265 分析与复现指南Vulhub 靶场 本篇指南以 VulhubCMS后端上一篇终极OBS视频流革命Spout2插件完整指南下一篇如何零成本扩展工作空间VirtualMonitor虚拟显示器完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表