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

 更新时间:2017年09月19日 10:31:24   作者:Shao  
本篇文章主要介绍了python3 pillow生成简单验证码图片的示例,非常具有实用价值,需要的朋友可以参考下

使用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中进程间通信及设置状态量控制另一个进程

    这篇文章主要介绍了python中进程间通信及设置状态量控制另一个进程,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python中的装饰器链(decorator chain)详解

    Python中的装饰器链(decorator chain)详解

    在Python中,装饰器是一种高级功能,它允许你在不修改函数或类代码的情况下,为它们添加额外的功能,装饰器通常用于日志记录、性能测量、权限检查等场景,当多个装饰器应用于同一个函数或类时,形成装饰器链,这篇文章主要介绍了Python中的装饰器链详解,需要的朋友可以参考下
    2024-06-06
  • Pytorch 定义MyDatasets实现多通道分别输入不同数据方式

    Pytorch 定义MyDatasets实现多通道分别输入不同数据方式

    今天小编就为大家分享一篇Pytorch 定义MyDatasets实现多通道分别输入不同数据方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 用Python进行TCP网络编程的教程

    用Python进行TCP网络编程的教程

    这篇文章主要介绍了用Python进行TCP网络编程的教程,是Python学习当中的基础知识,代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • pytorch基础之损失函数与反向传播详解

    pytorch基础之损失函数与反向传播详解

    损失函数(Loss Function)用于衡量神经网络输出与目标值之间的误差,指导网络通过反向传播优化参数,常见的损失函数包括均方误差和交叉熵误差,在训练过程中,通过不断最小化损失函数值来调整网络权重,以期达到输出接近目标值的效果
    2024-09-09
  • 基于Python爬取搜狐证券股票过程解析

    基于Python爬取搜狐证券股票过程解析

    这篇文章主要介绍了基于Python爬取搜狐证券股票过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 解决PyCharm控制台输出乱码的问题

    解决PyCharm控制台输出乱码的问题

    今天小编就为大家分享一篇解决PyCharm控制台输出乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python graphlib库轻松创建操作分析图形对象

    Python graphlib库轻松创建操作分析图形对象

    Python中的graphlib库是一个功能强大且易于使用的工具,graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象,本文将介绍graphlib库的主要用法,并提供一些示例代码和输出来帮助您入门
    2024-01-01
  • 跟老齐学Python之有容乃大的list(4)

    跟老齐学Python之有容乃大的list(4)

    本文是有容乃大的list的第四篇文章,本来只打算写三篇的,结果发现还是有些内容没有介绍清楚,只好再补一篇了。介绍一下对list的操作。
    2014-09-09
  • Python 窗体(tkinter)下拉列表框(Combobox)实例

    Python 窗体(tkinter)下拉列表框(Combobox)实例

    这篇文章主要介绍了Python 窗体(tkinter)下拉列表框(Combobox)实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论