Python生成随机验证码,需要使用PIL模块.

安装:

1
python3.5 -m pip install pillow

基本使用

1. 创建图片

1
2
3
4
5
6
7
8
9
from PIL import Image
img = Image.new(mode='RGB', size=(12030), color=(255255255))
  
# 在图片查看器中打开
# img.show()
  
# 保存在本地
with open('code.png','wb') as f:
    img.save(f,format='png')

2. 创建画笔,用于在图片上画任意内容

1
2
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')

3. 画点

1
2
3
4
5
6
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示坐标
# 第二个参数:表示颜色
draw.point([100100], fill="red")
draw.point([300300], fill=(255255255))

4. 画线

1
2
3
4
5
6
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标和结束坐标
# 第二个参数:表示颜色
draw.line((100,100,100,300), fill='red')
draw.line((100,100,300,100), fill=(255255255))

5. 画圆

1
2
3
4
5
6
7
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)
# 第二个参数:表示开始角度
# 第三个参数:表示结束角度
# 第四个参数:表示颜色
draw.arc((100,100,300,300),0,90,fill="red")

6. 写文本

1
2
3
4
5
6
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
draw.text([0,0],'python',"red")

7. 特殊字体文字

1
2
3
4
5
6
7
8
9
10
img = Image.new(mode='RGB', size=(12030), color=(255255255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示字体文件路径
# 第二个参数:表示字体大小
font = ImageFont.truetype("kumo.ttf"28)
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
# 第四个参数:表示颜色
draw.text([00], 'python'"red", font=font)

图片验证码实例

路由URL
url(r'^get_valid_img/$', views.get_valid_img),
def get_valid_img(request):
'''
验证码获取
:param request:
:return:
'''
# 第一种方法,通过本地图片,传送返回
'''
import os
from Blogsys import settings
path = os.path.join(settings.BASE_DIR,'app01','static','img','default.png')
# 打开这个图片,用二进制读出来返回给IMAGE的SRC
f = open(path,'rb')
data = f.read()
return HttpResponse(data)

第一种固定图片

 # 第二钟方法,通过PIL模块创建这个图片
from PIL import Image
import random
# 获取背景颜色
def get_random_color():
return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
# 生成图片,第一个参数是模式,第二个是大小,第三个是背景色
image = Image.new(mode='RGB',size=(260,40),color=get_random_color()) # 创建一个有背景颜色的图片
f = open('default.png','wb') # 二进制打开一个本地文件
image.save(f,'png') # 将这个图片存放进去,第一个参数是本地文件的句柄,第二个参数是文件最后格式
# 读取图片,返回给IMAGE的SRC
with open('default.png','rb') as f_read:
data = f_read.read() # 第三种方法与第二种方法一样,只不过存出在内存
# from PIL import Image
# import random
# from io import BytesIO
# # 获取背景颜色
# def get_random_color():
# return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
#
# # 生成图片,第一个参数是模式,第二个是大小,第三个是背景色
# image = Image.new(mode='RGB', size=(260, 40), color=get_random_color()) # 创建一个有背景颜色的图片
# f = BytesIO() # 打开内存空间
# image.save(f, 'png') # 将这个图片存放进去,第一个参数是本地文件的句柄,第二个参数是文件最后格式
# data = f.getvalue() # 读取图片,返回给IMAGE的SRC,获取IO里面对象
# return HttpResponse(data) # 第四种方法,通过PIL模块,画板,画笔
from PIL import Image, ImageDraw, ImageFont
import random
from io import BytesIO if request.is_ajax() or request.method=='GET':def get_random_color():
'''
随机颜色函数
:return:
'''
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def get_random_char():
'''
随机验证码函数
:return:
'''
random_num = str(random.randint(0, 9))
random_upper_alph = chr(random.randint(65, 90))
random_lower_alph = chr(random.randint(97, 122))
random_char = random.choice([random_num, random_lower_alph, random_upper_alph])
return random_char
image = Image.new(mode="RGB", size=(260, 40), color=get_random_color()) # 创建图片
draw = ImageDraw.Draw(image, mode='RGB') # 将图片弄成画板,要有图片,模式
font = ImageFont.truetype("app01/static/kumo.ttf", 32) # 创建个画笔,要有字体,大小
valid_code_str = "" # 随机验证码变量
for i in range(1, 6):
char = get_random_char() # 执行随机验证码函数
valid_code_str += char # 添加到随机验证码的变量
# 画板内容,X,Y,TEXT,COLOR,FONT
draw.text([i * 40, 5], char, get_random_color(), font=font)
print('我是验证码',valid_code_str)
# 噪点设计,比如点点,圈圈,横线 # width = 260
# height = 40
# for i in range(80): # 创建80个点点,五颜六色的点
# draw.point((random.randint(0,width),random.randint(0,height)),fill=get_random_color())
#
# for i in range(10):
# x1 = random.randint(0,width) # 创建十条线,五颜六色的线
# x2 = random.randint(0,width)
# y1 = random.randint(0,height)
# y2 = random.randint(0,height)
# draw.line((x1,y1,x2,y2),fill=get_random_color()) # for i in range(40): # 创建40个圈圈,但不是很理想,感觉跟点点差不多
# draw.point([random.randint(0,width),random.randint(0,height)],fill=get_random_color())
# x = random.randint(0,width)
# y = random.randint(0,height)
# draw.arc((x,y,x+90,y+90),0,90,fill=get_random_color()) # 通过这里控制坐标 f = BytesIO() # 打开内存空间
image.save(f,'png') # 保存到内存空间
data = f.getvalue() # 取出验证码,图片,样式返回 # 验证码生成了,这时候需要放在session里面,然后通过AJAX提交,后台判断是否匹配成功
request.session['valid_code_str'] = valid_code_str
return HttpResponse(data)
  <div class="col-md-6">{# src可以跟一个图片源,我们要通过模块来创建,也会走/get_valid_img/#}
<img src="/get_valid_img/" alt="验证码" id="valid_img" height="" width="">
</div>
 {#    方式一,刷新验证码,通过/get_valid_img/后面加入?刷新,不需要试图函数更改#} 随机验证码刷新
$("#valid_img").click(function () {
$(this)[0].src += "?"
});
如果需要验证码的验证,在views里面的验证码放在session里面,html里面记录用户输入验证码,再通过forms里钩子比对

django随机验证码的更多相关文章

  1. Django之路 - 实现登录随机验证码

    登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...

  2. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

  3. Django随机生成验证码图片

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  4. Django中生成随机验证码(pillow模块的使用)

    Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...

  5. Django之实现登录随机验证码

    登录验证码是每个网站登录时的基本标配,网上也有很多相应的文章, 但是从生成验证码到 应用到自己的网站上的全步骤,并没有看到很多, 为了节约大家的时间,我把整体步骤写下来, 即拿即用哈 1. 生成随机验 ...

  6. Django框架登录验证及产生随机验证码的实例

    1:views视图代码 # 登录验证 def login(request): # 使用ajax请求可以使用判断 # if request.is_ajax(): if request.method == ...

  7. python模块之PIL模块(生成随机验证码图片)

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  8. django生成验证码

    django生成验证码 # 制作验证码 def verify_code(): # 1,定义变量,用于画面的背景色.宽.高 # random.randrange(20, 100)意思是在20到100之间 ...

  9. 7月2日 Django 生成验证码、

    html页面里 {# 验证码 #} <div class="form-group " id="v-code-wrapper"> <label ...

随机推荐

  1. PentesterLab-PHP Include And Post Exploitation

    一.打开页面,看到这么个页面,按照惯例随手点一点 二.Login处显然是一个后台登录页面,但前提是的有账号密码,看了下Submit这个页面,发现url中有个page参数 三.nikto跑一下这个页面. ...

  2. css移动元素的几种方法

    一.当然是元素设定为postion: absolute, 然后控制 left, top 位置 二.元素增加overflow属性,然后设置元素的scrollLeft, scrollRight当做滚动条来 ...

  3. asp.net设置gridview页码显示遇到的问题

    问题:分页部分显示的页码撑开占满整个表格底部 解决方法: 1.通过浏览器察看源,发现是分页部分的table样式受到整个页面的table设置的样式的影响,分页是一个tr里面的td里面的table 2.设 ...

  4. ansible资料

    ansible系列教程-强烈推荐看完 ansible官方编写的例子 ansible_ui Jenkins配置ansible galaxy 官方文档 中文教程1 中文教程2 playbook进阶 YAM ...

  5. Unity3D使用溶解技术解决障碍物遮挡

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  6. I.MX6 linux eGalaxTouch 自动获取设备节点

    I.MX6 linux eGalaxTouch 自动获取设备节点 \\\\\\\\\\\\\\-*- 目录 -*-///////////// | 一. 需求: | 二. /proc/bus/input ...

  7. UNIX环境高级编程 文件I/O

    大多数文件I/O 只需要用到 5个函数 :    open , read , write , lseek , close 本章描述的都是不带缓冲的I/O(read write 都调用内核中的一个系统调 ...

  8. Linux下安装nginx和php

    1. 安装nginx,传送门:http://www.cnblogs.com/emberd/p/4536238.html2. 下载php源码压缩包:php-5.6.1.tar.gz3. 解压后进入目录, ...

  9. JAXP使用Stax API时格式化输出XML

    最近项目中需要生成XBRL instance,对于XML读写和验证进行了一些学习.由于Stax API不支持格式化输出,默认全都写在一行上,网上也没有搜到现成的东西,自己写了一个格式化输出的帮助类. ...

  10. 转载maven安装,配置,入门

    转载:http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html 本书代码下载 大家可以从我的网站下载本书的代码:http://ww ...