恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Frappe v10 新特性全解析:数据导入工具重构、通用日历视图、GitHub 连接器与 frappe/charts 图表库
首页
资讯中心
/
Frappe v10 新特性全解析:数据导入工具重构、通用日历视图、GitHub 连接器与 frappe/charts 图表库
Frappe v10 新特性全解析:数据导入工具重构、通用日历视图、GitHub 连接器与 frappe/charts 图表库
发布时间:2026/9/16 9:32:32
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),仅供参考