测试平台系列(53) 数据库表接口适配前端页面(上)

简介: 数据库表接口适配前端页面(上)

大家好,我是米洛,求三连!


回顾


上一篇我们费了点功夫,将异步代码改回了同步代码,但也不能说一无所获,我们编写好了在线运行sql语句的功能,并返回了想要的字段->字段值的列表数据。

今天我们就来完善一下页面部分。

本文因为比较复杂而分为2节,有一定的难度,博主我也会尽量讲清楚,大家还需要多理解。

怎么查询到数据表和具体字段呢


这个功能我认为是一个比较大的亮点,一般来说我们在线执行测试,就拿我以前做的平台举例,都只是为了能让用户在线执行下SQL,所以对于数据表,字段等的展示都是放弃的。

今天呢,我们就来整一整这块的功能。


通过Engine获取表数据


我们都知道,可以通过执行show tables来查看表信息,但是我们不但要信息,还要字段,那该怎么做呢?

而且我们还需要把所有数据库配置都拉出哦,没事,看我操作就行了!

在sqlalchemy里面,可以用engine.table_names()拿到具体的表信息,而且是带上字段的,再对比一下我们的参考项目,我们就能明确到自己的方向了。

22.jpg

这就是我们的方向,也是老师


后端需要做什么


我们既然已经看到了大概想要实现的UI,那么我们就去ant.design官网找对应的树组件

23.jpg

可以看到,这种组件基本符合我们的要求

那么我们的数据该怎么准备呢?在前端不方便处理的时候,我们后端可以尽量返回前端使用舒服的数据。先看看组件需要的数据:

const treeData = [
  {
    title: 'parent 0',
    key: '0-0',
    children: [
      { title: 'leaf 0-0', key: '0-0-0', isLeaf: true },
      { title: 'leaf 0-1', key: '0-0-1', isLeaf: true },
    ],
  },
  {
    title: 'parent 1',
    key: '0-1',
    children: [
      { title: 'leaf 1-0', key: '0-1-0', isLeaf: true },
      { title: 'leaf 1-1', key: '0-1-1', isLeaf: true },
    ],
  },
];

我们一步一步来分析:

  • 顶层
    顶层是一个列表,列表里面是一个dict(以Python数据结构为例)。
  • 列表元素
    列表元素又包括: title(展示名称), key(唯一标识,为了方便选中的时候知道选到了哪个元素,和css中的id接近的概念),children(是否有孩子,孩子也是一样的列表)。
    如果一个数据嵌套比较深,那么可能会在children里面有很多层children, 接下来我们就要处理这块。


构思出前端需要的数据


其实这个很像我们的文件夹的感觉,我这边列个目录给大家看看。

24.jpg

image

fat是环境,最大的分类,接着pity是数据库名,pity下面还有pity_testcase(数据表),数据表下面还有id,name等字段。

那么如果我们是这些数据,要给前端是怎么展示的呢?按照他们的规则:

const treeData = [
{
  title: "fat",
  key: "env_fat",
  children: [
      {
          "title": "pity",
          "key": "database_pity",
          "children": [
              {
                  "title": "pity_testcase",
                  key: "table_pity_testcase",
                  children: [
                      {
                          "title": "id",
                          "key": "column_id"
                          // 这里就没有children了,因为字段是最后一级了
                      },
                      {
                          "title": "name",
                          "key": "column_name"
                      },
                      {
                          "title": "create_time",
                          "key": "column_create_time"
                      }
                  ]
              }
          ]
      }
  ]
}
]

可以看到,数据是这样一层一层的,可谓十分复杂!大家看到可能会觉得,要我手动写还行,要我根据数据库的数据生成,那我还是回去学习了树之后再来吧!

其实duck不必,我们只要理清楚思路就行。


确定唯一key


大家有没有发现,虽然fat这种env是有id的,但是它也可能和其他表的id串了,所以我们是不能以id为key的。但如果我们加上表名的前缀,比如env_1,这样是不是不会串了呢?

那如果有的数据没有id呢?比如数据表的字段数据,其实没事,我们只要带上它爸爸的id即可,比如数据表字段虽然没有id,但是数据表的爸爸有,即我们的pity_database_info表,它是有唯一id的,所以我们带上他父亲的父亲的id即可。


各个击破


  • 环境层(第一层)
    首先我们需要获取到当前有多少环境,并拿到环境的具体id->环境名称的对应关系,因为我们的pity_database_info存放的env
    主键,而不是对应的环境名。
    假设我们拿到了环境列表,那我们可以造出第一层数据, 这里用伪代码展示:

envList = [{"id": 1, "name": fat}, {"id": 2, "name": "uat"}]
result = []
for env in envList:
    result.append({
        title: env.get("name"),
        key: f"env_{env.get("id")}",
        children: []
    })

这样我们就完成了最外层数据的编写,result目前的结果:

[
    {
        "title": "fat",
        "key": "env_1",
        children: []
    },
    {
        "title": "uat",
        "key": "env_2",
        children: []
    }
]

可以看到,雏形已经出来了。

我们去放到树里面看看效果:

25.jpg

可以看到已经有2个目录了


图中显示了2个目录了,但是因为没有children的缘故,所以目录展开后是没有内容的~

剩下的就交给下一节来解决了!!!




相关文章
|
12天前
|
前端开发 数据安全/隐私保护
.自定义认证前端页面
.自定义认证前端页面
6 1
.自定义认证前端页面
|
4月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
|
7天前
|
前端开发 安全 JavaScript
在阿里云快速启动Appsmith搭建前端页面
本文介绍了Appsmith的基本信息,并通过阿里云计算巢完成了Appsmith的快速部署,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解底层技术,只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Appsmith,非技术同学也能轻松搞定。
|
11天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
16天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
32 2
|
29天前
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
37 18
|
17天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
27 2
|
2月前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
82 2
前端JS读取文件内容并展示到页面上
|
1月前
|
测试技术 数据安全/隐私保护
北邮人论坛登录页面测试用例
北邮人论坛登录页面测试用例
35 1
|
1月前
|
前端开发 数据安全/隐私保护
angular前端基本页面验证
angular前端基本页面验证
29 1