
Wagtail 4.1.3 发布说明解读RTL 支持、审计日志、结构化数据与搜索可靠性修复【免费下载链接】wagtailA Django content management system focused on flexibility and user experience项目地址: https://gitcode.com/GitHub_Trending/wa/wagtail本篇基于 Wagtail 4.1.3 官方发布说明2023 年 3 月 13 日撰写。4.1.3 是一个纯修复版本共包含 11 项 Bug fixes 与 1 项 Documentation 更新覆盖后台界面 RTL从右到左本地化、无障碍对比度、StructValue复制、用户栏userbar行为、审计日志报告健壮性、定时发布取消日志、require_admin_access()的时区泄漏、SQLite FTS 搜索隔离以及 Algolia DocSearch 配置等方向。读完后你将掌握这些修复各自解决的问题、影响范围并能对照本仓库源码中的实现与测试用例验证其行为。版本概览4.1.3 修了什么4.1.3 是 4.1.x 系列维护分支上的一个点修复版本不含新功能全部条目集中在 docs/releases/4.1.3.md 的 Bug fixes 与 Documentation 两个小节。按照仓库内 CHANGELOG.txt 的汇总这批修复同样被回填到了 4.2.x 及 5.0 的发布说明中例如 docs/releases/4.2.1.md说明它们是跨维护分支统一修复并回移backport的公共缺陷。全部修复条目如下后续小节将逐项结合源码展开类别修复项贡献者RTL为 Switch、Minimap、live preview 三个表单组件新增 RTL 支持Thibaud ColasRTL优化 Page explorer、Sidebar sub-menu、rich text tooltips、rich text toolbar trigger、editor section headers 的 RTL 定位Thibaud Colas无障碍帮助块help block内的链接满足颜色对比度规范Theresa Okoro数据模型支持创建StructValue副本copyTidiane Dia用户栏修复 userbar 中 Edit this page 链接缺失Satvik Vashisht审计日志防止审计日志报告audit log report在模型缺失时失败Andy Chosak日志为wagtail.schedule.cancel补充缺失的日志信息Stefan Hammer权限修复require_admin_access()中时区激活泄漏到后续请求Stefan Hammer搜索防止无关模型的匹配结果泄漏进 SQLite FTS 搜索Matt Westcott前端Algolia DocSearch 更新为新的应用与正确的版本配置Thibaud Colas文档澄清ClusterableModel与RevisionMixin模型使用关联的要求Sage Abdullah后台界面 RTL从右到左支持完善Wagtail 后台使用 CSS 逻辑属性与 RTL 工具类来支持阿拉伯语、希伯来语等 RTL 语言环境。4.1.3 对 RTL 做了两批针对性修复表单组件 RTL 支持Switch开关、Minimap页面树缩略图、live preview实时预览三个组件在 RTL 布局下之前存在对齐问题本版本补齐了 RTL 支持。组件 RTL 定位优化Page explorer页面浏览器、Sidebar sub-menu侧边栏子菜单、富文本提示rich text tooltips、富文本工具栏触发器rich text toolbar trigger、编辑器分区标题editor section headers的定位在 RTL 下被重新调整。这些修复全部位于client/scss前端的样式层。从源码结构看Wagtail 在 client/scss/_settings.scss 与工具类文件中定义了 RTL 相关的布局变量相关样式文件可在 client/scss/components 与 client/scss/layouts 目录下检索rtl关键词验证。对使用 RTL 语言的站点而言升级到此版本后后台界面不再需要手动修正错位。帮助块链接的对比度修复同批修复中help block表单字段的帮助文字块内的链接颜色被调整为满足 WCAG 颜色对比度指南。这意味着表单页面上{% field help_text %}一类提示中的链接对色弱用户和屏幕辅助工具更友好属于无障碍accessibility层面的合规性改进改动同样落在 SCSS 组件样式中。数据结构支持创建 StructValue 副本StructBlock是 StreamField 中组织多个子字段的容器其取值对象为StructValue定义在 wagtail/blocks/struct_block.py。此前StructValue不支持copy.copy()/copy.deepcopy()在对 StreamField 值做浅拷贝或深拷贝时可能失败或产生共享引用。本版本使StructValue成为可复制对象典型受益场景包括在自定义revision对比、发布回滚逻辑中对内容值做副本在表单清洗clean流程中复制 StreamField 值后修改副本第三方库如序列化器对模型内容做深拷贝。修复由 Tidiane Dia 完成改动位于StructValue的__copy__相关实现中可在 wagtail/blocks/struct_block.py 中检索__copy__验证。用户栏userbarEdit this page 链接恢复Wagtail userbar 是嵌入前台页面源码中的悬浮工具条渲染模板位于 wagtail/admin/templates/wagtailadmin/userbar/item_page_edit.html{% block item_content %} {% url wagtailadmin_pages:edit self.page.id as edit_url %} a href{% build_absolute_url edit_url %} target_parent rolemenuitem {% icon nameedit classnamew-action-icon %} {% trans Edit this page %} /a {% endblock %}4.1.3 修复的问题是在查看草稿、预览等后台视图的用户栏中Edit this page 菜单项有时不出现。仓库中的测试用例明确了期望行为草稿视图应显示编辑链接wagtail/admin/tests/pages/test_view_draft.py 中self.assertContains(response, Edit this page)预览workflow preview同样应显示wagtail/admin/tests/test_workflows.py 中的对应断言而新建页面的编辑视图中不应出现该链接页面尚未保存wagtail/admin/tests/pages/test_edit_page.py 中self.assertNotContains(response, Edit this page)前台嵌入代码在无权限时不包含该链接wagtail/admin/tests/test_userbar.py。这些测试注释引用的 GitHub issue如 #10002对应了该缺陷的历史升级后前台用户栏在草稿/预览页面上会稳定出现 Edit this page 入口。审计日志报告不再因模型缺失而失败schedule.cancel 日志信息补全防止审计日志报告在缺失模型时失败审计日志报告页面会按模型聚合展示PageLogEntry/ModelLogEntry记录。此前如果日志中引用的模型已经从代码库中删除例如废弃的自定义模型渲染报告时会因解析不到模型类而直接报错。本版本使该报告对缺失模型做了容错处理。相关实现报告视图位于wagtail/admin/views/generic/models.py的AuditLogReportView路由注册见 wagtail/admin/urls/reports.py日志条目模型为 wagtail/models/audit_log.py 中的ModelLogEntry/PageLogEntry测试覆盖见 wagtail/admin/tests/test_reports_views.py 与 wagtail/tests/test_audit_log.py。对长期维护的站点这项修复意味着清理旧模型后历史审计日志仍可正常查看与导出。为 wagtail.schedule.cancel 补充日志信息取消定时发布unschedule动作会写入actionwagtail.schedule.cancel的日志条目。写入点位于 wagtail/models/revisions.py# Log scheduled revision publish cancellation object self.as_object() log( instanceobject, actionwagtail.schedule.cancel, data{ revision: { id: self.id, created: ensure_utc(self.created_at), go_live_at: ensure_utc(object.go_live_at) }, }, )4.1.3 之前取消定时发布的日志条目缺少部分信息例如go_live_at等上下文字段导致审计界面与报表中该动作显示不完整。修复后wagtail.schedule.cancel条目的data中带有完整的 revision 元数据前端展示逻辑位于 wagtail/wagtail_hooks.py 中注册的UnschedulePublicationActionFormatter动作格式器按actions.register_action(wagtail.schedule.cancel)注册。测试用例 wagtail/tests/test_audit_log.py 断言了日志条目中data[revision][id]与data[revision][go_live_at]的存在及值Snippets 的取消定时发布也有对应用例 wagtail/snippets/tests/test_unschedule_view.py。权限层require_admin_access() 的时区激活泄漏require_admin_access()是 Wagtail 后台视图的权限装饰器定义于 wagtail/admin/auth.pydef require_admin_access(view_func): def decorated_view(request, *args, **kwargs): user request.user if user.is_anonymous: return reject_request(request) if user.has_perms([wagtailadmin.access_admin]): try: with LogContext(useruser): return get_localized_response(view_func, request, *args, **kwargs) except PermissionDenied: ...被包裹的get_localized_response定义于 wagtail/admin/localization.py会根据当前用户的首选语言与时区进入override_tz(time_zone)上下文使后台响应统一使用用户设置的时区渲染。4.1.3 修复的缺陷是一旦该时区 override 在请求生命周期之外泄漏例如异常路径或未正确退出的上下文同一个进程内后续不经过该装饰器的请求也会继续使用被激活的时区造成时间显示错乱——在使用 WSGI 长驻进程如 uWSGI且线程被复用的部署中尤为明显。从源码结构看泄漏修复的落点正是get_localized_response中with override_tz(...)与语言override的作用域管理以及 TemplateResponse 延迟渲染response.render时对 override 上下文的重新包裹。修复由 Stefan Hammer 完成。搜索SQLite FTS 不再混入无关模型的匹配结果Wagtail 的 SQLite 全文搜索后端默认数据库为 SQLite 时的零配置搜索方案会为每个被索引的模型建立 FTS 索引表IndexEntry通过content_type外键把每条索引行绑定到具体模型见 wagtail/search/migrations/0005_create_indexentry.py 中(content_type, object_id)的唯一约束。此前存在一个隔离缺陷搜索某模型时结果中可能混入其他无关模型的匹配项。4.1.3 修复后查询在解析IndexEntry时严格按content_type过滤只返回目标模型的结果。这一修复由 Matt Westcott 完成实现位于wagtail/search/backends/sqlite/后端的查询处理代码中可在该目录下检索IndexEntry/content_type相关逻辑对照。对使用多模型索引页面、Snippet、图片混合搜索的站点此修复保证了搜索结果的模型纯度。前端与文档Algolia DocSearchWagtail 文档站的文档搜索由 Algolia DocSearch 提供本版本将搜索指向新的 Algolia 应用 ID 并修正版本配置使文档搜索结果与文档版本对应正确。文档澄清DocumentationSage Abdullah 补充了关于ClusterableModel的要求说明——当与启用了RevisionMixin的模型建立关联时被关联模型需要是ClusterableModel。该说明对应 docs/advanced_topics/reference_index.md 等高级主题文档中关于ClusterableModel与 revision 集成的段落建议在开发带修订能力的自定义模型如基于RevisionMixin的 Snippet时阅读。适用前提与升级建议本版本适用于从 4.1.04.1.2 升级到 4.1.3 的项目由于没有新增迁移或数据模型变更纯行为修复常规pip install wagtail4.1.3加静态资源重建即可。若你的后台使用 RTL 语言、使用 SQLite FTS 搜索、依赖审计日志报表、或在前台使用 userbar本版本直接命中相关缺陷修复建议升级。各修复条目均可在本仓库中按下表路径复核修复点可对照的仓库路径StructValue 复制wagtail/blocks/struct_block.pyuserbar 编辑链接wagtail/admin/templates/wagtailadmin/userbar/item_page_edit.html、wagtail/admin/tests/test_userbar.py审计日志报告wagtail/admin/views/generic/models.py、wagtail/models/audit_log.pyschedule.cancel 日志wagtail/models/revisions.py、wagtail/tests/test_audit_log.py时区泄漏wagtail/admin/auth.py、wagtail/admin/localization.pySQLite FTS 隔离wagtail/search/migrations/0005_create_indexentry.pyIndexEntry的 content_type 绑定RTL 样式client/scss/components4.1.3 虽为小版本但每一条修复都对应后台高频路径上的实际缺陷RTL 布局、审计数据完整性、权限时区隔离与搜索引擎结果纯度。对照本文列出的源码与测试路径可以逐项验证修复在当前代码库中的落地情况。【免费下载链接】wagtailA Django content management system focused on flexibility and user experience项目地址: https://gitcode.com/GitHub_Trending/wa/wagtail创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考