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中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
Python中使用partial改变方法默认参数实例
Apr 28 Python
python 列表删除所有指定元素的方法
Apr 19 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
python制作简单五子棋游戏
Jun 18 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python实现拼接图片
Mar 23 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
如何使用Pytorch搭建模型
Oct 26 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php循环输出数据库内容的代码
2008/05/24 PHP
php 无极分类(递归)实现代码
2010/01/05 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
XENON基于JSON变种
2010/07/27 Javascript
Js sort排序使用方法
2011/10/17 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
Python 分享10个PyCharm技巧
2019/07/13 Python
pytest中文文档之编写断言
2019/09/12 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
初中三年学生的学习自我评价
2013/11/13 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
企业总经理任命书
2014/06/05 职场文书
经济管理自荐书
2014/06/09 职场文书
中文专业自荐书
2014/06/29 职场文书
优秀会计求职信
2014/07/04 职场文书
党员个人剖析材料2014
2014/10/08 职场文书