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

3.7 KiB
Raw Permalink Blame History

模块开发规范

模块包括完成特定功能的前后台代码,符合ahserver+sqlor+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数据库操作规范

数据库表设计

数据库表设计规范

数据表的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文件是一个受控的脚本

脚本中可以直接使用的变量,请看脚本中可以使用的变量列表

工程文件

pyproject.toml文件

python模块打包控制文件

README.md文件

模块说明文件