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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
敏捷开发 安全 测试技术
软件测试的艺术:从代码到信心的旅程
在数字时代的浪潮中,软件成为我们日常生活和工作不可或缺的一部分。然而,高质量的软件背后隐藏着一群默默无闻的英雄——软件测试工程师。本文将带你一探究竟,软件测试不仅仅是找出错误的技术活动,它更是一门确保产品质量、提升用户信心的艺术。我们将从测试的重要性出发,探索不同的测试类型,深入理解测试用例的设计,并讨论如何通过持续集成和自动化测试来提高效率。无论你是软件开发者还是对软件质量感兴趣的读者,这篇文章都将为你提供新的视角和深入的洞见。
|
10天前
|
人工智能 API Python
Openai python调用gpt测试代码
这篇文章提供了使用OpenAI的Python库调用GPT-4模型进行聊天的测试代码示例,包括如何设置API密钥、发送消息并接收AI回复。
|
7天前
|
测试技术 C# 开发者
“代码守护者:详解WPF开发中的单元测试策略与实践——从选择测试框架到编写模拟对象,全方位保障你的应用程序质量”
【8月更文挑战第31天】单元测试是确保软件质量的关键实践,尤其在复杂的WPF应用中更为重要。通过为每个小模块编写独立测试用例,可以验证代码的功能正确性并在早期发现错误。本文将介绍如何在WPF项目中引入单元测试,并通过具体示例演示其实施过程。首先选择合适的测试框架如NUnit或xUnit.net,并利用Moq模拟框架隔离外部依赖。接着,通过一个简单的WPF应用程序示例,展示如何模拟`IUserRepository`接口并验证`MainViewModel`加载用户数据的正确性。这有助于确保代码质量和未来的重构与扩展。
14 0
|
7天前
|
数据库 测试技术 开发者
Play Framework的测试魔法:让代码在舞台上翩翩起舞,确保应用质量的幕后英雄!
【8月更文挑战第31天】Play Framework不仅以其高效开发与部署流程著称,还内置了强大的测试工具,提供全面的测试支持,确保应用高质量和稳定性。本文将详细介绍如何在Play Framework中进行单元测试和集成测试,涵盖`WithApplication`、`WithServer`及`WithDatabase`等类的使用方法,并通过示例代码手把手教你如何利用Play的测试框架。无论是单元测试、集成测试还是数据库操作测试,Play Framework均能轻松应对,助你提升应用质量和开发效率。
12 0
|
7天前
|
中间件 测试技术 持续交付
FastAPI测试秘籍:如何通过细致的测试策略确保你的代码在真实世界的挑战面前保持正确和稳定?
【8月更文挑战第31天】在软件开发中,测试至关重要,尤其在动态语言如Python中。FastAPI不仅简化了Web应用开发,还提供了强大的测试工具。通过`unittest`框架和Starlette测试客户端,开发者可以轻松编写和执行测试用例,确保每个功能按预期工作。本文将详细介绍如何设置测试环境、编写基础和高级测试用例,并探讨中间件和依赖项测试。此外,还将介绍如何在持续集成环境中自动化测试,确保代码质量和稳定性。利用FastAPI的测试工具,你可以构建出高效可靠的Web应用。
|
7天前
|
前端开发 IDE 测试技术
自动化测试中的代码魔法:使用Python和Selenium框架
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是一艘能够带领团队穿越波涛的帆船。本文将引导读者了解如何利用Python语言结合Selenium框架,编写简洁而强大的自动化测试脚本。我们将从搭建开发环境开始,逐步深入到实际案例,最后通过一个简单示例展示如何实现端到端的自动化测试流程。文章不仅提供实用的代码片段,还旨在激发读者对于软件测试深层次思考的热情。
|
9天前
|
Web App开发 敏捷开发 测试技术
自动化测试之美:使用Selenium WebDriver进行网页功能验证
【8月更文挑战第29天】在数字时代,软件质量是企业竞争力的关键。本文将深入探讨如何通过Selenium WebDriver实现自动化测试,确保网页应用的可靠性和性能。我们将从基础设置到编写测试用例,逐步引导读者掌握这一强大的测试工具,同时分享实战经验,让测试不再是开发的负担,而是质量保证的利器。
|
9天前
|
测试技术
一款功能完善的智能匹配1V1视频聊天App应该通过的测试CASE
文章列举了一系列针对1V1视频聊天App的测试用例,包括UI样式、权限请求、登录流程、匹配逻辑、消息处理、充值功能等多个方面的测试点,并标注了每个测试用例的执行状态,如通过(PASS)、失败(FAIL)或需要进一步处理(延期修改、待定、方案再定等)。
20 0
|
11天前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
14天前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
下一篇
DDNS