python实现图片验证码

# 获取验证码
def yanzm(req):
    # 设置背景色
    bg_color = (100, 100, 255)

    # 设置画布长宽(像素)
    width = 400
    height = 100

    # 通过设置生成新的画布
    im = Image.new('RGB', (width, height), bg_color)
    # 展示画布
    draw = ImageDraw.Draw(im)
    # 验证码文本
    # string = 'MSBC'
    string = ['','','','']
    # 随机选取4个值作为验证码
    rand_str = '0123456789'
    fangf='+-*'
    # for i in range(0, 4):
    string[0] = rand_str[random.randrange(0, len(rand_str))]
    string[1] = random.choice(fangf)
    string[2] = rand_str[random.randrange(0, len(rand_str))]
    string[3] = '='
    answer = str(eval(string[0]+string[1]+string[2]))


    font = ImageFont.truetype('D:\\huikeproject\\web-huike\\webHuike\\static\\arialuni.ttf',70)
    # 构造字体颜色
    fontcolor = (255, 100, 100)
    # 绘制4个字
    draw.text((random.randint(10, 30), (random.randint(0, 10))), string[0], font=font, fill=fontcolor)
    draw.text((random.randint(90, 130), (random.randint(0, 10))), string[1], font=font, fill=fontcolor)
    draw.text((random.randint(180, 230), (random.randint(0, 10))), string[2], font=font, fill=fontcolor)
    draw.text((random.randint(270, 330), (random.randint(0, 10))), string[3], font=font, fill=fontcolor)

    # 使用point函数绘制噪点
    for i in range(0, 1000):
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)
    # 释放画笔
    del draw
    im.save('D:\huikeproject\web-huike\webHuike\static\yanz.png', 'png')
    encoded = base64.b64encode(open('D:\huikeproject\web-huike\webHuike\static\yanz.png', 'rb').read())
    basema=encoded.decode()

    # im.show()
    req.session['yan']=answer
    # print('生成的验证码答案:')
    # print(req.session.get('yan'))
    return JsonResponse({"data":200,'base':basema})

# 登录
def login(req):
    b = json.loads(req.body)
    sessions=Session.objects.all()
    answerlist=[]
    for i in sessions:
        answerlist.append(i.get_decoded()['yan'])
    answer=answerlist[-1]
    user = CustomerModel.objects.filter(nickname=b['username'], password=b['password']).values()
    if user and b['yz']==answer:
        encoded_jwt = jwt.encode({'nickname': b['username'],"password":b['password']}, 'secret', algorithm='HS256')
        return JsonResponse({"status": 200, "data": "登录成功","token":encoded_jwt,'user':list(user)})
    elif user and b['yz']!=answer:
        return JsonResponse({"status": 401, "data": "登录失败,验证码错误"})
    return JsonResponse({"status": 400, "data": "登录失败,用户不存在"})

详情:https://www.jb51.net/article/235098.htm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值