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. Windows环境下redis 配置文件中设置的密码无效

    当我们安装了redis服务后,发现在其配置文件redis.windows.conf(或redis.conf)设置了密码:requirepass ****** 但是打开redis-cli.exe后输入命 ...

  2. @Qualifier注解详解

    @Qualifier注解意味着可以在被标注bean的字段上可以自动装配.Qualifier注解可以用来取消Spring不能取消的bean应用. 下面的示例将会在Customer的person属性中自动 ...

  3. 《gradle 用户指南中文版》目录

    gradle 用户指南 版权所有©2007-2017 Hans Dockter,Adam Murdoch只要您不对这些副本收取任何费用,并且进一步规定,每个副本都包含本版权声明,无论是以印刷版还是电子 ...

  4. Java数据封装类

    项目中用到,比较好用!! 用户前端与后台的交互数据,这个封装类中包含分页.数据.错误码.状态码等信息!! 亲测好用哦! 一个类DataWrapper public class DataWrapper& ...

  5. xcode好玩的条件断点设置. 可以真人发声。

    哈哈.设置个条件断点. 然后 Logmessage  or speak message 挺有意思. 一听就知道是哪个断点触发了.

  6. 网络编程 socket编程 - Asyncsocke

    简单的聊天程序:http://blog.csdn.net/chang6520/article/details/7967662 iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 c ...

  7. 从客户端中检测到有潜在危险的 Request.Form 值的问题的解决方法。

    在controller控制器里面添加[ValidateInput(false)]         [ValidateInput(false)]        public ActionResult m ...

  8. 【剑指offer】求1+2+…+n,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 使用递归计算累加,利用逻辑与的短路特性终止递归.逻辑与的短路特性 : A&&B,A>0时,执行B:A=0时,不执行B. # 代码 ...

  9. Spring 管理Filter和Servlet

    本文转载自:http://www.open-open.com/lib/view/open1417248512252.html 在使用spring容器的web应用中,业务对象间的依赖关系都可以用cont ...

  10. POJ2185 Milking Grid 【lcm】【KMP】

    Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that ...