用途:该技能提供 Frappe hooks 系统的系统化指导,帮助在不修改框架核心代码的前提下扩展和定制应用行为。钩子注册在应用的 hooks.py 文件中,由框架在特定执行点调用。
主要能力:覆盖应用与安装钩子(before_install/after_migrate 等)、文档事件(before_insert、after_save、on_submit、on_trash 等)、权限钩子(permission_query_conditions、has_permission)、调度钩子(scheduler_events 及 cron、daily 等周期)、UI 与前端钩子(app_include_js/css、doctype_js 等)、Jinja 钩子、请求与后台任务钩子、安全执行钩子(safe_exec_globals、safe_eval_globals)以及其他扩展点(override_whitelisted_methods、override_doctype_class、auth_hooks 等)。
使用方式:在 {app_name}/hooks.py 中按单函数、多函数、字典映射或嵌套结构注册钩子;函数签名按类型区分,如文档钩子 def hook_function(doc, method=None),权限钩子 def has_permission(doc, ptype=None, user=None, debug=False)。修改 hooks.py 后需执行 bench restart。
适用场景:为 Frappe/ERPNext 应用添加校验、通知、集成外部系统、扩展权限逻辑、定制界面与模板渲染。
限制与注意事项:钩子除调度外均在主线程同步执行,可能影响性能;多应用可注册同一事件并按安装顺序执行;控制器方法先于钩子运行;需注意幂等、错误处理、递归与 SQL 注入风险;资料未提供具体价格、平台支持范围或安装命令。