大道至简,新一代企业应用无栈开发

平台之上,一种语言,可视化、脚本化、全端一体化开发

容器通用接口

容器类对象承担着管理功能

docutils document without title

容器类对象承担着对包含内容的管理角色。文件夹、表单库、应用容器、工作台等都属于容器类对象。

所有这些 Container 类型的对象都存在一组公共接口,下面用 container 指代容器对象,说明器接口。

1   包含的内容

容器类对象包括:站点根、文件夹、表单库、应用容器等。

1.1   访问对象 (dict接口)

容器提供类似dict的访问方法:

root.keys()   # root是全局可访问的对象,返回: ['container1', 'container2']
root.values()
root.items()
container1 = root['container1']

删除某个包含的内容:

del root['container2']  # 整个容器删除
del container1['item1']

1.2   遍历子树 iterate_children

遍历整个子树的内容:

for obj in container.iterate_children():
    print obj.name

1.3   容器中的名字 name

任何对象在容器中有唯一的名字 name

container1.name   # 'container1'
container2.name   # 'container2'
container1['item1'].name        # 'item1'

1.4   选择一个空余的名字 choose_name

注意部署的子应用名字不能重复,否则会报告 KeyError 错误,可以通过下面的方法选择一个名字:

name = container.choose_name('plans') # 如果重复,则返回 plans-1 / plans-2

1.5   找到所在容器 parent

任何对象可得到其所在的容器 parent

container1.parent  # root
item1.parent       # container1
sub_container1.parent # container1

1.6   找到全部容器 list_parents

也可以找到所有的上级容器:

item.list_prarents()

1.7   对包含内容排序

包括根据字段排序,以及手动排序2种。

1.7.1   字段排序

字段排序信息存放在 sort_by 的设置字段中:

sort_info = container.settings.get('sort_by', default={'sort':'modified', 'reverse':True, inherted=True})

其中:

  • sort : 排序的字段
  • reverse : 是否倒叙排序

1.7.2   手动排序 set_order

容器类对象都支持对包含内容进行排序(注意:如果容器包含的内容数量大,为提高性能,可对部分内容进行排序):

root.set_order(('container2', 'container1'))
container.ordered_keys()  # ('container2', 'container1')
folder.ordered_keys()

对于文件夹,默认添加文件会自动进入排序,但是只能排序到 container.order_limit . 对于表单库,这个参数默认为0,因此不会自动排序。如果要支持,可以设置:

container.order_limit = 1000

1.8   移动 move_to

可以对内容进行移动、改名:

item1.move_to(target, new_name=None, async_index=False)
  • target:移动的目标位置,如果target就是 item.parent,那就是改名操作
  • new_name:[可选]新的名字
  • async_index:移动之后,包含的文件需要全部重建索引,默认异步进行

1.9   复制 copy_to

将obj复制到target:

obj.copy_to(target, new_name=None, remove_permissions=True, include_attachments=True) # 复制

其中:

  • target: 复制的目标位置
  • new_name:新的名字
  • remove_permissoin: 是否去除授权信息
  • include_attachments:是否复制文件的附件

另外,复制的时候,不会复制历史版本

1.10   可以添加的内容 allowed_children

每个容器只能限制添加特定类型的对象,可以通过下面的方法进行检查(返回集合类型):

container.allowed_children

1.11   临时的占位子对象 temp_child

生成应该临时的child,可用于新建和查询表单的渲染:

child = container.temp_child()

其中:

- child.name is ''
- child.parent is container

2   容量配额 container.quota

2.1   设置容量限额set_size_limit

container.quota.set_size_limit(1024) //单位为M,当前设置的容量控制为1G

清除容量限额:

container.quota.set_size_limit(None)

2.2   得到容量限额 get_size_limit

container.quota.get_size_limit()

2.3   得到容量大小 get_total_size

container.quota.get_total_size()

2.4   重置总容量 reset_total_size

有时候总容量不准确,可以重置:

container.quota.reset_total_size()

3   分组清单 container.lists

分组可用于分类的定义。

3.1   分组管理

3.1.1   新建分组 new

container.lists.new(name, title, description)

3.1.2   管理分组 dict接口

删除分组

container.lists.remove(name)

查看全分组:

container.lists.keys()
container.lists.values()
container.lists.items()

得到一个分组:

the_list = container.lists[name]

3.1.3   调整分组顺序 move_to

container.lists.move_to(name, index)

3.2   分组列表管理

每个分组可以关联暂时一组内容

3.2.1   添加一个内容 append

the_list.append(doc2)

3.2.2   删除应该内容 remove

the_list.remove(doc2)

3.2.3   插入一个内容 insert

插入到指定位置:

the_list.insert(1, doc2)

3.2.4   移动一个内容 move

移动位置:

the_list.move(1, 2)

3.2.5   查看全部内容 list

返回对象:

objs = this_list.list()

4   标签组 container.tag_groups

标签组实现了多维度、多层次、可管理的分类管理.

4.1   读取标签组设置 list_items

标签组在容器(文件夹、表单库、应用容器)上设置,可得到标签组设置:

container.tag_groups.list_items()

输出为:

[{'group': '按产品',
  'required':true,
  'single':true,
  'tags': [{'name':'wps'},
           {'name':'游戏'},
           {'name':'天下'},
           {'name':'传奇'},
           {'name':'毒霸'}
 ]},

 {'group': '按部门'
  'required':true,
  'single':true,
  'tags': [{'name':'研发',
            'children':[{'name':'产品'},
                        {'name':'测试'},
                        {'name':'软件'},
                        {'name':'硬件',
                         'children':[{'name':'电子'},
                                     {'name':'机械'}]
                        },
                       ]
           },
           {'name':'市场'},
          ]
 }]

4.2   导出为文本 export_text

也可以导出为文本形式的标签组,用于编辑:

container.tag_groups.export_text()

4.3   导入文本 import_text

或者导入:

container.tag_groups.import_text(text)