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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
Python的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python获取邮件地址的方法
Jul 10 Python
深入解析Python中的__builtins__内建对象
Jun 21 Python
解决DataFrame排序sort的问题
Jun 07 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
Python中正则表达式的用法总结
Feb 22 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
Mar 23 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 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网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Django admin美化插件suit使用示例
2017/12/12 Python
Python根据成绩分析系统浅析
2019/02/11 Python
python异步存储数据详解
2019/03/19 Python
python 字符串追加实例
2019/07/20 Python
Django中URL的参数传递的实现
2019/08/04 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
python中time.ctime()实例用法
2021/02/03 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
参观考察邀请函范文
2014/01/29 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
2015年加油站工作总结
2015/05/13 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python