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写个小监控
Jan 27 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
Python Requests库基本用法示例
Aug 20 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
Python装饰器结合递归原理解析
Jul 02 Python
Python如何实现线程间通信
Jul 30 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 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调用Java对象的方法
2006/10/09 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
php explode函数实例代码
2012/02/27 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
Python动态加载模块的3种方法
2014/11/22 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python数据处理实战(必看篇)
2017/06/11 Python
python实现自动解数独小程序
2019/01/21 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
《云雀的心愿》教学反思
2014/02/25 职场文书
大家访活动实施方案
2014/03/10 职场文书
单位承诺书格式
2014/05/21 职场文书
会计系毕业求职信
2014/08/07 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
初三英语教学计划
2015/01/23 职场文书
中学教师教学工作总结
2015/08/13 职场文书
员工试用期工作总结
2019/06/20 职场文书
创业计划书详解
2019/07/19 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python
css3 选择器
2022/05/11 HTML / CSS