django 实现验证码功能

14 篇文章 0 订阅
13 篇文章 0 订阅

这是我做的验证码的效果图

 


.验证码---- 提高安全性的
    1.特点: 1.时效性  2.随机性  3.安全    4.模糊  
    2.使用:
       1.安装pillow模块来处理
          pip install pillow
       2.材料: 画布, 画笔,...
       3.代码画验证码:
            # 创建一个画布
        # mode 画布模式, "RGB"
        # size 画布的宽高
        # color表示颜色 如: (33,33,33)即(红,绿,蓝) 每个值的范围是0-255,
        image = Image.new("RGB",(200,70),createColor())

        # 创建一个画笔
        # 参数1是绑定的画布
        # 参数2是模式
        imageDraw = ImageDraw.Draw(image,"RGB")


        # 设置字体
        imageFont = ImageFont.truetype("static/fonts/ADOBEARABIC-ITALIC.OTF",size=50)

        # 画
        # xy,  画的起始位置(坐标)
        # text  画的内容
        # fill = None,  填充的颜色
        # font = None,  设置字体样式及大小的
        # imageDraw.text((5,10),"nizhenliao",fill=createColor(),font=imageFont)

        charSource = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890"

        # 一个一个的写
        # 随机生成一个字母数字, 随机4次
        for i in range(4):
        # 随机选一个字母
        ch = random.choice(charSource)
        imageDraw.text((20+i*50,10),ch,fill=createColor(),font=imageFont)

        # 给验证码图片上画一些点,使其模糊
        for i in range(2000):
        x =  random.randint(0,200)
        y = random.randint(0,70)
        imageDraw.point((x,y),fill=createColor())

        # 创建一个字节流
        import io
        byteIO = io.BytesIO()
        # 把图片保存到字节流中去
        image.save(byteIO,"png")

        return  HttpResponse(byteIO.getvalue(),"image/png")

在这里我是通过django框架实现的

下面是主要功能块,思路是创建画布和画笔,然后通过随机数生成随机字符,随机颜色,随机点,然后组合成为的一张图片

def getVerificationCode(request):
 #创建画布
 #mode  模式,"RGB"
 #size  画布的尺寸
    image=Image.new("RGB",(200,70),createcolor())
    imageDraw=ImageDraw.Draw(image,"RGB")
    imageFont=ImageFont.truetype("/home/yc/Desktop/hz1805project/week01/static/fonts/ADOBEARABIC-ITALIC.OTF",size=50)
    # imageDraw.text((5,10),"i love you!",fill=createcolor(),font=imageFont)
    import  io
    charsource="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890"


    sum = ""
    for i in range(4):


        ch=random.choice(charsource)
        imageDraw.text((15+i*50,10),ch,fill=createcolor(),font=imageFont)
        sum+=ch
#通过session记录这个验证码并且设置过期时间为60秒
    request.session["verCode"]=sum
    request.session.set_expiry(60)
        #画麻子
    for i in range(2000):
        x=random.randint(0,200)
        y = random.randint(0, 70)
        imageDraw.point((x,y),fill=createcolor())



 #创建一个字节流
    byteIO=io.BytesIO()
 #把图片放在字节流里面去
    image.save(byteIO,"png")
    return  HttpResponse(byteIO.getvalue(),"image/png")
#随机颜色的生成
def createcolor():
    red=random.randint(0,255)
    green=random.randint(0,255)
    blue=random.randint(0,255)

    return (red,green,blue)
#登陆页面
def login(request):
    return render(request,"logincode.html")
#登陆之后进行的后台比对操作
def dologin(request):
    value=request.GET.get("codevalue")
    value2=request.session.get("verCode")


    if value==value2:

        return HttpResponse("success!!")

    else:
        return HttpResponse("error!!")

这个是表单的代码

<form action="{% url 'day7:dologin' %}" method="GET">
    验证码<input type="text" name="codevalue"><br>
    <br><img src="{% url 'day7:getVerificationCode' %}" id="code" οnclick="change()" alt="验证码">
    <input type="submit" value="submit">
</form>

js的代码

function change(){

    (document.getElementById("code")).setAttribute("src","/day7/getVerificationCode"+Math.random())

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值