from PIL import Image
from PIL import ImageDraw
import io
import redis
import random
# 定义ip和端口
host = 'localhost'
port = 6379
# 建立连接
r = redis.Redis(host=host, port=port)
# 定义验证码
class MyCode(View):
# 定义rgb颜色
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')
danom_zimu = '0123456789abcdefghijklmnopqrsy'
# 接受容器
code_str = ''
# 进入循环绘制
for i in range(4):
# 获取字母颜色
text_color = self.get_random_color()
# 获取随机下标
random_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('yan', code_str)
# 保存session
# request.session['yan'] = code_str
return HttpResponse(buf.getvalue(), 'image/png')