前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测试开发技能】Django中验证码的实现

【测试开发技能】Django中验证码的实现

作者头像
周辰晨
发布2020-01-20 16:14:16
1.4K0
发布2020-01-20 16:14:16
举报

前言

我们在做UI自动化的时候,验证码的识别绝对是让人比较头痛的问题之一,因为涉及到图像处理,模式识别等领域方面的知识,所以到目前为止也没有一个可以打包票说可以百分之百识别验证码的解决方案。本篇不会去教大家采取哪种方式去识别验证码,而是给大家介绍一下在django中怎么实现验证码这个功能的。

背景

在实际应用中,很多业务场景如 登录,注册,发送短信验证码 等需要大家输入验证码,其主要目的是强制人机交互来抵御自动化攻击。本篇以注册功能为例,讲解django中是如何实现验证码功能的。

步骤

  1. 安装第三方 django-simple-captcha 包 pip isntall django-simple-captcha==0.4.6
  2. 在settings.py 文件中的 INSTALLED_APPS 中添加该app
  1. 同步数据库 利用 makemigrationsmigrate 同步数据库,同步完成后,数据库中增加captcha_captchastore 这张表
  2. forms.py文件中添加验证码字段 forms.py文件是对post请求所提交的表单数据做预处理(判断,可以减轻views.py中的工作量),我们的注册页面除了验证码之外,还有邮箱和密码两个字段,代码如下:
代码语言:javascript
复制

  1. views.py 文件中的实现 注意在get方法中,我们要将上一步的form表单实例化,传递给前端html 文件 ,看具体的代码实现:
  1. 在前端html页面中验证码块做如下修改
代码语言:javascript
复制

验证码判断实现原理

经过上面6步操作,我们就可以实现了注册页面时的验证码功能,我们运行程序,在注册页面,验证码块检查页面元素,会发现如下的html代码

代码语言:javascript
复制
<input id="id_captcha_0" name="captcha_0" type="hidden" value="2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011">

这表明在注册 form 表单中还有个type=hidden 的input 元素,会随着post请求一起发送到服务器端,我们再看captcha_captchastore 这张表,其中 有条记录的 hashkey 的值等于 隐藏域的value :2f3f82e5f7a054bf5caa93b9b0bb6cc308fb7011 ,且对应的 response 字段恰好就是页面上显示验证码的值。 这下我们就明白了其判断逻辑是如何实现的: 我们提交注册页面表单的同时除了提交邮邮箱,密码,验证码,之外,还会有一个隐藏域,他作为 hashkey 会到 captcha_captchastore 这表中去查找对应的验证码,如果和我们传入的验证码一样,则验证通过,反之,和验证失败。

好了,django中如何实现验证码功能就介绍到这里,有兴趣的同学可以实践下!代码是截图,如需要复制,可联系微信号cctester

一键关注微信公众号,获取更多资讯

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 背景
  • 步骤
  • 验证码判断实现原理
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档