aicode/kdb/module.md
2026-01-29 16:05:25 +08:00

104 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模块开发规范
模块包括完成特定功能的前后台代码,符合[ahserver](https://git.opencomputing.cn/yumoqing/ahserver)+[sqlor](https://git.opencomputing.cn/yumoqing/sqlor)+[bricks](https://git.opencomputing.cn/yumoqing/bricks)技术路线的B/S架构
假设需开发的模块名为“mymodule”
## 模块目录结构
```
+--mymodule目录 # 存放模块的主要逻辑py代码
+--init.py # 模块初始化脚本需要定义一个load_mymodule()函数,此函>数需要将在ui和dspy文件中用到的函数通过ServerEnv实例传过去
+--__init__.py #python模块所需
|
| +--其他源码.py # 模块中需要的其他py源码文件
+--wwwroot目录 # 前后台脚本,文件以.ui和.dspy结束ui文件是bricks控件的json文件支持jinja2模板dspy是ahserver支持的受限python脚本可以按照需要设置下级目录
+--models目录 # 模块使用的数据表以“表名.json”为文件名存放在此目录中
+--json目录 # CRUD描述文件以“表名或别名.json”为文件名
+--pyproject.toml文件 # pip打包文件, 其中项目名字与mymodule相同
+--README.md文件 # 模块自说明文件
+--init目录 # 模块初始化目录
+--data.json # 初始化数据
+--script.py # 初始化脚本
```
## 核心代码
模块的核心代码保存在mymodule目录下init.py是每个模块都需要的, init.py中定义一个load_`mymodule`函数如pricing模块为load_pricing()accounting模块为load_accounting()在此模块中做初始化模块并把模块的核心代码通过ServerEnv()发布给应用的脚本使用, 以下为例子
```
from ahserver.serverenv import ServerEnv
from appPublic.worker import awaitify
from .x import a, b, c # ab, c是协程
from .y import x, y # x, y是普通函数
def load_mymodule(): # mymodule需替换为实际的模块名字
env = ServerEnv()
env.a = a # 脚本中用"a" 调用"a"
env.b = b # 脚本中用"b"调用"b"
env.cc = c # 脚本中用"cc"调用"c"
env.y = awaitify(y) # 将函数包装为协程
env.x = awaitify(x) # 将函数包装为协程
```
数据库表操作需要符合[sqlor数据库操作规范](sqlor.md)
## 数据库表设计
[数据库表设计规范](table.md)
## 数据表的CRUD
为数据表定义crud功能 每个表至少一个
## 初始化数据
init/data.json
文件保存需要初始化的数据,格式如下
{
"table1":[
{
"field1":"value1",
...
},
...
{
"field1":"valuen",
...
}
]
}
### 模块中使用的编码
模块中如果用到编码编码需保存在appbase模块的appcodes表和appcodes_kv两个表中
appcodes(编码表)有如下字段:
[
"id" # str 32 主键,可设置为数据表字段名称
"name" # 编码名称
"hierarchy_flg", # str 1, '0':单级编码“1”:多级编码
]
appcodes_kv编码键值表字段如下
[
"id", # str, 32,主键,唯一值
"parentid" # str, 32, 一级编码为appcodes表的id, 否则为上级编码键值记录的id
“k" # str 32, 编码值
“v” “ str 255,编码显示文本
]
## 前后台脚本
本模块用到的脚本以及资源都放在这个目录下,以.ui和.dspy后缀结束用.ui文件遵守jinja2规范, 而.dspy文件是一个受控的脚本
脚本中可以直接使用的变量,请看[脚本中可以使用的变量列表](variable.md)
## 工程文件
### pyproject.toml文件
python模块打包控制文件
### README.md文件
模块说明文件