python如何生成网页验证码


Posted in Python onJuly 28, 2018

本文实例为大家分享了python生成网页验证码的具体代码,供大家参考,具体内容如下

验证码为pil模块生成,可直接应用于django框架当中。

首先需要安装Pillow模块 我们这里使用的版本为3.4.1
终端中直接输入指令 pip install Pillow==3.4.1

from PIL import Image, ImageDraw, ImageFont
from django.utils.six import BytesIO

def verify_code(request):
  #引入随机函数模块
  import random
  #定义变量,用于画面的背景色、宽、高
  bgcolor = (random.randrange(20, 100), random.randrange(
    20, 100), 255)
  width = 100
  height = 25
  #创建画面对象
  im = Image.new('RGB', (width, height), bgcolor)
  #创建画笔对象
  draw = ImageDraw.Draw(im)
  #调用画笔的point()函数绘制噪点
  for i in range(0, 100):
    xy = (random.randrange(0, width), random.randrange(0, height))
    fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
    draw.point(xy, fill=fill)
  #定义验证码的备选值
  str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
  #随机选取4个值作为验证码
  rand_str = ''
  for i in range(0, 4):
    rand_str += str1[random.randrange(0, len(str1))]
  #构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”
  font = ImageFont.truetype('FreeMono.ttf', 23)
  #构造字体颜色
  fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
  #绘制4个字
  draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
  draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
  draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
  draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
  #释放画笔
  del draw
  #存入session,用于做进一步验证
  request.session['verifycode'] = rand_str
  #内存文件操作
  buf = BytesIO()
  #将图片保存在内存中,文件类型为png
  im.save(buf, 'png')
  #将内存中的图片数据返回给客户端,MIME类型为图片png
  return HttpResponse(buf.getvalue(), 'image/png'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
分析在Python中何种情况下需要使用断言
Apr 01 Python
Python Queue模块详细介绍及实例
Dec 27 Python
Python学习小技巧之列表项的排序
May 20 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
python实现贪吃蛇游戏
Mar 21 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
详解Python函数式编程—高阶函数
Mar 29 Python
python redis连接 有序集合去重的代码
Aug 04 Python
Python将主机名转换为IP地址的方法
Aug 14 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
python3利用tcp实现文件夹远程传输
Jul 28 #Python
python使用tornado实现简单爬虫
Jul 28 #Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 #Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 #Python
Python Socket编程之多线程聊天室
Jul 28 #Python
python实现点对点聊天程序
Jul 28 #Python
基于python实现聊天室程序
Jul 27 #Python
You might like
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
JS跨域问题详解
2014/11/25 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
详解vue组件基础
2018/05/04 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
取保候审保证书
2014/04/30 职场文书
四风查摆剖析材料
2014/10/10 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
民事诉讼代理词
2015/05/25 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers