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写入数据到MP3文件中的方法
Jul 10 Python
Python中字典映射类型的学习教程
Aug 20 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
Python玩转PDF的各种骚操作
May 06 Python
pyinstaller还原python代码过程图解
Jan 08 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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的error_reporting错误级别变量对照表
2014/07/08 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
js实现计算器功能
2020/08/10 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python算术运算符实例详解
2017/05/31 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python爬取微信公众号文章的方法
2019/02/26 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python 在局部变量域中执行代码
2020/08/07 Python
python中使用np.delete()的实例方法
2021/02/01 Python
自荐信如何制作?
2014/02/21 职场文书
四年级评语大全
2014/04/21 职场文书
如何写求职信
2014/05/24 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers