Trump 设计文档
原则
DRY
依赖关系
配置
用户表: _user
地区表: area
外部接口
查询(Query)
列表
/<table|view>
单项
/<table|view>/<id>
查询条件
作为参数传入,和字段以 - 分隔
相等
field=value
不等
filed-ne=value
大于
filed-gt=value
小于
filed-lt=value
在….之中
field-in=value1,value2..
包含
filed-contains=value
区间
field-range=min_value|max_value
大于或小于其中一个值为空,不可全为空
分页及排序
page=?&pagesize=?
增加(Add)
以POST传输方式传入JSON块,对指定表实现单条,批量插入
语法:
/<tablename>
单条插入JSON:
{"field":"values",...}##以逗号分割可传入多个表字段
批量插入JSON:
[
{"field1":"values1","field2":"values2",...},
##以逗号结尾可传入多条数据
{"field1":"values1","field2":"values2",...}
]
删除(Delete)
以DELETE请求,用id对指定表实现单条数据删除
语法:
/<tablename>/<id>
修改(Modify)
以PUT传输方式传入json块,用id对指定表实现数据修改
语法:
/<tablename>/<id>
修改JSON:
{"field":"values",...}##以逗号分割可传入多个表字段
内部接口
查询(Query)
多条查询(Items)
get_items(db, tablename, args={}, roles=['DEFAULT'],with_total=False, pager=False)
@param:
##db:传入已注册数据库链接(app.pool)
##tablename:传入表名
##args: 传入查询条件 >,<,!=.....
##roles:传入当前登录用户角色
##with_total:传入是否统计条数
##pager:传入是否进行分页
@return:list[]
单条查询(Item)
get_item(db, tablename, oid, roles=[], column='id')
@param:
##db:传入已注册数据库链接池app.pool
##tablename:传入表名
##oid:传入表id
##roles:传入当前登录用户角色
##column:指定条件字段
增加(Add)
单条插入,批量插入
create_item(db, tablename, data, column='id', lock_table=False)
@param:
##db:传入已注册数据库链接
##tablename:传入表名
##data:传入插入数据集合
##column:传入返回值(插入成功后返回该列值)
##lock_table:是否进行锁表操作
删除(Delete)
delete_item(db, tablename, oid)
@param:
##db:传入已注册数据库链接
##tablename:传入表名
##oid:传入表id
修改(Modify)
modify_item(db, tablename, oid, data)
@param
##db:传入已注册数据库链接
##tablename:传入表名
##oid:传入表id
##data:传入修改数据
用户
提供多种登录选项:cookie/session,header
用户信息可通过 request.user
获取
用户信息包括:是否登录,用户角色
地区
地区由一个32位整数表示
0000|0000000|000000|00000000|0000000
国家 省 市 区 街道
其中中国为1
通过位运算可以得到当前行政区级别和从属关系
前处理,后处理
在 pre_process 和 post_process 目录里,以接口命名。
前处理[pre_process]
处理请求URL,对参数进行处理
后处理[post_process]
在返回数据之前对数据进行处理
通过API建表
设置
语法:
bp.settings = {
'NO_PAGER_API': ['TABLENAME','.....'],
'ANONYMOUS_API': ['TABLENAME','....'],
'ACL_MODE': 'WHITE_LIST/BLACK_LIST',
'ACL': {
"TABLENAME": {
"LS/GET/PUT/POST/...": {"ROLENAME","..."}
},
框架内默认对数据进行分页(每页10条记录),可通过
[NO_PAGER_API]
指定表名取消分页
'NO_PAGER_API': ['TABLENAME'],
### [ANONYMOUS_API]
表操作默认登录,此字段指定表名免登录,
黑白名单对该字段指定表名失效,
该字段默认为空,为空时,所有表权限开放,黑白名单失效
'ANONYMOUS_API': ['TABLENAME'],
[ACL_MODE]
指定黑白名单模式
BLACK_LIST(黑名单模式):无法操作ACL内指定表,但可操作其他表
WHITE_LIST(白名单模式):可以操作ACL内指定表,但不可操作其他表
'ACL_MODE': 'BLACK_LIST/WHITE_LIST',
'ACL': {
'TABLE': {
"LS/GET/PUT/POST/...":{'ROLENAME','....'},
},
### [ACL]
指定表CRUD操作权限,配合黑白名单使用
'ACL': {
'TABLE': {
"LS/GET/PUT/POST/...":{'ROLENAME','....'},
##以逗号分割可指定多个角色
},
##以逗号分割可指定多个表名`
生命周期
执行的流程:请求-前处理-数据操作-后处理-返回数据
![流程图](https://img-blog.csdn.net/20170412131443259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFueWFqaWFv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
请求
ip:端口号/api/v1/接口名(表名)
pre_process
/<table|alias>.py定义的process方法
pre_process
/<table|view|alias>.py定义的ls/put/post/delete方法
注:视图优先,如果是表名,对其进行处理,tables中是所有的视图,
先去视图中进行查询,如果不在tables中,返回404
sync def ls(request, name):
name = name+'_view'
CRUD
get_item/get_items/create_item/modify_item/delete_item
./post_process
/<table|alias>.py,定义的ls/put/post/delete方法
./post_process
/<table|view|alias>.py,定义的process方法
注:上面的四步都可以直接return到此,此方法不能直接return,
若需要修改返回数据可直接修改response对象
始终都会被执行