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+="?"
- })
来源: http://www.bubuko.com/infodetail-2606014.html