欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Frappe
小 (→图集) |
小 (→PostgreSQL) |
||
第41行: | 第41行: | ||
==PostgreSQL== | ==PostgreSQL== | ||
Hack Frappe 提供对 [[PostgreSQL]] 的支持。 | Hack Frappe 提供对 [[PostgreSQL]] 的支持。 | ||
+ | |||
+ | .py源文件中有很多这样的语句: | ||
+ | custom_roles = frappe.db.sql(""" | ||
+ | select | ||
+ | `tabCustom Role`.{field} as name, | ||
+ | `tabCustom Role`.modified, | ||
+ | `tabCustom Role`.ref_doctype | ||
+ | from `tabCustom Role`, `tabHas Role` | ||
+ | where | ||
+ | `tabHas Role`.parent = `tabCustom Role`.name | ||
+ | and `tabCustom Role`.{field} is not null | ||
+ | and `tabHas Role`.role in ({roles}) | ||
+ | """.format(field=parent.lower(), roles = ', '.join(['%s']*len(roles))), roles, as_dict=1) | ||
==图集== | ==图集== |
2018年8月3日 (五) 02:22的版本
Frappe 是一个全堆栈的 Python & JavaScript web 应用框架,采用MIT许可协议。
ERPNext 基于 Frappe 构建。
目录 |
DocType
DocType 是一个Frappe应用的基础构建模块,包含MVC(模型-视图-控制器)三要素,表现为:
- 数据库中的Table
- 应用中的Form
- Controller (class) 执行商业逻辑
在Frappe, 模型(models)被称为DocTypes。
DocTypes = DocField(字段)/tabDocField + DocPerms(角色权限)/tabDocPerm
当DocType创建并保存,新的表就在数据库中被创建,命名为tab[doctype]。
DocType更新时,JSON模型文件也随着bench migrate命令的执行被更新并同步到数据库。
Module
app, module 模块化设计 Frappe Framework: Models (DocTypes)
- Core
- Website
- Workflow
- Custom
- Geo
- Desk
- Integrations
- Integration Broker
步骤
通过Frappe框架构建应用的步骤:
- 构建一个新应用(App)
- 构建模块(Models)
- 创建用户和记录(Users and Records)
- 创建控制器(Controllers)
- 创建Web视图(Views)
- 设置钩子和任务(Hooks and Tasks)
PostgreSQL
Hack Frappe 提供对 PostgreSQL 的支持。
.py源文件中有很多这样的语句:
custom_roles = frappe.db.sql("""
select `tabCustom Role`.{field} as name, `tabCustom Role`.modified, `tabCustom Role`.ref_doctype from `tabCustom Role`, `tabHas Role` where `tabHas Role`.parent = `tabCustom Role`.name and `tabCustom Role`.{field} is not null and `tabHas Role`.role in ({roles}) """.format(field=parent.lower(), roles = ', '.join(['%s']*len(roles))), roles, as_dict=1)