Django框架验证码用法实例分析


Posted in Python onMay 10, 2019

本文实例讲述了Django框架验证码用法。分享给大家供大家参考,具体如下:

验证码

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">密    码</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)

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
在Python的Django框架中创建语言文件
Jul 27 Python
python字符串的常用操作方法小结
May 21 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
Python饼状图的绘制实例
Jan 15 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python设置代理和添加镜像源的方法
Feb 14 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
通过代码简单了解django model序列化作用
Nov 12 Python
Python爬虫实现验证码登录代码实例
May 10 #Python
详解如何管理多个Python版本和虚拟环境
May 10 #Python
不到40行代码用Python实现一个简单的推荐系统
May 10 #Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 #Python
Python3列表内置方法大全及示例代码小结
May 10 #Python
详解python 爬取12306验证码
May 10 #Python
详解用python写一个抽奖程序
May 10 #Python
You might like
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
洗车工岗位职责
2014/03/15 职场文书
《观舞记》教学反思
2014/04/16 职场文书
电子商务求职信
2014/06/15 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
党员剖析材料范文
2014/12/18 职场文书
自我工作评价范文
2015/03/06 职场文书
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android