正如日常生活中所见,网站、APP一般都需要用户进行注册登录,获取用户登录信息,登录页面除了需要输入正确的用户名和密码,往往还需要对验证码进行验证,验证码有图片验证码、文字验证码、数字验证码等,触发方式有输入的、移动的、点击的、滑动的层出不穷。只有用户名、密码以及验证码偶都输入正确,才能成功登录。

那如何随机生成不同的验证码图片以及如何验证用户输入的验证码是否正确,具体步骤如下图:

一、流程图:

二、登录界面:

三、代码实践:

# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:index.py
@time:2020/12/18
"""from flask import Flask
from flask_cors import *
from Generate_image_verify_code.get_captcha import get_captcha
import jsonapp = Flask(__name__)
CORS(app, supports_credentials=True)
app.secret_key = 'A0Zr98j/3yX R~XggHhH!jmN]LWX/,?RT'# 获取验证码图片
@app.route('/index', methods=['GET'])
def get_captchainfo():res = get_captcha().generate_verify_code()return json.dumps(res, ensure_ascii=False, indent=4)# 对用户输入的验证码进行验证
@app.route('/verify', methods=['POST'])
def get_verify():res = get_captcha().get_verify_info()return json.dumps(res, ensure_ascii=False, indent=4)if __name__ == '__main__':app.run(host='0.0.0.0', port=5058, threaded=True)
# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:get_captcha.py
@time:2020/12/18
"""
from flask import session, request
from Generate_image_verify_code.captcha_handle import create_captcha
from io import BytesIO
import base64# 视图,生成验证码图片和code,返回图片,code存进session
class get_captcha():def generate_verify_code(self):# 生成验证码图片和验证码code,返回验证码图片,并以形式将验证码存放在session里try:f = BytesIO()img, code = create_captcha()  # 获取验证码图片 和 验证码session['code'] = code  # 将 code保存到session中# print(session['code'])img.save(f, 'PNG')# print(f.getvalue())  # 将图片转为二进制流img_stream = base64.b64encode(f.getvalue())  # 转为base64编码img_stream = 'data:image/jpeg;base64,%s' % str(img_stream, encoding="utf-8")return {'code': 1, 'message': '数据获取成功', 'data': img_stream}except Exception as e:return {'code': 0, 'message': '返回验证码图片错误', 'reason': e}# 对用户输入的验证码进行验证def get_verify_info(self):try:post_data = request.jsonverify_code = post_data.get('verify_code')if session['code'] == verify_code:return {'code': 1, 'message': '验证码输入正确'}else:return {'code': 0, 'message': '验证码输入错误'}except Exception as e:return {'code': 0, 'message': '验证失败', 'reason': e}

获取验证码图片和验证码:

# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:captcha_handle.py
@time:2020/12/18
"""import random, string
from PIL import Image, ImageDraw, ImageFont, ImageFilter# 生成随机字符串
def _getRandomChar():# string模块包含各种字符串,以下为小写字母加数字ran = string.ascii_lowercase+string.digitschar = ''for i in range(4):char += random.choice(ran)return char# 返回一个随机的RGB颜色
def _getRandomColor():return (random.randint(50,150), random.randint(50,150),random.randint(50,150))def create_captcha():# 创建图片,模式,大小,背景色img = Image.new('RGB', (120, 30), (255, 255, 255))# 创建画布draw = ImageDraw.Draw(img)# 设置字体font = ImageFont.truetype('D:\Fonts\msyhbd.ttf', 25)code = _getRandomChar()# 将生成的字符画在画布上for t in range(4):draw.text((30*t+5, 0), code[t], _getRandomColor(), font)# 生成干扰点for _ in range(random.randint(50, 80)):# 位置,颜色draw.point((random.randint(0, 120), random.randint(0, 30)), fill=_getRandomColor())# 使用模糊滤镜使图片模糊# img = img.filter(ImageFilter.BLUR)# 保存# img.save('./picture/'+''.join(code)+'.jpg', 'jpeg')return img, code

四、验证测试:

首先获取验证码图片,同时验证码内容已保存至session中:

可以将base64编码转为图片看看验证码:https://oktools.net/image2base64

如图验证码为cdov。

接着,访问对用户输入的验证码进行验证接口:如果用户输入的为:cdov,则验证码输入成功

{"verify_code":"cdov"
}

用户输入的为:cd0v,则验证码输入错误

{"verify_code":"cd0v"
}

如果重新获取验证码图片,则循环执行上述步骤。

参考链接:http://www.calmkart.com/?p=332

Python生成验证码图片及验证用户提交的验证码是否正确相关推荐

  1. python生成字母图片_Python 模拟动态产生字母验证码图片功能

    模拟动态产生字母验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image ...

  2. 生成数字相加验证码图片并验证

    Java代码随机生成数字相加验证码图片并验证 package com.xz.common;      import java.awt.Color;   import java.awt.Font;   ...

  3. python 识别登陆验证码图片(完整代码)_python 识别登录验证码图片功能的实现代码(完整代码)...

    在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...

  4. 分享一个python生成ico图片程序

    分享一个python生成ico图片程序 利用python PIL 进行ico 生成,课利用web框架扩展开发出网页版本. # -*- coding: utf-8 -*- from PIL import ...

  5. python九宫格拼图,Python生成九宫格图片

    Python生成九宫格图片 一.前言 大家在朋友圈应该看到过用一张图片以九宫格的方式显示,效果大致如下: 要实现上面的效果非常简单,我们只需要截取图片的九个区域即可.今天我们就要带大家使用Python ...

  6. Python生成内涵图片

    Python生成内涵图片 先看案例 原图 生成后(放大看看,嘿嘿嘿) 上代码: from PIL import Image, ImageDraw, ImageFontfont_size = 7 tex ...

  7. 编写一个将用户输入的信息输出到网页的js程序 和 用if else验证用户输入的密码是否正确(两个代码)

    js的一次作业罢了 tip:编写一个将用户输入的信息输出到网页的js程序 和 用if else验证用户输入的密码是否正确 (两个代码) 1.编写一个将用户输入的信息输出到网页的js程序 <!DO ...

  8. Ajax 验证用户输入的验证码是否与随机生成的一致

    后台Java代码[验证码生成] /*** 随机生成6位随机验证码*/public static String createRandomVcode(){//验证码String vcode = " ...

  9. python 生成随机图片

    python numpy生成随机图 # -*- coding: utf-8 -*-import numpy as np import cv2grayImage=np.random.randint(0, ...

  10. Python生成九宫格图片

    一.前言 大家在朋友圈应该看到过用一张图片以九宫格的方式显示,效果大致如下: 要实现上面的效果非常简单,我们只需要截取图片的九个区域即可.今天我们就要带大家使用Python来实现一下九宫格图片的生成. ...

最新文章

  1. Linux查看环境变量当前信息和查看命令
  2. Magazine App Demo
  3. squid 安装、配置、优化
  4. LoadRunner测试结果分析
  5. 迷途指针,从百度百科上摘抄的,语言很幽默
  6. Nature今年首次撤稿给了微软:研究团队成员自曝删改不利数据,量子计算重大进展是假的...
  7. Apache Mahout:构建垃圾邮件过滤器服务器
  8. android eclipse 配置 在项目右击选择properties
  9. 浏览器内核与web标准
  10. 剑指Offer之复杂链表的复制
  11. init 0 init1 init 3 init 5 init 6 这几个启动级别都代表什么意思
  12. Android XML文件读写
  13. Zabbix 监控 MongoDB
  14. 暴力猴插件的安装及使用
  15. Hive微博数据统计分析
  16. creo数控编程怎么样_CREO 3.0中文版数控加工高手必备118招
  17. 关于贷后的8个专业名词解析
  18. 开源视频云转码 m3u8_8种开源视频游戏
  19. 易点云冲刺上市:亏损收窄、债务高企,租电脑的生意能否长久?
  20. Vulnhub-Bulldog靶机实战

热门文章

  1. e盘是否具有读写权限_文件权限管理
  2. 极好的六个开源数据挖掘工具
  3. 不使用BHO监控IE窗口事件
  4. VulkanAPI架构
  5. 求两个数的最大公约数,Euclid算法证明,以及C语言代码实现
  6. PMP-计算题汇总(PV、EV、AC、BAC、EAC、ETC、)
  7. readyState的5种状态含义
  8. specular图使用方法_CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分
  9. specular高光贴图
  10. CodeWarrior for S12(X) V5.1 Special详细安装过程