Zhengen
|
2b60c0d5e0
|
feat: add 18 independent industry demo templates
|
2026-11-03 22:33:03 +08:00 |
|
Zhengen
|
1d08bdb6a5
|
feat: add isolated Docker local testing and HTTP smoke validation
|
2026-11-03 19:21:58 +08:00 |
|
Zhengen
|
e28364e061
|
Merge remote-tracking branch 'origin/master'
|
2026-10-27 21:37:26 +08:00 |
|
Zhengen
|
d33174192d
|
feat: add company site setup wizard and software service template
|
2026-10-27 21:36:22 +08:00 |
|
Zhengen
|
bd150f810f
|
docs: add product brochure and positioning notes
|
2026-10-19 22:40:44 +08:00 |
|
Zhengen
|
c602a26d1b
|
feat: 新增 seed_own_showcase 命令,创建产品页“世耀CMS”与官网自身案例页
- apps/core/management/commands/seed_own_showcase.py:幂等地在生产已有的
ProductIndexPage/CaseStudyIndexPage 下创建/更新“世耀CMS”产品页与衡水世耀
科技官网建设案例页;产品/栏目页缺失时 CommandError 退出,不自动创建栏目。
- apps/core/tests.py:新增 3 个用例(缺栏目页报错、创建成功、重复执行幂等),
pytest 75 -> 78,全部通过。
|
2026-10-16 21:19:43 +08:00 |
|
Zhengen
|
fd3229959a
|
Merge remote changes (SEO fields, column intros/covers/tags) with Wagtail 8.0 upgrade
|
2026-10-12 16:27:48 +08:00 |
|
Zhengen
|
71c40c0bd9
|
Merge branch 'upgrade/wagtail-8.0'
|
2026-10-12 16:26:18 +08:00 |
|
Zhengen
|
12f5825cc4
|
升级 Wagtail 7.4 -> 8.0
- requirements/base.txt:wagtail>=7.4,<8.0 -> wagtail>=8.0,<9.0。
- 本地验证:manage.py check 无新增错误(此前长期存在的 13 条
treebeard.E001 警告消失,Wagtail 8.0 已修复该兼容性问题);
makemigrations --check 无需新增项目自身迁移;migrate 应用了
Wagtail 自带的新迁移 wagtailcore.0098_apitoken;pytest 68 个用例
全部通过。
- 连带升级的依赖:djangorestframework 3.17.2 -> 3.18.3,新增
django-ninja/pydantic(Wagtail 核心新依赖)。
- wagtail-headless-preview 0.9.0 保持不变,自动化测试覆盖的预览
接口场景仍通过,但官方测试矩阵尚未明确标注 8.0 兼容性,部署前
建议在后台手动验证一次 Preview 功能。
|
2026-10-12 16:23:14 +08:00 |
|
Zhengen
|
f2927bae8e
|
feat: expose column intros, page covers and blog tags
|
2026-10-11 19:44:48 +08:00 |
|
Zhengen
|
858f35cf62
|
fix: expose page SEO fields and invalidate shared page cache
|
2026-10-11 18:02:12 +08:00 |
|
Zhengen
|
eab27b3454
|
修复 /contact 404:新增 ContactPage 模型 + 线索表单区块
- 新增 apps.core.ContactPage(SEOablePage),复用 COMMON_BLOCKS StreamField,
挂载于 HomePage 下;同步补充 HomePage.subpage_types 使后台可创建该子页面。
- 新增迁移 apps/core/migrations/0003_contactpage.py。
- 新增幂等管理命令 seed_contact_page:创建"联系我们"线索表单定义
(姓名/公司/电话/邮箱/需求描述)+ 创建/更新 slug=contact 的页面,
接入 bootstrap_deployment 部署引导流程。
- apps/home/tests.py 补充 ContactPage 相关回归测试(subpage_types 集合、
管理后台可创建性参数化用例),全仓库 pytest 65 -> 68 全部通过。
- 设计文档 §2.16 进度清单同步更新。
|
2026-09-23 10:24:38 +08:00 |
|
Zhengen
|
18dcc4b584
|
fix: 生产环境改用 LocMemCache 替代 Redis,避免 Windows 部署引入外部依赖
|
2026-09-15 10:34:50 +08:00 |
|
Zhengen
|
6fe5195b07
|
fix: waitress 生产启动加 trusted-proxy 参数,修复反代HTTPS头被清除导致的重定向死循环
|
2026-09-15 09:55:07 +08:00 |
|
Zhengen
|
c52e3a3ff5
|
修复 Wagtail API v2 fields= 参数请求自定义字段返回 400 的问题
所有 Page 模型(SEOablePage 及其子类 HomePage/BlogPage/BlogIndexPage/
ProductPage/CaseStudyPage/SolutionPage)此前均未声明 api_fields,导致
前端 fields=body,seo_title_override,... 等请求被 Wagtail API v2 拒绝并
返回 400(Wagtail 默认只暴露 id/meta/title,其余字段必须显式加入
api_fields 才能通过 ?fields= 查询)。这正是生产环境首页显示"尚未连接到
Wagtail CMS"的根因。
- apps/core/models.py: SEOablePage 增加 api_fields(seo_title_override/
seo_description_override);SimpleContentPage 追加 body
- apps/home/models.py: HomePage 追加 body
- apps/blog/models.py: BlogIndexPage 追加 intro;BlogPage 追加
published_at/intro/body
- apps/products/models.py: ProductPage 追加 summary/body
- apps/cases/models.py: CaseStudyPage 追加 client_name/industry/
published_at/summary/body
- apps/solutions/models.py: SolutionPage 追加 industry/summary/body
api_fields 是纯 Wagtail 类属性,不是 Django 模型字段,因此不产生新的
migration(makemigrations --check 确认 No changes detected)。
验证:pytest 67 个用例全部通过;manage.py check 无新增错误(仅已知
treebeard.E001 警告)。
|
2026-09-14 16:22:01 +08:00 |
|
Zhengen
|
88832e6084
|
Windows nginx模板: 拆分80/443 server块,修复HTTPS强制跳转死循环风险
|
2026-09-11 16:43:00 +08:00 |
|
Zhengen
|
fc51641700
|
Windows部署: 后端端口统一改为8080
|
2026-09-11 16:34:30 +08:00 |
|
Zhengen
|
064dbb7561
|
install-nssm-services.ps1: 局部降级 ErrorActionPreference 以规避首次安装 stop/remove 失败中断脚本
|
2026-09-11 14:00:34 +08:00 |
|
Zhengen
|
6345c23f1f
|
修复 install-nssm-services.ps1:PS7 下首次安装报 NativeCommandError 中断
PowerShell 7.3+ 默认会把"原生命令写了 stderr 且退出码非 0"当作终止性错误抛出,
即使用 2>$null 重定向也无法拦截(触发条件是退出码而非 stderr 内容是否被消费)。
脚本里 nssm stop/remove 针对尚不存在的服务(首次安装场景)必然会返回非 0,
这是预期内可忽略的失败,此前会导致 $ErrorActionPreference = "Stop" 直接中断脚本。
修复:脚本顶部关闭 $PSNativeCommandUseErrorActionPreference。
|
2026-09-11 13:54:58 +08:00 |
|
Zhengen
|
097b16eb09
|
修复生产环境 postgres.E005:INSTALLED_APPS 缺少 django.contrib.postgres
PostgreSQL 后端下,wagtailsearch.IndexEntry 模型会使用 SearchVectorField/
GinIndex 等 postgres 专属字段/索引类型,必须启用 django.contrib.postgres
才能通过 Django system check。dev 环境用 SQLite 不受影响,故只在
wagtailcms/settings/production.py 追加该 app。
验证:dev settings(sqlite)manage.py check 仍只有已知 treebeard.E001 警告;
pytest 67 个用例全部通过。
|
2026-09-11 10:57:20 +08:00 |
|
Zhengen
|
1686794ad7
|
部署配置:新增 Windows Server 裸机部署流程
- requirements/production-windows.txt:Windows 专用生产依赖,用 waitress 替代
不支持 Windows 的 gunicorn
- deploy/windows/serve-backend.ps1:waitress WSGI 启动脚本
- deploy/windows/install-nssm-services.ps1:用 NSSM 将前后端注册为 Windows 服务
- deploy/windows/nginx-wagtailcms.conf:nginx for Windows 反向代理模板(TCP 端口,
不用 unix socket)
- documents/Windows服务器部署指南.md:完整部署步骤文档,并说明与 Linux 裸机
部署(systemd/gunicorn/unix socket/Redis)的差异点
|
2026-09-11 09:39:30 +08:00 |
|
Zhengen
|
777f5367da
|
部署配置:新增裸机(非 Docker)部署所需的 systemd/Nginx 模板
- deploy/systemd/wagtailcms-backend.service:gunicorn 后端服务,unix socket 监听
- deploy/systemd/wagtailcms-frontend.service:Next.js 前端服务(npm run start)
- deploy/nginx/wagtailcms.conf:反向代理模板,区分管理后台域名与前端站点域名
供阿里云 ECS 等裸机环境不使用 Docker 时直接部署参考。
|
2026-09-11 09:22:49 +08:00 |
|
Zhengen
|
599483c3f2
|
部署引导联动首页初始化:bootstrap_deployment 自动调用 seed_homepage/seed_privacy_policy
- bootstrap_deployment 在 setup_rbac_groups 之后依次调用 seed_homepage、
seed_privacy_policy,容器每次启动(entrypoint.sh: migrate -> collectstatic ->
bootstrap_deployment)会自动创建首页并绑定 Site.root_page,再创建隐私政策页面,
无需人工登录后台手动操作。
- 新增测试验证联动创建效果与幂等性(pytest 65 -> 67,全部通过)。
|
2026-09-10 16:15:27 +08:00 |
|
Zhengen
|
ca1e63e973
|
新增 seed_homepage 管理命令:初始化首页内容
- apps/home/migrations/0001_initial.py 只创建了 HomePage 表结构,未像
`wagtail start` 项目模板那样附带创建首页实例的数据迁移,全新环境
migrate 后后台看到的仍是 Wagtail 自带占位欢迎页
- 新命令 `python manage.py seed_homepage`(幂等,可重复执行/放入部署
脚本):
- 创建 home.HomePage 实例并填充默认 StreamField 区块(Hero/数据
展示/能力网格/CTA),供运营在此基础上编辑
- 将默认 Site.root_page 指向新首页
- 清理 Wagtail 自带占位页
- 注意 Site.root_page 外键 on_delete=CASCADE,需先切换 Site 指向再
删除占位页,避免级联删除 Site 记录
|
2026-08-19 17:18:40 +08:00 |
|
Zhengen
|
19af182314
|
生产环境部署准备:Docker 化 + 修复存储配置 + SMTP 邮件
- 修复 production.py 存储配置:Django 6.0 已移除 DEFAULT_FILE_STORAGE/
STATICFILES_STORAGE 旧式设置兼容层,改用 STORAGES 字典(此前的写法
实际上早已失效,属于遗留 bug)
- 静态文件接入 whitenoise(压缩+哈希文件名+长缓存头),容器化部署下
无需额外 Nginx/CDN 即可正确提供静态文件
- 新增生产 SMTP 邮件配置(EMAIL_HOST/PORT/USER/PASSWORD/USE_TLS/
DEFAULT_FROM_EMAIL),修复线索通知邮件/PIPL 删除确认邮件在生产环境
发不出去的问题
- 新增 docker/Dockerfile(多阶段构建,非 root 用户运行)
- 新增 docker/entrypoint.sh(启动时自动 migrate + collectstatic +
bootstrap_deployment,均为幂等操作)
- 新增 docker-compose.prod.yml(backend + postgres + redis 编排)
- 新增 .dockerignore
- .env.example 补充 POSTGRES_*/EMAIL_* 环境变量说明
|
2026-08-18 14:40:19 +08:00 |
|
Zhengen
|
306068bc22
|
完善 .gitignore:补充 IDE/OS/日志/覆盖率等常见忽略规则
|
2026-08-13 14:39:33 +08:00 |
|
Zhengen
|
147107501b
|
补充测试覆盖率 + 新增部署引导命令 bootstrap_deployment
- 新增 apps/blog、apps/solutions、apps/home、apps/api 测试文件,覆盖标签/排序/
草稿过滤、HomePage.subpage_types 回归测试、page_preview 预览接口
- apps/core/tests.py 新增健康检查端点、发布 webhook 信号、bootstrap_deployment
命令的测试用例,pytest 用例数从 40 增至 65,全部通过
- 修复 apps/api/urls.py 中 PagePreviewAPIViewSet.get_object() 未捕获
DoesNotExist 导致 500 而非文档承诺 404 的 bug
- 新增 apps/core/management/commands/bootstrap_deployment.py:部署时按环境变量
幂等创建首个超级管理员账号并联动初始化 RBAC 权限组,.env.example 补充对应
环境变量说明
- 新增 OpenSearch + 中文分词本地 PoC 脚手架(docker-compose.opensearch.yml +
docker/opensearch/Dockerfile),调研结论详见设计文档 §2.10
- 更新设计文档 §2.16 Phase 1 进度清单
|
2026-08-11 14:47:10 +08:00 |
|
Zhengen
|
f37571f395
|
feat(rbac): 落地 Wagtail Group + GroupPagePermission/GroupCollectionPermission/Snippet 权限体系
新增 setup_rbac_groups 幂等管理命令,按设计方案 §2.8 矩阵创建 5 个 Group(站点管理员/编辑/审核员/作者/查看者),配置页面/图片文档/Snippet/用户管理权限;Author 仅编辑自己页面利用 Wagtail 内置 OwnershipPermissionPolicy 实现,无需自定义 hook;新增 7 个单元测试,pytest 33→40 全部通过。
|
2026-08-07 17:07:39 +08:00 |
|
Zhengen
|
3944e11330
|
feat(core): 补全剩余 6 个 StreamField Block (ProductCard/Pricing/Timeline/Team/TechStack/Video)
- apps/core/blocks.py 新增 ProductCardBlock/PricingBlock/TimelineBlock/TeamBlock/TechStackBlock/VideoBlock,COMMON_BLOCKS 扩充至 14 个内容 Block
- TeamBlock 新增 TeamMemberChooserBlock(SnippetChooserBlock),复用 FormBlock 已有的 get_api_representation 展开模式,展开 TeamMember 完整字段(含 serialize_image 复用)
- 为 blog/cases/home/products/solutions 五个 Page 模型生成并应用 alter field body 迁移(StreamField block 定义变更会写入迁移 state)
- apps/core/tests.py 新增 TeamMemberChooserBlock 空值/展开单元测试,pytest 33 个用例全部通过
- 设计文档 §2.6/§2.16 同步更新为已实现
|
2026-08-07 15:58:44 +08:00 |
|
Zhengen
|
8d440b9e4a
|
feat: 实现预览模式(wagtail-headless-preview + Next.js Draft Mode)
|
2026-08-07 15:34:46 +08:00 |
|
Zhengen
|
16e4f97e74
|
国内可访问服务替换排查:新增蜜罐反垃圾字段 + CDN 加速域名配置
|
2026-08-07 14:49:00 +08:00 |
|
Zhengen
|
d6503bb46f
|
feat: 实现PIPL数据主体删除权支持功能
- 新增 LeadDeletionRequest 模型,支持邮箱验证的删除申请/确认流程
- POST /api/v1/custom/leads/deletion-requests/ 发起申请(通用响应避免探测邮箱是否存在)
- POST /api/v1/custom/leads/deletion-requests/confirm/ 确认删除(24小时token有效期)
- 按邮箱在 Lead.data 中匹配并删除对应记录,跨SQLite/Postgres使用Python级匹配
- LeadDeletionRequest 通过 Django Admin 只读展示供合规审计
- 新增 FRONTEND_BASE_URL 设置用于拼接邮件确认链接
- apps/forms/tests.py 新增6个测试用例(含节流缓存隔离修复),全仓库30个用例通过
- 更新设计文档 §2.15/§2.16 勾选项
|
2026-08-07 13:29:20 +08:00 |
|
Zhengen
|
8fbbd2e6b0
|
feat: 新增Snippet全局内容模型(TeamMember/Testimonial/Partner/NavigationMenu/SiteSettings)
- 新增 apps.core.TeamMember/Testimonial/Partner:简单 register_snippet,含 order 排序字段
- 新增 apps.core.NavigationMenu+NavigationMenuItem:ClusterableModel+Orderable+InlinePanel,
支持内部页面或外部链接二选一
- 新增 apps.core.SiteSettings:接入 wagtail.contrib.settings + BaseSiteSetting,
存放公司信息/ICP备案号/社交账号等全局配置
- 新增只读 API:/api/v1/custom/core/{team,testimonials,partners,navigation,site-settings}/
- 补充 apps/core/tests.py 单元测试,pytest 用例由 11 个增至 24 个,全部通过
- 更新设计文档 §2.16 Phase 1 进度清单
|
2026-08-07 13:06:22 +08:00 |
|
Zhengen
|
b04de9f5c1
|
docs: 修正Phase1进度清单中过期的复选框状态
|
2026-08-07 11:05:41 +08:00 |
|
Zhengen
|
ec2e629db2
|
fix: 生产环境补充SECURE_PROXY_SSL_HEADER,完善白名单配置文档说明
|
2026-08-07 09:42:29 +08:00 |
|
Zhengen
|
4e4cdf31ac
|
docs: Cookie同意条控件已完成,更新合规清单
|
2026-08-07 09:38:05 +08:00 |
|
Zhengen
|
b05d2b7f52
|
feat: 新增隐私政策内容页(apps.core.SimpleContentPage)及seed命令,更新设计文档
|
2026-08-06 17:17:07 +08:00 |
|
Zhengen
|
9e60cabd5e
|
docs: 页脚已替换为实际ICP备案号,更新合规清单状态
|
2026-08-06 16:54:34 +08:00 |
|
Zhengen
|
e2a0f62ef4
|
docs: ICP备案已完成,更新合规清单状态
|
2026-08-06 16:37:40 +08:00 |
|
Zhengen
|
e6fd8f62f4
|
docs: update design doc progress (solutions app + pytest suite completed)
|
2026-08-06 16:24:59 +08:00 |
|
Zhengen
|
052fff1a40
|
feat: add solutions app, fix HomePage subpage_types, add pytest test suite
- apps/solutions: SolutionIndexPage/SolutionPage (mirrors products/cases)
- apps/home: HomePage.subpage_types now includes products/solutions/cases index pages (previously only blog, blocking admin page creation)
- pytest.ini + conftest.py (root_page/home_page fixtures)
- unit tests for core (SEOablePage, FormBlock API repr), products, cases, forms (lead submit API)
|
2026-08-06 16:23:49 +08:00 |
|
Zhengen
|
12f7caa158
|
feat: add products/cases page models and forms lead-capture app
- apps/products: ProductIndexPage/ProductPage
- apps/cases: CaseStudyIndexPage/CaseStudyPage
- apps/forms: FormDefinition/FormDefinitionField/Lead + submit API
- core/blocks: CaseStudyBlock, FormBlock (with API representation)
- register new apps, custom leads API route, migrations
|
2026-08-06 16:04:21 +08:00 |
|
Zhengen
|
7f51a31150
|
chore: initial commit of Wagtail backend scaffold
|
2026-08-06 15:56:14 +08:00 |
|