生成二进制流图片验证码
# 绘画库
from PIL import ImageDraw
# 字体库
from PIL import ImageFont
# 图片库
from PIL import Image
# 随机库
import random
# 文件流
import io
# 导入类视图
from django.views import View
import redis
from myapp import models
# 定义ip
host = 'localhost'
# 建立连接
r = redis.Redis(host=host)
# Create your views here.
# 定义随机验证码类
class MyCode(View):
# 定义随机颜色
def get_random_color(self):
R = random.randrange(255)
G = random.randrange(255)
B = random.randrange(255)
return (R, G, B)
def get(self, request):
# 定义画布
img_size = (120, 50)
# 定义画笔
image = Image.new('RGB', img_size, 'white')
# 定义绘图对象
draw = ImageDraw.Draw(image, 'RGB')
# 定义随机字符串
source = '0123456789asd'
# 定义容器方便存入redis
code_str = ''
for i in range(4):
# 获取随机颜色
text_color = self.get_random_color()
# 获取随机字符串
tmp_num = random.randrange(len(source))
# 通过下标获取字符集
random_str = source[tmp_num]
# 添加到容器
code_str += random_str
# 绘制图像
draw.text((10 + 30 * i, 20), random_str, text_color)
# 定义缓冲区
buf = io.BytesIO()
# 保存到缓冲区
image.save(buf, 'png')
# 保存到redis
r.set('code', code_str)
# 保存到session
request.session['code'] = code_str
return HttpResponse(buf.getvalue(), 'image/png')