zoukankan      html  css  js  c++  java
  • 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
    x1a
    x00x00x00
    IHDRx00x00x00xdcx00x00x0......
    
        #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+="?"
    
        })
  • 相关阅读:
    本学期3个sprint的团队贡献分
    sprint3个人总结
    12.17第九天
    阶段二总结
    sprint 1 总结
    冲刺一
    课程设计团队信息
    学习进度表
    Sprint3总结
    Res_Orders_02
  • 原文地址:https://www.cnblogs.com/taozizainali/p/9054846.html
Copyright © 2011-2022 走看看