django 验证码实现
Posted 睡觉的阿狸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 验证码实现相关的知识,希望对你有一定的参考价值。
django验证码的使用:
验证码的作用:用于人机识别。
验证码
###验证码: def code_str(request): from PIL import Image from PIL import ImageDraw,ImageFont from io import BytesIO #生成随机字符串,一个数组的形式 import random def get_random_color(): return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) ##图片颜色,RGB模式,(220,36)是尺寸,color是颜色,需要输入上方的三个随机数字 image=Image.new("RGB",(220,36),color=get_random_color()) draw =ImageDraw.Draw(image) # 图片字体的样式,大小 font = ImageFont.truetype("static/font/kumo.ttf",size=32) # !!!!!!/static/font/kumo.ttf",不好使,不能在开头加"/" #图片中的字,先生成随机的字符串,用chr把数组转化为对应的字符 random_str="" for i in range(5): num=str(random.randint(0,9)) up=chr(random.randint(97,122)) down=chr(random.randint(65,90)) res=random.choice([num,up,down]) #font对应上方的font对象,()中的数字代表每个字符的间距,起始位置。 # xy = xy[0] + offset[0], xy[1] + offset[1](这个是源码中的标识,text中的第一位) draw.text((20 + i * 30, 0), res, get_random_color(), font=font) random_str+=res # xy = xy[0] + offset[0], xy[1] + offset[1] print(random_str) print("wwwwwwwwwwwwww",random_str) #这里,因为每个人的验证码不能一样,而且需要保存,所以可以用session来进行保存, #相当于每个人一个仓库,之后登陆之后去session中去取,来验证. request.session["code_str"]=random_str #这里将生成的图片以二进制的方式读取到内存.而后将二进制文件 f = BytesIO() image.save(f,"png") #png是格式 data = f.getvalue() #取到二进制值 print(data)#打印出来的是下方的格式. #b‘\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xdc\x00\x00\x0...... #html中的代码,调用这个函数,返回的是图片的二进制码的形式,转化为图片。 # < img width = "250" height = "36" src = "/code_str/" alt = "" class ="valid_img" > return HttpResponse(data)
校验验证码:如果验证码不对,不需要校验用户名,密码等。
#登陆函数 def login(request): ###先校验验证码 if request.is_ajax(): user=request.POST.get("user") pwd=request.POST.get("pwd") #取到用户输入的验证码 code_str=request.POST.get("code_str") print("666666666666",code_str) print(request.POST) res={} #取到后台生成的验证码 random_str=request.session.get("code_str") print(666666666,random_str) if str(code_str).upper()==random_str.upper(): print("77777777777777") #如果验证码正确进行验证 from django.contrib import auth user=auth.authenticate(username=user,password=pwd) if user: res["user"]=user.username else: res["msg"]="用户名或者密码错误" else: res["msg"]=‘验证码错误‘ print("sssssssssssssssss",res) return HttpResponse(json.dumps(res)) return render(request,"login.html",locals())
在login.html中添加更换验证码功能,点击图片,更换验证码。
{# 点击验证码换字符 #} $(".valid_img").click(function () { {#取到你点击的对象,然后刷新src属性#} $(this)[0].src+="?" })
以上是关于django 验证码实现的主要内容,如果未能解决你的问题,请参考以下文章