接口测试平台代码实现16:吐槽功能后台实现+orm初识

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 好,我们接上节课。我们后台已经成功获取到了前端的 吐槽内容。那么我们本节课要做什么呢?

1. 新建一个数据表,用来存放吐槽内容,每条吐槽内容是一条记录

   2.在后台把用户的吐槽内容写入到表里


首先来学习一下django的 自带数据库sqlite3。

django 的自带数据库在哪呢?微信图片_20220616225801.png

上图的db.sqlite3 就是我们自带的。你看看自己项目是不是都有。

我们的前文提到的用户表 其实也在这个数据库内,它是个轻量级的mysql。

对于我们测试平台而言,最适合不过了。当然我们也可以在settings.py中设置连接其他真正的mysql数据库。



1. 通过传统的sql语句,我们连接上sqlite3数据库,然后用命令创建表,然后在后台函数里,比如这个吐槽内容写入的函数里,调用python的连接mysql的库函数,进行连接,输入用户名,密码,端口,地址,然后连接。然后上传sql语句,然后获取返回结果,最后断开连接。

优点:理解起来简单,不用学习新技术。可以自己封装成各种工厂函数。发挥空间大。

缺点:写起来麻烦,性能较低,风险大,如果因为疏忽/报错 导致连接没有及时断开,很容易造成线程池最大数超出。后期用起来麻烦。


2.通过orm映射 来操作数据库。就是我们不用在关心 连接数据库/断开 这种事,而是专注于参数字段本身。使用起来就是调用一个类而已,久而久之完全忘掉了对象是一个数据库这种事。

优点:使用方便/简单 稳定 快速 高效,orm会帮你处理连接问题,你完全不用在担心这个事了。

缺点:需要学习新技术,需要一定学习成本。


   在本教程呢?我们选择第二种,orm。简单来说:就3步

  1. 自己写一个类,当作一个数据库表
  2. orm会真的把这个类 变成一个数据库中真实的表
  3. 你操作这个类即可,orm会自动帮你去调用操作真实的数据库表

   4.我们就要好好学习如何操作这个类,这个类都有什么自己的方法呢?


首先让我们先写一个这个类,按照表的设计写,

打开models.py,它在微信图片_20220616225814.png

可以看到,空无一物:微信图片_20220616225819.png

让我们先写一个类,作为吐槽内容存储表。微信图片_20220616225824.png

表明我们最好有点特殊风格和标准,以免我们后续调用时分不清这是个orm映射类 还是普通的类,我就在前面写DB_。必须继承models.Model,这样django才会把它当作orm的映射类来真实的去操作sqlite3。这里我们起名教

   类下面我们要写什么呢?我们要写类变量 。类变量会被orm当作是表内的字段。那么吐槽内容都有些什么字段呢?

   1.id 任何表的id都不需要我们亲自写,都是自动生成并且自增 主键不唯一

   2.user 吐槽人的名字

   3.吐槽内容

   4.吐槽时间


好让我一个一个写:微信图片_20220616225830.png

    按照此格式,调用models下的各种方法定义字段。括号内就是约束条件。CharField 是字符串。DateTimeField是时间。max_length是最大允许长度,null=True ,是允许为Null, auto_now ,是自动填入时间无需我们手动填入了。关于这里其实有几十种不同的格式之多,我们可以百度orm 字段方法来获取其他的,不过我们目前讲的只用到来字符串最多。

   好接下来我们还要再给它 加一个 函数,叫做__str__

这个函数用来干啥的呢?原来是我们在admin后台 想要操作数据库,里面的具体记录列表 并不会像mysql的客户端一样,显示所有内容,是需要我们自定义的去设计要显示什么,理解起来就像 我们要在这个__str__函数内设计一个view视图。

   按照这个瓢画:微信图片_20220616230046.png

return self.text 就是创建一个视图,让我们之后在后台管理平台,这个表的内容时,先显示text 也就是吐槽内容,然后我们点进去就可以看到全部内容了。

+ str(self.ctime)就是它顺便在后面显示创建的时间。为啥不看用户名呢?因为这并不是我们所关心的,要想看可以到时候点进去边界页面看所有详细信息。

   现在我们写完了这个类,已经算是完成一半了。接下来,要想后台管理平台可以看的到这个吐槽表 并且可以控制,需要进行admin注册。

admin注册:

   打开admin.py:微信图片_20220616230052.png

一样空空如也:

微信图片_20220616230057.png

我们这里必须手动加上一句,从我的app里models 中导入所有类*微信图片_20220616230101.png

 然后我们进行注册 刚刚的吐槽表:微信图片_20220616230107.png

就上图这一句话:即可完成注册。admin.site.register() 是注册用的函数,里面写类名,注意是类名,并不是类本身,所以不要加()


   到这里我们 已经完成大半。接下来就是用命令,操作manage.py这个管家,让他去按照我刚刚写的这个类 去操作sqlite3数据库吧。要是已经有这个吐槽表就更新,没有就创建。


   这里需要用到的俩个命令,我们在前文已经用过了,就是在创建超级管理员的时候的俩条命令:同步表结构并生效:makemigrations 和 migrate微信图片_20220616230359.png

然后我们保持服务器运行状态,如果它因为之前报错已经停止了,我们就重启。确定重启没报错,我们就算成功的创建了这个吐槽表并成功用orm去映射完成。

   

   接下来我们打开views.py,去写这个pei() 吐槽函数:微信图片_20220616230404.png

   我们已经拿到了tucao_text,就是吐槽内容,接下来就是写入到表DB_tucao里。

   这里就要用到普通python类的方法了。

不过要在页面最上方 导入models.py中的所有类!

微信图片_20220616230410.png  

然后我们在pei函数中,写如下语句:

微信图片_20220616230415.png

DB_tucao是我们的类,它下面有个objects的方法,内部还有子方法create,create方法就是创建数据库记录,参数就是我们的字段内容,不过我们本来有4个字段:id user text ctime ,因为id为自动创建不用我们操心,ctime也是自动填入也不用我们操心,所以我们这里只写user 和 text即可。user就是吐槽的用户名,我前文提到过,所有请求的信息包括请求者的登陆用户名都存放在reqeust这个参数中,它里面的user.username就是请求的用户名了。我们拿出来当作吐槽表的用户名,tucao_text就是吐槽内容,赋值给text。为了不写错,我们可以打开models.py再确认一下有没有拼写类错误:

微信图片_20220616230421.png

确认完毕,没有问题。


最后给这个pei函数加个返回,别让他空手返回给前端,起码告诉前端页面,我写入成功了。

微信图片_20220616230746.png

这里之所以返回空字符串,是因为我们前端页面写死了,无论返回什么都弹窗说吐槽成功!


好让我们切换到浏览器或pycharm以外的其他软件。等待django自动重启,确认不报错。我们刷新主页,发一条吐槽试试看:

微信图片_20220616230750.png

显示没问题成功了。我们作为管理员,我们要经常去后台看看 用户的吐槽。所以我们点击左侧菜单的后台按钮,进入后台,看下后台现在长什么样了!

微信图片_20220616230756.png

可以发现,我们的app :Myapp 也展示了,它下面的表 D b_tucaos也出现了,这里不要纠结它显示的效果,它会默认把你表明首字母大写空格,最后加个s的。

我们点击Db_tucaos 表进入看看 我们刚刚吐槽的内容记录到底有木有!

微信图片_20220616230802.png

可以看到,成功的存入进来了。这里为啥会显示吐槽内容呢?那是因为我们models.py中的__str__函数写的是 return self.text+str(self.ctime) ,如果我们改成return self.id 那这里就显示id了,不过我们关心的是吐槽内容,更想一目了然的看到所有吐槽,所以我们返回self.text+str(self.ctime)。当我们真的需要进入看看是谁发的吐槽的时候,我们只需要点进去,看看user是谁即可。

   点进去的其实是这条记录的边界页面,我们可以在这里直接进行编辑,当然这没有意义。

微信图片_20220616230806.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
40 13
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
2月前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
150 1
|
2月前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
71 0
|
18天前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
70 11
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
70 3
|
3月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
83 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
4月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
280 7
Jmeter实现WebSocket协议的接口测试方法
|
4月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
289 3
快速上手|HTTP 接口功能自动化测试