最常见的就是数字加字母的验证码
另外还有带算法的,左右滑动的,按要求找图或者找字的,按顺序画图的
先说数字加字母的验证码吧
这个也是一个地址请求之后返回的结果显示出来
前端:
<div class="col-sm-10">
<div style="float:left;"><input type="text" class="form-control" id="safecode" name="safecode" style="width:65px;" data-bv-field="safecode" maxlength="4"></div>
<div style="float:left; padding-left:5px;"><img src="/getVerifyCode/" alt="" id="safecodeimg"></div>
<div style="float:left; height:35px; line-height:35px;cursor:pointer;" ><span id="changecode">换一张</span></div>
</div>
js事件:
$("#changecode").bind("click",function(){
$("#safecodeimg").attr("src",$("#safecodeimg").attr("src")+Math.random());
});
【后端】:
请求地址:
url(r"^getVerifyCode/",views.getVerifyCode,name="getVerifyCode")
视图:
#获取随机颜色
def get_random_color():
R=random.randrange(255)
G=random.randrange(255)
B=random.randrange(255)
return(R,G,B)
#验证码视图
def getVerifyCode(request):
bg_color=(245,245,245) # 定义画布背景
img_size=(90,34) # 定义画布大小
image=Image.new("RGB",img_size,bg_color) # 定义画布
draw=ImageDraw.Draw(image,"RGB") # 定义画笔
# 创建字体(字体的路径,服务器路径)
font_path = 'D:/eclipse/works/bbspro/bbspro/src/static/fonts/AdobeArabic-2.ttf'
# 实例化字体,设置大小是30
font = ImageFont.truetype(font_path, 30)
# 准备画布上的字符集
source = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
# 保存每次随机出来的字符
code_str = ""
for i in range(4):
# 获取数字随机颜色
text_color = get_random_color()
# 获取随机数字 len
tmp_num = random.randrange(len(source))
# 获取随机字符 画布上的字符集
random_str = source[tmp_num]
# 将每次随机的字符保存(遍历) 随机四次
code_str += random_str
# 将字符画到画布上
draw.text((5 + 20*i, -2), random_str, text_color, font)
#噪点干扰线
width=90
height=34
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,x2,y1,y2),fill=get_random_color())
for i in range(10):
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+4,y+4),0,90,fill=get_random_color())
# 记录给哪个请求发了什么验证码
request.session['code'] = code_str
# 获得一个缓存区
buf = io.BytesIO()
# 将图片保存到缓存区
image.save(buf, 'png')
# 将缓存区的内容返回给前端 .getvalue 是把缓存区的所有数据读取
return HttpResponse(buf.getvalue(), 'image/png')
源码直接套用就行了。转载https://www.o200.cn/bk_detail/49