欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Frappe
小 (→PostgreSQL) |
小 (→PostgreSQL) |
||
第43行: | 第43行: | ||
.py源文件中有很多这样的语句: | .py源文件中有很多这样的语句: | ||
− | + | <code> | |
− | + | 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) | ||
+ | </code> | ||
==图集== | ==图集== |
2018年8月3日 (五) 02:23的版本
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)