简介
- DirectUS是一款无头内容管理系统(Headless Content Management System),支持多种关系数据库系统,能够自动为数据表格产生Rest API和GraphQL端点。
- DirectUS 的设计理念是数据库优先,不对使用者的表格做任何限定,可以与任意表格关联,并实现对其管理并生成增删改查的API。
- 虽然包括无头CMS的功能,但是DirectUS自带了一个管理系统APP,叫DirectUS Studio,可以直接用于内容管理,且支持完善的角色、权限控制机制,可定制能力强大,经过一定的配置,就可以直接作为一个完整信息管理平台来使用。
- DirectUS支持强大的扩展机制,而且它自带的管理系统就是基于这一套扩展机制开发的。
- 所有代码基于一个商用友好的许可证(见下文)完全开放可用,没有仅供商业用户的私有部分。
其它功能
- 支持一对一、一对多、多对一,多对多、多对任意等多种数据关联关系。
- 强大完善的权限管理机制,基于角色、权限经典模式,可对集合的增、删、改、查、分享进行独立控制。且纵向可精确到字段级,横向通过过滤器可精确到记录级。
- 通过数据库抽象机制,支持多种关系数据库,支持MySQL, Postgre, MSSQL, Oracle, SQLite等多种关系数据库,底层是通过Knex ORM库实现的。
- DirectUS 自带文件存储、上传等功能,可对接本地磁盘、阿里云OSS、谷歌云、微软云、亚马逊云存储等。
- 自带完善的国际化机制,管理系统支持包括中文内的多语言,可对任意数据集合、字段的文本显示等进行国际化处理。
- 自带仪表盘模块,支持低代码方式对数据集合设计丰富的图表显示。
- 自带卡片、日历、看板等显示布局,只要你的集合符合特定规则,就可以直接配置使用,无需编程。
- 自带图像编辑器。
许可证
关于DirectUS的许可证条款我的理解如下:
- 个人或小团队学习、演示等使用场景完全免费
- 对大规模生产使用需要联系DirectUS的销售付费使用
- 代码发布后(可能是基于每个源文件)3年后自动转为GPL许可证,也就是传染性的开源协议。
部分术语解释
- Alias: 数据库的虚拟字段称之为“别名”,比如在一对多关系中,虽然关联ID位于从表(“多”表)中,但是可以从主表的集合中以一个Alias字段来引用从表中的多个数据项。还有些纯粹为了显示的虚拟字段,比如按钮、分隔栏之类的。
- Archieve: 归档,也就是逻辑删除功能,可以指定一个字段及归档取值,凡是归档的记录,默认就不显示在集合中了。
- API: 指DirectUS为用户数据库生成的Rest/GraphQL API。
- APP: 指DirectUS自带的管理系统。
- Activity: 系统活动日志,DirectUS可自动为平台内的访问和操作生成日志,可用于审计。
- Collections: 数据集合,对应关系数据库中的表格。
注意,DirectUS还支持集合页面中的文件夹集合,仅用于将集合分组归并显示。
- Dashboards: 仪表,系统自带的功能,可为集合生成定制化的可视化图表界面。
- Database Abstraction: 指DirectUS的数据库抽象机制。
- Displays: 字段的只读显示控件,DirectUS自带了多种控件,比如颜色、缩略图、标签、评级星标等,可以基于扩展机制自行基于VUE开发。
- Fields: 集合中的字段,也即数据表格中的列。
- Interfaces: 字段的读写控件,用于编辑字段的值,除DirectUS自带的控件外,可以基于扩展机制自行开发。
- Items: 数据项,集合中的对象,也即数据表格中的行。
- Junction Collections: 交汇点集合,DirectUS管理多对多,多对任意两种关联时,会自动生成一个独立的交汇点集合,用于保存多对多的映射关系。
- Layouts: 布局,即集合的显示和交互界面,默认自带列表、卡片、日历、地图、看板这几种布局,可以基于扩展机制自行开发。
- Modules: 模块,即左侧导航菜单中可交互的独立页面,可以基于扩展机制自行基于VUE开发。
- Permissions: 权限,多对一关联到角色,定义角色对每个数据集合(包括DirectUS系统集合)的增删改查权限,纵向可以精确到字段级,横向可通过过滤器进行记录级筛选。
- Presets: 预设,即集合的筛选、页面布局、排序等预设值,管理员可以为所有用户或针对特定角色设定集合的预设配置,用户也可以自己设定私有的配置,这种情况,通常用 Bookmarks 即书签这个术语。
- Projects: 也就是整个DirectUS部署实例。
- Revisions: 修订版本,DirectUS可自动为数据项的修改产生修订日志,可用于操作审计,也可以还原到旧版本。
- Roles: 角色,权限的集合。一个用户只能有一个角色,可在过滤规则中使用 $CURRENT_ROLE 引用当前用户所属角色的ID。
- Singleton: 单例,一个集合如果设定为单例,则只有一条记录,将跳过集合页面直接显示数据项页面。
- Storage Adapters: 存储引擎,自带了本地磁盘和几种云存储引擎,其中S3可能适用于阿里的OSS。也可以自行编写其它存储引擎。这个似乎不能用扩展机制,必须在DirectUS的项目目录内添加。
- Translations: 翻译,就是DirectUS的国际化支持机制,内部是用单独的系统表格实现集合、字段的多语言翻译保存。
- Users: 用户。在过滤规则中,可用 $CURRENT_USER 引用当前用户的ID。
安装
基于Docker安装
- Windows需要安装Docker Desktop
- 在Windows功能中启用 Hyper-V, 虚拟化等功能
- BIOS中需要启动虚拟化支持
- 需要安装WSL2
- Docker安装、启动
- 更改数据保存路径,避免占用C盘
- 部署、启动DirectUS
- 默认端口8055
- 默认使用SQLite,修改docker-compose.yml,使用MySQL
本地安装
使用
过于一对多和多对一
- O2M 和 M2O 实际上是一个东西,看视角从哪个表格出发。
- M2O 最容易理解,就是主表是多,比如一个作者和作品表,作品对作者就是M2O,假设关系字段叫author。
- 那么编辑一个作品时,它的author字段就可以自动关联到作者集合,从作者集合中查询,选定一个作者。
- 如果希望在查看一个作者时,能够直接看到他的所有作品列表,就需要再为作者表添加一个O2M的字段,比如起名叫books,这个字段就是所谓的“别名”,是一个虚拟字段,实际在作者表格中并不存在。
- 在设定O2M虚拟字段的显示方式时,可以选择列表或者表格,这样在一个作者的详情页面中,就能直接看到他所有的作品了,还可以直接添加(关联)新的作品。
关于树视图字段
- 一种特殊的O2M字段,仅用于自表中的递归关联。
- 也就是说,还是需要先为这种关联创建一个M2O字段。举例:一个组织架构表,先创建个parent的 M2O 字段关联到上级部门的记录ID。
- 然后,就可以添加一个类型为“Tree View”的虚拟字段,比如subsidiaries,关联到 parent 这个M2O字段。
- 这样,在查看或编辑单个部门记录时,可以看到其所有下属部门,可以逐层展开。
关于多对多(M2M)关系
- 比如学生和课程,一个学生有多门课,多个学生也都可以上同一门课程。
- 对于M2M关系,DirectUS会自动创建一个交汇集合(Junction Collection),可就是一个专门用来保存多对多映射关系的表。
关于多对任意(M2A)关系
- 通过一个M2A的字段,一个集合可以跟多种不同集合中的项关联。
- 举个例子,一篇文章,由多个段落组成,有的段落关联到正文表,有点段落关联到广告表,有的段落关联到插图表,而广告、插图是可以多篇文章共用的。
- M2A关系产生的交汇集合中,会多一个 collection 字段,用于存储这条记录映射到哪个表。
- 注意:没法从主表的数据模型中控制不同关联集合项如何显示,只能到每种集合中,设计其显示模板 (Display Template)。
|