博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django 验证码实现
阅读量:6163 次
发布时间:2019-06-21

本文共 2771 字,大约阅读时间需要 9 分钟。

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+="?" })

 

转载于:https://www.cnblogs.com/taozizainali/p/9054846.html

你可能感兴趣的文章
批量删除oracle中以相同类型字母开头的表
查看>>
Java基础学习总结(4)——对象转型
查看>>
BZOJ3239Discrete Logging——BSGS
查看>>
SpringMVC权限管理
查看>>
spring 整合 redis 配置
查看>>
cacti分组发飞信模块开发
查看>>
浅析LUA中游戏脚本语言之魔兽世界
查看>>
飞翔的秘密
查看>>
Red Hat 安装源包出错 Package xxx.rpm is not signed
查看>>
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>