尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Frappe v10 新特性全解析:数据导入工具重构、通用日历视图、GitHub 连接器与 frappe/charts 图表库
Frappe v10 新特性全解析数据导入工具重构、通用日历视图、GitHub 连接器与 frappe/charts 图表库【免费下载链接】frappeLow code web framework for real world applications, in Python and Javascript项目地址: https://gitcode.com/GitHub_Trending/fr/frappe本篇技术指南以 v10.0.0 变更日志 为主线深度剖析 Frappe v10 引入的四项关键能力以表单为核心、支持后台任务与大文件处理的增强版 Data Import Tool任意 DocType 可用的日历视图GitHub 连接器以及自研的轻量 SVG 图表库 frappe/charts。结合当前仓库frappe/bench 框架源码中的data_import模块与desk/calendar.py实现你可以直接复现这些特性的配置方式、运行机制与二次开发入口。一、增强版 Data Import Tool从一次性的脚本到可维护的正式表单v10 变更日志对 Data Import Tool 的改造用了三条简练的描述但每一条背后都是架构级的调整Data Import Tool 现在是一个普通表单可以为每次数据导入保留独立记录更好的错误处理大文件支持后台处理。1.1 表单化每次导入都是一条可追踪的记录在 v10 之前数据导入更多是上传文件 → 立即执行的一次性流程导入的配置、文件和结果无法回溯。v10 将其重构为Data Import这个标准 DocType每次导入都会生成一条持久化记录其命名规则在 data_import.json 中定义为autoname: format:{reference_doctype} Import on {creation}即每次导入记录的自动命名为{目标DocType} Import on {创建时间}。该 DocType 完整保留了导入相关的核心配置字段这里整理成表格便于速查字段类型说明reference_doctypeLink(DocType)要导入数据的目标文档类型必填仅可设置一次import_typeSelectInsert New Records/Update Existing Records/Insert or Update Records即 Upsert必填import_fileAttach待导入的 CSV / XLS / XLSX 附件google_sheets_urlData从 Google Sheets 导入需公开可访问的 URL与文件导入二选一download_templateButton一键下载当前 DocType 的导入模板submit_after_importCheck导入成功后是否直接提交Submit文档默认关闭mute_emailsCheckDont Send Emails——导入期间是否抑制邮件触发默认开启值 1custom_delimiters/delimiter_optionsCheck / Data自定义 CSV 分隔符delimiter_options默认值为,;\t|仅当分隔符是单个字符时才生效use_csv_snifferCheckDetect CSV type当默认解析无法正确识别数据时启用statusSelect只读Pending/Success/Partial Success/Error/Timed Outpayload_countInt本次导入的总记录数value_mappingsTable源文件中无效的 Link/Select 值到此手动映射为目标值skipped_rowsTable被跳过的行明细template_optionsCode(JSON)模板解析选项由系统写入只读从字段设计可以看出 v10 的表单化思路导入任务的状态、配置、错误行、值映射全部沉淀为表单数据既可以在界面上反复查看和修正也为后续 API 化、脚本化调用提供了数据模型基础。1.2 更完善的错误处理预览、校验、跳过行与导入日志更好的错误处理在源码中体现为一整套分层机制保存时即校验。DataImport.validate()见 data_import.py在保存记录时会清空与旧文件相关的template_options、template_warnings、value_mappings、skipped_rows调用validate_doctype()做三重权限/资格校验BLOCKED_DOCTYPES黑名单、DocType 的allow_import开关、当前用户 import 权限校验 Google Sheets URL 合法性并通过 Importer 计算payload_count。导入前先预览。表单内置get_preview_from_template白名单接口frappe.whitelist()在真正执行前先解析文件返回前 10 行预览MAX_ROWS_IN_PREVIEW 10见 importer.py同时渲染Data Import Log供用户确认列映射是否正确。逐行记录日志。导入结果通过Data Import Log、Data Import Skipped Row等子表持久化。get_import_status 会按success分组统计成功/失败记录数若是 Upsert 模式还会进一步拆分为inserted与updated两个计数。失败时表单可一键下载错误模板download_errored_template和跳过行download_skipped_rows把错误数据带回去修正后再导。明确的终态与超时兜底。后台执行任务start_import见 data_import.py捕获JobTimeoutException时回滚并将状态置为Timed Out捕获其他异常则置为Error并写入错误日志最终通过frappe.publish_realtime(data_import_refresh, ...)实时通知前端刷新状态。1.3 后台处理大文件导入不再阻塞请求Background processing for large files对应start_import方法的入队逻辑def start_import(self): run_now frappe.in_test or frappe.conf.developer_mode if is_scheduler_inactive() and not run_now: frappe.throw(_(Scheduler is inactive. Cannot import data.), title_(Scheduler Inactive)) job_id fdata_import||{self.name} if not is_job_enqueued(job_id): enqueue( start_import, queuedefault, timeout10000, eventdata_import, job_idjob_id, data_importself.name, nowrun_now, ) return True return False要点如下导入任务投递到 RQ 的default队列超时上限 10000 秒通过job_id保证同一个导入任务不会被重复入队测试模式frappe.in_test或developer_mode下会同步执行nowTrue方便调试运行时依赖调度器Scheduler若调度器未启动会直接拒绝执行提供stop_data_import白名单接口通过 RQ 的send_stop_job_command可随时中止正在运行的导入任务InvalidJobOperation时提示Job is not running。后端核心实现位于Importer类importer.py它支持 CSV / XLS / XLSX / Google Sheets 四种数据源分别调用read_csv_content、read_xls_file_from_attached_file、read_xlsx_file_from_attached_file、get_csv_content_from_google_sheets并在before_import阶段统一设置frappe.flags.in_import与邮件抑制标志确保导入期间触发器的行为可控。1.4 模板下载与三种导入模式表单上的Download Template按钮对应download_template白名单接口data_import.py其参数决定了导出内容export_recordsall导出全部数据、by_filter按筛选条件导出、blank_template仅空模板、5_records样例 5 行export_fields按{DocType: [field1, field2], ChildDocType: [...]}形式精确控制导出列file_type默认 CSV也支持 Excel导出排序自动读取用户对该 DocType 的列表视图设置get_user_settings。导入模式的常量定义在 importer.pyINSERT Insert New Records UPDATE Update Existing Records UPSERT Insert or Update Records ACTION_INSERT Insert ACTION_UPDATE UpdateUPSERT模式下同一条记录先尝试按主键更新不存在则插入这也是get_import_status中能分别统计 inserted/updated 的原因。1.5 程序化调用与测试验证除界面操作外v10 的 Data Import 还暴露了可直接编程调用的入口。最常用的是import_file函数data_import.pydef import_file(doctype, file_path, import_type, submit_after_importFalse, consoleFalse): data_import frappe.new_doc(Data Import) data_import.reference_doctype doctype data_import.import_file file_path data_import.submit_after_import submit_after_import ... i Importer(doctypedoctype, file_pathfile_path, data_importdata_import, consoleconsole) data_import.set_payload_count(i) i.import_data()其中import_type传入insert/upsert/update会被自动映射到对应的三种模式。对应的单元测试位于 test_data_import.py其中test_is_csv_import_source验证了 CSV 分隔符/嗅探配置只对.csv文件与 Google Sheets 数据源生效.xlsx/.xls不受影响可作为理解custom_delimiters/use_csv_sniffer生效边界的参考。二、任意 DocType 均可拥有日历视图v10 变更日志的第二项能力是 Any doctype can have a calendar view。这意味着不再只有内置的 Event 类型才能以日历呈现任何包含日期字段的 DocType 都可以通过日历视图浏览和拖拽编辑记录。其服务端核心位于 desk/calendar.py对外提供两个白名单接口get_events按doctype、时间范围start/end、field_map字段映射和filters查询该时间窗内的记录返回给前端日历渲染查询会调用get_event_conditions自动带上用户权限条件with_match_conditionsTrueupdate_event接收args与field_map将拖拽产生的新开始/结束时间写回对应 DocType 的字段并保存——field_map本质上是日历位置字段 ↔ DocType 真实字段的映射例如把日历的start/end映射到 DocType 的from_date/to_date。前端渲染逻辑位于 frappe/views/calendar/calendar.js它负责把get_events返回的数据绘制成月/周/日视图并把用户的拖拽操作转译为update_event调用。对于需要自定义展示字段如显示状态、颜色的场景可通过日历视图的字段映射与筛选参数实现具体配置可参照 desk/test_calendar.py 中构造的测试场景。三、GitHub 连接器把代码仓库接入 Frappe 生态变更日志中提到 Frappe now has a github connector。这是一项面向开发协作的能力通过连接器将 GitHub 仓库与 Frappe 站点打通把拉取请求、Issue 等数据同步进系统与 Frappe 的自动化、权限体系结合使用。需要说明的是该连接器模块在当前仓库主干中已不再保留在frappe/integrations/doctype目录下已无法找到 github 相关 DocType目前仅剩 Google Contacts、Social Login Key 等集成它属于 v10 时代引入、后续随模块演进被独立拆分或移除的功能。若你正在使用旧版 v10 代码库可通过自定义 DocType 与 GitHub REST API 对接实现类似效果在当前版本中social_login_keysocial_login_key.py是了解 Frappe 如何管理第三方服务凭据与 OAuth 流程的现成参考。四、自研图表库 frappe/charts简单、响应式、现代的 SVG 图表v10 同时发布了 Frappe 团队自研的开源图表库frappe/charts其定位在变更日志中写得很明确simple简单、responsive响应式、modern现代、SVG 技术栈且完全由 Frappe 团队自己开发维护源码托管在独立的 frappe/charts 仓库本仓库不包含其源码仅在变更日志中声明了这一发布事实。该库被用于 Frappe 内置的报表与 Dashboard 场景例如Dashboard ChartDocType 的图表渲染。与当时常见的 Canvas 图表方案相比SVG 的优势在于DOM 可访问性图表元素就是文档节点方便工具提示、事件绑定与无障碍支持天然响应式可通过 CSS/视口缩放适配从手机到桌面的不同屏宽体积轻量聚焦柱状图、折线图、百分比、饼图等核心类型API 简洁与 Frappe 的后端报表数据如frappe.desk.query_report配合使用成本极低。从版本演进看frappe/charts 的发布是 Frappe v10现代化 UI 基建的一部分——与表单化的 Data Import、通用日历视图共同构成当时版本的主要亮点。结语Frappe v10 的这份变更日志篇幅虽短却浓缩了三条影响深远的工程决策把一次性工具升级为可审计的领域模型——Data Import 表单化后配置、状态、错误、映射都可持久化、可后台化、可编程调用其架构延续至今当前仓库 frappe/core/doctype/data_import 下的data_import.py、importer.py、exporter.py、value_mapping.py与配套测试仍在持续演进视图能力下沉到平台层——日历视图从 Event 专属抽象为任意 DocType 可复用的通用能力field_map机制让任何日期字段都能一键日历化前端基础设施自研化——frappe/charts 与 GitHub 连接器的引入标志着 v10 在平台完整性上的补全。如果你正在基于本仓库或 v10 分支做数据迁移、排期类功能或报表可视化上述四块内容分别对应了可直接复用的表单式导入方案、desk/calendar.py的日历服务端接口、social_login_key的第三方集成模式以及 charts 生态的对接思路。【免费下载链接】frappeLow code web framework for real world applications, in Python and Javascript项目地址: https://gitcode.com/GitHub_Trending/fr/frappe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

上门服务系统:改约事件怎么同步到师傅端日程

上门服务系统:改约事件怎么同步到师傅端日程

上门服务系统里,用户改约、客服改档、师傅端日程不同步,是上线后最高频的扯皮点。常见反模式是:用户端改时间字段,师傅端再改一遍本地日历,两边各写各的。更好的做法是:改约是事件——服务端改槽位、写流水…

📅 2026/9/16 9:32:35
Linux DHCP超级作用域与中继代理综合配置实战解析

Linux DHCP超级作用域与中继代理综合配置实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/16 9:32:35
BISHENG 知识空间 AI 问答检索权限过滤(F029):双层 view_file 过滤架构与落地实现

BISHENG 知识空间 AI 问答检索权限过滤(F029):双层 view_file 过滤架构与落地实现

BISHENG 知识空间 AI 问答检索权限过滤(F029):双层 view_file 过滤架构与落地实现 【免费下载链接】bisheng BISHENG is an open LLM devops platform for next generation Enterprise AI applications. Powerful and comprehensive features…

📅 2026/9/16 9:32:35
MORE NEWS

更多资讯

📰

jcode路线图前瞻:Remote Handoff、iOS远程控制与Git新原语将如何改变多设备AI编码

jcode路线图前瞻:Remote Handoff、iOS远程控制与Git新原语将如何改变多设备AI编码 【免费下载链接】jcode The most RAM efficient harness 项目地址: https://gitcode.com/GitHub_Trending/jcod/jcode jcode 是一个以极致内存效率著称的 Rust 终端 AI 编码智…

📰

Python+Django实现高效音乐推荐系统:协同过滤算法优化

1. 项目概述:音乐推荐系统的核心价值音乐推荐系统已经成为现代数字生活的标配功能。作为一个基于PythonDjango框架实现的协同过滤算法音乐推荐播放器,这个项目完整覆盖了从算法设计到系统部署的全流程。不同于市面上简单的播放列表功能,它通过…

📰

汽车智能制造中的数据采集与应用实践

1. 汽车智能制造的数据革命十年前走进汽车工厂,你会看到流水线上机械臂重复着固定轨迹,工人忙着拧紧螺栓,质检员拿着卡尺测量零件尺寸。如今再访同一家工厂,场景已大不相同:机械臂能自动调整动作路径,AGV小…

📰

赛程安排实战指南:组合优化、回溯算法与局部搜索全解析

1. 赛程问题远比你想象的难:从一场业余联赛说起前阵子朋友找我帮忙,说他们单位搞羽毛球混合团体赛,12支队伍打单循环,每队每周打一场,场馆只有4片场地,每周只能安排8场比赛,还要求同一单位的两支…

📰

AI技术如何重塑英语学习:从语音识别到自适应学习

1. AI技术如何重塑英语学习体验上周我帮一位雅思备考学员调试AI口语陪练系统时,他忽然感叹:"现在跟AI对话比外教课压力小多了,说错语法马上就有反馈,还能24小时陪练。"这个场景让我意识到,AI技术正在彻底改变…

📰

为什么选go-modern-guidelines?对比3种AI Go编码方案

为什么选go-modern-guidelines?对比3种AI Go编码方案 【免费下载链接】go-modern-guidelines Help AI coding agents write modern Go 项目地址: https://gitcode.com/GitHub_Trending/go/go-modern-guidelines go-modern-guidelines 是 JetBrains 推出的开源…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬