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利用ansible分发处理任务
Aug 04 Python
使用Pyinstaller的最新踩坑实战记录
Nov 08 Python
Django添加feeds功能的示例
Aug 07 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
python logging通过json文件配置的步骤
Apr 27 Python
Python求解排列中的逆序数个数实例
May 03 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 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实现批量生成App各种尺寸Logo
2015/03/19 PHP
PHP7.0版本备注
2015/07/23 PHP
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
Python中文字符串截取问题
2015/06/15 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
Python PyQt5整理介绍
2020/04/01 Python
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
心理健康教育心得体会
2013/12/29 职场文书
项目副经理岗位职责
2013/12/30 职场文书
生产部岗位职责范文
2014/02/07 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
婚前财产公证书
2014/04/10 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
SQL中的连接查询详解
2022/06/21 SQL Server