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的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
Python切片知识解析
Mar 06 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
python 内置函数filter
Jun 01 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
django 外键model的互相读取方法
Dec 15 Python
python绘制多个子图的实例
Jul 07 Python
Django获取应用下的所有models的例子
Aug 30 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python实现生活常识解答机器人
Jun 28 Python
Python实现抖音热搜定时爬取功能
Mar 16 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
一个简单的PHP入门源程序
2006/10/09 PHP
php Ajax乱码
2008/04/09 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
详解python发送各类邮件的主要方法
2016/12/22 Python
详解python3中zipfile模块用法
2018/06/18 Python
代码详解django中数据库设置
2019/01/28 Python
Django框架封装外部函数示例
2019/05/28 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python实现广度优先搜索过程解析
2019/10/19 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
副总经理工作职责
2013/11/28 职场文书
竞争上岗实施方案
2014/03/21 职场文书
药品业务员岗位职责
2014/04/17 职场文书
新农村建设汇报材料
2014/08/15 职场文书
毕业生党员个人总结
2015/02/14 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
研讨会通知
2015/04/27 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书