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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
python迭代器的使用方法实例
Nov 21 Python
Python lambda和Python def区别分析
Nov 30 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
python实现textrank关键词提取
Jun 22 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python列表list操作相关知识小结
Jan 29 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
如何利用pygame实现打飞机小游戏
May 30 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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
javascript入门基础之私有变量
2010/02/23 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
Python 深入理解yield
2008/09/06 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python 修改列表中的元素方法
2018/06/26 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
详解python内置模块urllib
2020/09/09 Python
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
打架检讨书50字
2014/01/11 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
投资意向书
2014/07/30 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript