接口测试平台代码实现13:注册功能

简介: 上节我们实现了登陆功能,但是可惜用户表中没数据。所以这节我们讲如何注册用户。

 还记得我们之前在登陆页面 做的那个 注册账号的超链接么?微信图片_20220616133338.png

我们现在要想想,用户点击注册账号后,要实现个什么效果?

有 以下几种设计:

  1. 切换到另一个页面,一个注册页面,里面有用户名密码确认密码 注册按钮。
  2. 直接使用用户在登陆界面输入的用户名/密码,进入后台完成注册,给用户弹窗提示注册成功!
  3. 弹出一个弹层,上面有用户名/密码输入框和注册按钮。

   4.弹出一个弹窗,上面显示“公司内部平台,注册账号需要联系xxx” 然后等别人联系你了,再由你去数据库后台去创建这个用户。


   我们本章节就按照最简单的方式来,毕竟我们的重点是之后的接口测试模块,并不是用户管理模块。所以我们选择第2种 ,简单粗暴。

   好,打开login.html,找到这个注册按钮,发现它是一个a标签,a标签不但在href属性中可以写一个超链接,也可以在href中写一个js函数。

   这里因为我们要传递用户名/密码 作为数据,所以href属性要写一个js函数,就取名为:register()吧。具体写法:javascript:函数名() 微信图片_20220616133354.png


然后在下面的已有的script标签内,在login()函数上增加一个register()函数微信图片_20220616133400.png

这个注册函数的 功能 和登陆函数,其实大同小异。都是把用户名/密码传入给后台。所以格式基本一致,你直接复制粘贴,然后改改就可以:微信图片_20220616133404.png这里我们接收到返回值后不再 直接弹出写死的文案了,而是选择弹出请求返回值,具体显示什么由后台决定。而后台的返回值就是ret。所以我们alert(ret) 。

为什么要这么做呢?因为用户注册最少有两种结果:


  1. 注册成功
  2. 用户已存在注册失败
  3. 其他问题,如密码过短等等违反你自己定义的规则。

  所以为了后续方便我们增加规则等这样做就会很方便。

然后我们去urls.py中 写好这个注册的映射:微信图片_20220616133411.png

然后去views.py中构建好这个register_action()函数微信图片_20220616133644.png

这里可以看到,我们依然是先获取到了 前端给的用户名/密码。

然后从这个django.contrib/auth.models 库里倒入里User方法。(其实User是orm方式操作用户表的实例)

然后我们直接用User.objects.create_user方法生成一个用户,参数为用户名和密码。然后保存这个生成的用户 就是注册成功了。


   但是如果用户表中已存在这个用户名,那么,这个生成语句就会报错。所以我们用try来捕获这个异常,如果发送错误那就是“用户已经存在”,如实给用户返回这句话。如果没问题,那么就返回 注册成功。


   然后我们切换回浏览器,确保服务没有因为报错而中止。如果报错中止,就是因我们先写urls.py后,没有来得及写后台对应函数就切换了pycharm,导致django热重起,然后发现没有函数就报错停止了。我们现在写好了,那就直接重启就好了,如果过程中按照教程出现其他报错,请留言即可我会耐心解答。

   现在我们刷新页面来测试,先登陆一个账号:

用户名 测试开发干货  密码123。

   1.点击登陆,提示用户名密码错误。因为这时候还不存在这个账号微信图片_20220616133650.png

2.点击注册账号,提示注册成功

微信图片_20220616133657.png

3.再点击登陆按钮!

重点来了!仍然报错哦!微信图片_20220616133702.png

为什么会发生这种事呢?

实际上 账号已经注册成功,我们的登陆函数也走到了登陆成功的分支。

我们明明写好了 要跳转到/home/ ,但是前端没有跳转,还给了个错误提示。

这里要引入一个新知识点,就是我们前端 想给后端 传数据,发送请求,如果不是表单提交,或者超链接。只用我们的异步接口请求(就是我们前面用的$.get("url",{参数}{返回动作函数}))  的话,那么后端无论怎么写重定向语句,都是徒劳的,前端并不会直接跳转去/home/。

   但是我们又不想去大改前端的登陆架构,用什么办法弥补呢?

答案很简单,后端可以返回诸如 True/False  0/1  成功/失败  这种字符串。因为前端的js函数里接受到ret就是这个后端返回的字符串。所以前端js可以根据这个ret来作出不同的处理,比如跳转到/home/。这就像雨化田台词 :你东厂办不了的事,禀告我们西厂,我们西厂来办。你们管的了的我们要管,管不了的我也要管,先斩后奏,皇权特许,这!就是西厂,够不够清楚?微信图片_20220616133952.png

所以赶在这次就会,就要训练好我们的应急处理能力,将来线上出现bug,我们要以最小代价紧急修复的 次数不会少。你不那每次都完全重构吧?所以这里给大家埋了一个坑,提升一下这方面的经验。

   那么现在我们修改后端login()函数,让他别操心的重定向了,直接就返回 成功 还是 失败 就行,其余的事交给前端js微信图片_20220616134004.png

然后回到前端js,改动如图:微信图片_20220616134010.png

其实就是写了一个if判断,如果ret是成功俩个字,。那么就用固定的跳转语句跳到/home/  如果不是成功俩个字,那么再提示 报错文案。

   现在我们去试登陆一下:用户名:测试开发干货 密码:123

点击登陆按钮,发现登陆成功,成功进入了home.html !微信图片_20220616134021.png

好了。到此我们的注册功能算是开发完成。

   然后再补充一点:关于登陆页面的密码 输入框:

我们之前 是能显示出来具体密码的:

微信图片_20220616134209.png

那是因我们input属性 就是个普通输入框,不能因我咱们给他起名密码,浏览器就智能的把它当密码输入框了。

   要想显示*****,只需要给input标签 的type属性 从text改成password即可微信图片_20220616134215.png

然后我们打开浏览器 再进入到登陆页面看看:127.0.0.1:8000/login/微信图片_20220616134225.png

可以看到全都已经成功隐藏了。

   最后有多疑的同学提问了,那么其他用户为啥一定要 先经过login.html 登陆成功 再进入home.html主页呢?她直接访问:ip:8000/home/ 不可以么?

   答案是:目前可以直接访问,不信你不登陆试试看,一样可以。那是因我们进入home页面的函数 home()  并没有强制要求 检查登陆状态。微信图片_20220616134236.png

所以django是默认放行的。那么要如何避免这种钻空子的状况呢?

答案很简单,首先我们要给home()函数 加上django自带的登陆态检查装饰符login_required ! 导入后,直接加在home函数头上即可!微信图片_20220616134437.png微信图片_20220616134442.png

现在你再试试直接浏览器访问:127.0.0.1:8000/home/ 看看什么效果?微信图片_20220616134447.png

就会报错 让你进不去!

然后我们再 去修改login函数中成功登陆的分支,给他加上:

如果用户一但登陆成功,就调用django的真正登陆函数auth.login。然后顺便把这个登陆状态也就是成功的用户名当作session写进用户的浏览器内,之后用户就可以成功进入各个页面了。微信图片_20220616134546.png

现在我们再来试试看:

  1. 非登陆状态 无法直接进入/home/ , 报错
  2. 登陆状态进入/home/  成功进入home.html
  3. 先进入/login/ ,登陆成功,发现成功跳转到home.html


上面的测试结果,还有一点需要完善。就是当用户非登陆状态,直接进入/home/时候 不应该报错,而是应该跳转到login.html页面让其先登陆。所以我们继续改动俩个地方:

  1. welcome函数  也加上 登陆态检查装饰符,之后我们几乎每个重要页面都要加上这个装饰符
    微信图片_20220616134552.png

 2.urls.py中加入非登陆状态 自动跳到登陆页面的映射微信图片_20220616134557.png

好了,等待django重启,然后刷新页面我们再进行上述测试!

就会发现,当用户非登陆状态时,直接打开/home/ 或者/welcome/ 的时候,都会先跳到/login/ 页面上。登陆成功就可以继续使用,失败则永远停留在login.html中,一点空子都不让钻。

    好了,今天分享到这里了。把这个链接 发送给你的同事,让他们试着创建账号 登陆吧?

   http://你电脑的ip:8000/home/

   

相关文章
|
18天前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
28 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
20天前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
17天前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
115 56
|
18天前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
61 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
12天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
28 2
|
18天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
30 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
26天前
|
测试技术
Appscan手工探索、手工测试功能实战
Appscan手工探索、手工测试功能实战
|
27天前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
35 0
|
27天前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
15 0
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
192 7
Jmeter实现WebSocket协议的接口测试方法