验证码

关注公众号“轻松学编程”了解更多。

1、作用
  • 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力。
  • 验证码需要使用绘图 Pillow
    • pip3 install Pillow
    • 核心API
      • Image

        • 需要模式
        • 尺寸
        • 背景色
      • ImageDraw
        • 绑定画布
        • 模式
        • 封装了绘制的API
          • text
          • point
          • line
          • arch
      • ImageFont
        • 手动指定字体
2、业务流程
  • 绘制验证码图片

    background = (10,20,30)   RGB颜色
    初始化画布
    image = Image.new(‘RGB’,(100,50),background) 获取画布中画笔对象
    draw = ImageDraw.Draw(image) 绘制验证码,随机四个
    font = ImageFont.truetype(‘path’,size)
    fontcolor = (20,40,60)
    draw.text((x,y),’R’,font,fontcolor)
  • 返回验证码内容

    # 删除画笔
    del draw #保存图片到BytesIO对象
    Import io
    buf = io.BytesIO()
    image.save(buf,’png’) #返回BytesIO中的内容
    return HttpResponse(buf.getvalue(),’image/png’)
3、代码范例

html页面


<form method="post" action="{% url 'sitesApp:login' %}">
{% csrf_token %}
<div class="login">
<div class="input-group">
<span class="input-group-addon" id="basic-addon1">用户名</span>
<input type="text" class="form-control" placeholder="Username" aria-describedby="basic-addon1" name="uName">
</div> <div class="input-group">
<span class="input-group-addon" id="basic-addon1">密&nbsp;&nbsp;&nbsp;&nbsp;码</span>
<input type="text" class="form-control" placeholder="Password" aria-describedby="basic-addon1" name="uPswd">
</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon1">验证码</span>
<input type="text" class="form-control" placeholder="Auth code" aria-describedby="basic-addon1" name="uCode">
</div>
<div class="vcode">
<img src="/app/getvcode/" id="vcode">
</div>
<input type="submit" class="loginBtn" value="登 录"><br>
</div>
</form> <script type="text/javascript">
$(function () {
$('#vcode').click(function () {
$(this).attr('src',"/app/getvcode"+Math.random())
})
})
</script>

views视图


'''
生成并返回验证码
'''
def getvcode(request):
# 随机生成验证码
population = string.ascii_letters+string.digits
letterlist = random.sample(population,4)
vcode = ''.join(letterlist) # 保存该用户的验证码
request.session['vcode']=vcode # 绘制验证码
# 需要画布,长宽颜色
image = Image.new('RGB',(176,60),color=getRandomColor())
# 创建画布的画笔
draw = ImageDraw.Draw(image)
# 绘制文字,字体所在位置
path = os.path.join(BASE_DIR,'static','fonts','ADOBEARABIC-BOLDITALIC.OTF')
font = ImageFont.truetype(path,50) for i in range(len(vcode)):
draw.text((20+40*i,0),vcode[i],fill=getRandomColor(),font=font) # 添加噪声
for i in range(500):
position = (random.randint(0,176),random.randint(0,50))
draw.point(position,fill=getRandomColor()) # 返回验证码字节数据
# 创建字节容器
buffer = io.BytesIO()
# 将画布内容丢入容器
image.save(buffer,'png')
# 返回容器内的字节
return HttpResponse(buffer.getvalue(),'image/png')
# 获取随机颜色
def getRandomColor():
red = random.randint(0,255)
green = random.randint(0,255)
blue = random.randint(0,255)
return (red,green,blue)

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

Django做验证码登录的更多相关文章

  1. Delphi做验证码登录窗口

    在五月麦田的帮助下做成了,感觉挺好,验证码输入的时候需要大写: 组件:LabelEdit 3个  Button 2个  image 1个. 代码如下: unit Unit1; interface us ...

  2. Django(十六)基于模板的登录案例:登录装饰器、csrf攻击方式及防护、ajax的Post 的csrf开启写法、生成验证码、加验证码登录、反向解析+传参

    一.csrf攻击 1.1 csrf攻击(跨站请求伪造) [csrf攻击即]:通过第3方网站,伪造请求(前提条件是你已经登录正常网站,并保存了session或cookie登录信息且没有退出),第三方网站 ...

  3. WPF做验证码,小部分修改原作者内容

    原文地址:http://www.cnblogs.com/tianguook/p/4142346.html 首先感谢aparche大牛的帖子,因为过两天可能要做个登录的页面,因此,需要用到验证码,从而看 ...

  4. JCaptcha做验证码遇到的问题引出的思考

    JCaptcha用来做用户登录时期的验证码的,但是今天将开放的应用系统部署到生产环境的时候,遇到了问题,总是提示验证码不对.后台报出来下面的错误: com.octo.captcha.service.C ...

  5. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  6. Spring Security构建Rest服务-1203-Spring Security OAuth开发APP认证框架之短信验证码登录

    浏览器模式下验证码存储策略 浏览器模式下,生成的短信验证码或者图形验证码是存在session里的,用户接收到验证码后携带过来做校验. APP模式下验证码存储策略 在app场景下里是没有cookie信息 ...

  7. Spring Security构建Rest服务-0702-短信验证码登录

    先来看下 Spring Security密码登录大概流程,模拟这个流程,开发短信登录流程 1,密码登录请求发送给过滤器 UsernamePasswordAuthenticationFilter 2,过 ...

  8. Spring Security 实现手机验证码登录

    思路:参考用户名密码登录过滤器链,重写认证和授权 示例如下(该篇示例以精简为主,演示主要实现功能,全面完整版会在以后的博文中发出): 由于涉及内容较多,建议先复制到本地工程中,然后在细细研究. 1. ...

  9. Spring Security实现短信验证码登录

    Spring Security默认的一个实现是使用用户名密码登录,当初我们在开始做项目时,也是先使用这种登录方式,并没有多考虑其他的登录方式.而后面需求越来越多,我们需要支持短信验证码登录了,这时候再 ...

随机推荐

  1. IDM下载度盘文件

    百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...

  2. WebStrom配置TypeScript开发环境

    安装NodeJS node.js下载地址:https://nodejs.org/en/download/ 安装TypeScript npm install typescripot -g 新建tscon ...

  3. ORA-00001: unique constraint (string.string) violated 违反唯一约束条件(.)

    ORA-00001: unique constraint (string.string) violated   ORA-00001: 违反唯一约束条件(.) Cause: An UPDATE or I ...

  4. Varnish 6.2.2 的介绍与安装

    一.简介 Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 Squid 相比,Varnish 具有性能更高.速度更快 ...

  5. 多测师讲解pthon_002字符,列表,元组,字段等

    # # # 索引:# # # 正向索引:  0  1  2  3  4  5  6# # #      l=   a  b  c  d  e  f  g# # # 反向索引: -7 -6 -5 -4 ...

  6. Archery安装教程

    一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos ...

  7. 第十九章 keepalived高可用

    一.keepalived高可用 1.什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的. 2.高可用使用的工具 1 ...

  8. 【事件中心 Azure Event Hub】Event Hub Java SDK的消费端出现不消费某一个分区中数据的情况,出现IdleTimerExpired错误消息记录

    问题情形 使用Java SDK编写的Event Hub消费端应用,随机性遇见了某个分区没有消费消息的情况,在检查日志时候,有发现IdelTimeExpired的错误记录.在重启应用后,连接EventH ...

  9. fish_redux使用详解---看完就会用!

    说句心里话,这篇文章,来来回回修改了很多次,如果认真看完这篇文章,还不会写fish_redux,请在评论里喷我. 前言 来学学难搞的fish_redux框架吧,这个框架,官方的文档真是一言难尽,比fl ...

  10. ssm整合之applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...