赞
踩
import random #导入随机模块 def get_random_color(): # 获取随机的颜色 RGB return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) def get_validcode_img(request): from PIL import Image,ImageDraw,ImageFont from io import BytesIO import random # 获取图片颜色,定义图片的宽270,高40,颜色调用随机颜色的函数 img = Image.new("RGB",(350,40),color=get_random_color()) # 画出来 draw = ImageDraw.Draw(img) # 添加字体 kumo_font = ImageFont.truetype("static/front/font/kumo.ttf", size=32) # 字体 字体大小 # 定义随机验证码 validcode_str = "" for i in range(5): random_num = str(random.randint(0,9)) #随机数字【1-9】 random_low_alpha = chr(random.randint(95,122)) #随机小写字母【a-z】 random_upper_alpha = chr(random.randint(65,90)) #随机大写字母【A-Z】 # 在这三个序列里随机选择5次,成立验证码 random_char = random.choice([random_num,random_low_alpha,random_upper_alpha]) # 生成图片验证码 设置每一次循环的验证码出现的间距(i*50+20,5)这里的5指的是:随机生成5个验证码。 draw.text((i*60+50,5),random_char,get_random_color(),font=kumo_font) validcode_str += random_char #把生成的random_char 加入自定义的validcode_str width = 270 height = 40 # 设置随机颜色的线段 for i in range(20): # 定义随机的x轴 x = random.randint(0,width) # 定义随机的y轴 y = random.randint(0,height) draw.arc((x,y,x+4,y+4),0,90,fill=get_random_color()) print("validcode_str",validcode_str) # 把生成的图片验证码存入session request.session['validcode_str'] = validcode_str f = BytesIO() img.save(f,'png') data = f.getvalue() return data
基于PIL模块动态生成响应状态码图片:
def get_validcode_img(request):
img_data = validcode_img.get_validcode_img(request)
return HttpResponse(img_data)
# 图片验证码结束
{#图片验证码开始#}
<div>
<img alt="" width="270" height="36" id="valid_code_img" src="{% url 'blog:get_validcode_img' %}" onclick="this.src='/blog/get_validcode_img/?'+Math.random()">
</div>
<div>
验证码:<input type="text" name="validcode" value="">
</div>
{#图片验证码结束#}
# 获取图片验证码开始
re_path('get_validcode_img/',login.get_validcode_img,name="get_validcode_img"),
# 获取图片验证码结束
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。