Frappe 是一个用 Python 和 Javascript 编写的全栈式 Web 框架,功能全面,开箱即用。
它是驱动 ERPNext 的底层框架。该框架非常通用,可用于构建数据库驱动的应用程序。
在 Frappe 中,元数据是一等公民。它用于生成数据库表、设计表单以及配置许多功能。元数据存储在一个称为 DocType 的模型中。
我们以名为 ToDo 的 DocType 为例。它将包含诸如 status、date 和 description 之类的字段。
以下是 todo.json 可能的样子:
{
"name": "ToDo",
"module": "Desk",
"field_order": [
"status",
"date",
"description"
],
"fields": [
{
"default": "Open",
"fieldname": "status",
"fieldtype": "Select",
"in_global_search": 1,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Status",
"options": "Open
Closed"
},
{
"fieldname": "date",
"fieldtype": "Date",
"in_standard_filter": 1,
"label": "Due Date"
},
{
"fieldname": "description",
"fieldtype": "Text Editor",
"in_global_search": 1,
"label": "Description",
"reqd": 1
}
]
}
这样的配置将生成一个数据库表,其表结构可能如下所示:
MariaDB [_baa0f26509a564b6]> desc tabToDo;
+-----------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| name | varchar(140) | NO | PRI | NULL | |
| creation | datetime(6) | YES | | NULL | |
| modified | datetime(6) | YES | MUL | NULL | |
| modified_by | varchar(140) | YES | | NULL | |
| owner | varchar(140) | YES | | NULL | |
| docstatus | int(1) | NO | | 0 | |
| idx | int(8) | NO | | 0 | |
| status | varchar(140) | YES | | Open | |
| description | longtext | YES | | NULL | |
| date | date | YES | | NULL | |
+-----------------------+--------------+------+-----+---------+-------+
丰富的管理界面
Frappe 不仅管理后端,还附带了一个功能丰富的管理界面,称为 Desk。当您在 Frappe 中创建 DocType 时,系统会为其生成多个视图。以下是其中一些视图:
列表视图支持分页、筛选、排序和批量编辑记录。
列表视图
用于编辑记录的表单视图还支持文件附件、PDF 格式、评论、电子邮件等功能。
表单视图
报表生成器支持添加列、分组、筛选、排序,并将其保存为配置。
报表生成器
用户、角色和权限
Frappe 内置了用户和角色管理功能。用户是指可以登录系统并执行授权操作(如创建、更新或删除记录)的人。角色是对 DocType 及其允许执行的操作的映射。
Python、JS 和 MariaDB
Frappe 框架使用 Python 作为后端。它附带了一个简单而强大的 ORM,作为对 CRUD 操作的抽象。默认数据库是 MariaDB。Postgres 支持目前处于测试阶段。
doc = frappe.new_doc('ToDo')
doc.description = 'Buy Eggs'
doc.insert()
前端是使用 Javascript(jQuery)构建的单页应用程序(SPA)。
实时功能
Frappe 还支持使用 NodeJS 和 socketio 实现实时发布/订阅事件。
# server
frappe.publish_realtime('update_progress', {
'progress': 42,
'total': 100
})
# client
frappe.realtime.on('update_progress', (data) => {
console.log(data)
});
后台任务
Frappe 还支持基于 Python RQ 的后台任务队列。
frappe.enqueue('frappe.job.run_job', arg1='Test', arg2='Test2')
电子邮件
Frappe 支持发送和接收电子邮件,这些邮件也可以关联到单个文档。
打印
Frappe 支持基于 Jinja 模板生成 PDF 打印格式。它还附带了一个拖放式的打印格式生成器。
打印预览
打印格式生成器
功能全面,开箱即用
Frappe 拥有构建现代复杂应用所必需的众多功能。这里仅介绍了基本功能。本指南的其余部分将更详细地介绍这些功能以及其他高级功能,请务必通读全文。