该技能用于 Frappe 框架中网站、门户与公开页面的实现,提供分步工作流。适用版本为 v14/v15/v16,其中 v15+ 使用 Bootstrap 5,v14 使用 Bootstrap 4。
主要能力覆盖以下场景:静态内容页(Web Page DocType 或 www/ HTML)、外部用户数据录入(Web Form)、网站可见记录列表(DocType 的 has_web_view)、博客文章(Blog Post + Blog Category)、带侧边栏/工具栏的自定义门户页(www/)、带参数的动态路由(hooks.py 中的 website_route_rules)。
使用方式上,门户页面放在应用的 www/ 目录,文件名即路由,同名 .html/.py/.css/.js 自动加载;控制器通过 get_context(context) 注入上下文,动态内容始终设置 no_cache = 1。Web Form 在列表中新建,字段名需匹配目标 DocType 字段名,可配置是否要求登录、允许编辑与多次提交,并通过 frappe.web_form.on 客户端钩子与服务器端 Python 脚本扩展。启用 has_web_view 需勾选 Has Web View 与 Allow Guest to View,设置路由前缀,并在 hooks.py 注册 website_generators,且必须包含 published 检查字段。路由规则与重定向分别写在 website_route_rules 和 website_redirects;首页优先级为 get_website_user_home_page > role_home_page > Portal Settings > Website Settings。SEO 通过 context.metatags 或 Web Page 的 meta 字段设置,/sitemap.xml 自动生成。
限制与安全要求:访客提交的 Web Form 必须配置站点级速率限制(如 "rate_limit": {"web_form": "5/hour"})并进行服务端验证,不可仅依赖客户端;生产环境不得设置 ignore_csrf;不得暴露未发布的文档。博客文章必须设置 Published On 日期,否则不会出现在 RSS 中。避免在 get_context 中硬编码 HTML,业务逻辑应放在 DocType 控制器中。具体命令与扩展参考文档未在资料中完整提供。