python3 pillow生成简单验证码图片的示例


Posted in Python onSeptember 19, 2017

使用Python的pillow模块 random 模块随机生成验证码图片,并应用到Django项目中

安装pillow

$ pip3 install pillow

生成验证码图片

\vericode.py

from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random

 #随机码 默认长度=1
def random_code(lenght=1):  
  code = ''
  for char in range(lenght):
    code += chr(random.randint(65,90))
  return code

 #随机颜色 默认颜色范围【1,255】
def random_color(s=1,e=255):
  return (random.randint(s,e),random.randint(s,e),random.randint(s,e))

 #生成验证码图片
 #length 验证码长度
 #width 图片宽度
 #height 图片高度
 #返回验证码和图片
def veri_code(lenght=4,width=160,height=40):
  #创建Image对象
  image = Image.new('RGB',(width,height),(255,255,255))
  #创建Font对象
  font = ImageFont.truetype('Arial.ttf',32)
  #创建Draw对象
  draw = ImageDraw.Draw(image)
  #随机颜色填充每个像素
  for x in range(width):
    for y in range(height):
      draw.point((x,y),fill=random_color(64,255))
  #验证码
  code = random_code(lenght)
  #随机颜色验证码写到图片上
  for t in range(lenght):
    draw.text((40*t+5,5),code[t],font=font,fill=random_color(32,127))
  #模糊滤镜
  image = image.filter(ImageFilter.BLUR)
  return code,image

应用

编写Django应用下的视图函数

\views.py

from . import vericode.py
from io import BytesIO
from django.http import HttpResponse

def verify_code(request):
  f = BytesIO()
  code,image = vericode.veri_code()
  image.save(f,'jpeg')
  request.session['vericode'] = code
  return HttpResponse(f.getvalue())

def submit_xxx(request):
  if request.method == "POST":
    vericode = request.session.get("vericode").upper()
    submitcode = request.POST.get("vericode").upper()
    if submitcode == vericode:
      return HttpResponse('ok')
  return HttpResponse('error')

这里使用了Django的session,需要在Django settings.py的INSTALLED_APPS中添加'django.contrib.sessions'(默认添加)
verify_code视图函数将验证码添加到session中和验证码图片一起发送给浏览器,当提交表单到submit_xxx()时,先从session中获取验证码,再对比从表单中的输入的验证码。

这里只是简单说明,url配置和前端代码未给出。

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

Python 相关文章推荐
Python httplib,smtplib使用方法
Sep 06 Python
python 简易计算器程序,代码就几行
Aug 29 Python
python的正则表达式re模块的常用方法
Mar 09 Python
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
python实现神经网络感知器算法
Dec 20 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
Pandas搭配lambda组合使用详解
Jan 22 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 #Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 #Python
python基本语法练习实例
Sep 19 #Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 #Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 #Python
Python 文件操作的详解及实例
Sep 18 #Python
python Socket之客户端和服务端握手详解
Sep 18 #Python
You might like
浅谈PHP语法(1)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
坏狼php学习 计数器实例代码
2008/06/15 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP 事件机制(2)
2011/03/23 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
详解vue 组件注册
2020/11/20 Vue.js
详细介绍Python中的偏函数
2015/04/27 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Pycharm更换python解释器的方法
2018/10/29 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
四年的大学生生活自我评价
2013/12/09 职场文书
校园之星获奖感言
2014/01/29 职场文书
工艺工程师岗位职责
2014/03/04 职场文书
委托证明模板
2014/09/16 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
小学生学习保证书
2015/02/26 职场文书
2015元旦感言
2015/12/09 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
使用 JavaScript 制作页面效果
2021/04/21 Javascript