Flask 验证码 点击验证码刷新
---恢复内容开始---
import random
import string
# Image:一个画布
# ImageDraw:一个画笔
# ImageFont:画笔的字体
# pip install pillow
from PIL import Image, ImageDraw, ImageFont
class Captcha(object):
# 生成几位数的验证码
number =
# 验证码图片的高度和宽度
size = (, )
# 验证码字体大小
fontsize =
# 加入干扰线条数
line_number =
# 构建一个验证码源文本
SOURCE = list(string.ascii_letters)
, ):
SOURCE.append(str(index))
# 用来绘制干扰线
@classmethod
def __gene_line(cls, draw, width, height):
begin = (random.randint(, width), random.randint(, height))
end = (random.randint(, width), random.randint(, height))
draw.line([begin, end], fill=cls.__gene_random_color(), width=)
# 用来绘制干扰点
@classmethod
def __gene_points(cls, draw, point_chance, width, height):
chance = min(, max(, , ]
for w in range(width):
for h in range(height):
tmp = random.randint(, )
- chance:
draw.point((w, h), fill=cls.__gene_random_color())
# 生成随机的颜色
@classmethod
def __gene_random_color(cls, start=, end=):
random.seed()
return (random.randint(start, end), random.randint(start, end), random.randint(start, end))
# 随机选择一个字体
@classmethod
def __gene_random_font(cls):
fonts = [
'Lobster-Regular.ttf',
'verdana.ttf'
]
font = random.choice(fonts)
return font
# 用来随机生成一个字符串
@classmethod
def gene_text(cls, number):
# num是生成验证码的位数
return ''.join(random.sample(cls.SOURCE, number))
# 生成验证码
@classmethod
def gene_graph_captcha(cls):
# 验证码图片的高和宽
width, height = cls.size
# 创建图片
image = Image., ))
# 验证码的字体
font = ImageFont.truetype(cls.__gene_random_font(), cls.fontsize)
# font = ImageFont.truetype(cls.__gene_random_font(), cls.fontsize)
# 创建画笔
draw = ImageDraw.Draw(image)
# 生成字符串
text = cls.gene_text(cls.number)
# 获取字体尺寸
font_width, font_height = font.getsize(text)
# 填充字符串
draw.text(((width - font_width) / , (height - font_height) / ), text, font=font,
fill=cls.__gene_random_color(, ))
# 绘制干扰线
, cls.line_number):
cls.__gene_line(draw, width, height)
# 绘制噪点
cls.__gene_points(draw, , width, height)
return (text, image)
from flask import make_response
from flask import Flaskfrom io import BytesIO
from flask import render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('login.html')
@app.route('/ver_image_code')
def graph_captcha():
text, image = Captcha.gene_graph_captcha()
out = BytesIO()
image.save(out, 'png')
)
resp = make_response(out.read())
resp.content_type = 'image/png'
return resp
if __name__ == '__main__':
app.run()
---恢复内容结束---
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> <!-- 样式-- > .captcha-addon { padding: 0; /*/ / 这是内边距为0,因为input-group-addon有设置内边距 overflow: hidden;*/ /*/ / 当里面的元素超出则隐藏*/ }
#captcha-img { height: 32px; /*/ / 设置图片的高度为32px cursor: pointer;*/ /*/ / 当鼠标移到图片上变成手的图标*/ } </style></head><body><div class="input-group"> <input type="text" class="form-control" name="graph_captcha" placeholder="图形验证码"> <span class="input-group-addon captcha-addon"> <!--加了一个类captcha-addon--> <img id="captcha-img" name="captcha-img" src="/ver_image_code/1" onclick="get_src()"> <!--加了id aptcha-img--> </span></div>
<script src="{{ url_for('static', filename='jquery-3.3.1.js') }}"></script><script type="text/javascript">
function get_src() { var img = document.getElementById("captcha-img"); img.src = "http://127.0.0.1:5000/ver_image_code/" + Math.random(); }
</script></body></html>
Flask 验证码 点击验证码刷新的更多相关文章
- 微信小程序发送验证码功能,验证码倒计时
data{ timer:'', countDownNum:'发送验证码', } // 点击验证码倒计时获取验证码 Gain:function(e){ let that = this let count ...
- 关于 yii 验证码显示, 但点击不能刷新的处理
先说说 render 与 renderPartial, 各位看官, 先别走, 我没跑题, 这个问题如果需要解决, 关键就在 render 与 renderPartial 的区别. renderPart ...
- thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
这篇文章主要介绍了thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法,结合简单示例形式分析了thinkPHP5框架验证码相关配置.后台验证.前台刷新等操作技巧,学习thinkphp源码的朋 ...
- JS 点击验证码刷新
<img src="/get_valid_img" id="valid-img" title="点击再换一张" class=" ...
- clicaptcha中文点击验证码开发经验总结
现在的验证码真是越来越高级了,12306 的找图验证码,极验的拖动式验证码,还有国外的一些黑科技,能智能判断你是不是机器人的验证码. 验证码的更新迭代让我突然对传统验证码一下子不满足了,出于挑战自我和 ...
- thinkphp3.2 代码生成并点击验证码
本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...
- WPF做12306验证码点击效果
一.效果 和12306是一样的,运行一张图上点击多个位置,横线以上和左边框还有有边框位置不允许点击,点击按钮输出坐标集合,也就是12306登陆的时候,需要向后台传递的参数. 二.实现思路 1.获取验证 ...
- 用JAVA中BufferedImage画出漂亮的验证码点击变化
如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...
- 验证码在后台的编写,并实现点击验证码图片时时发生更新 C# 项目发布到IIS后不能用log4net写日志
验证码在后台的编写,并实现点击验证码图片时时发生更新 验证码在软件中的地位越来越重要,有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试:下面就是实现验证码的基本步骤: ...
随机推荐
- CSS——Flex
任何一个容器都可以指定为Flexbox布局 .flex-container { display: -webkit-flex; /* Safari */ display: flex; } 行内元素可以指 ...
- 使用QQ传输大文件
现在在公网上能传输大文件并且稳定支持断点续传的软件非常少了,可以使用qq来做这件事. qq传输单个文件有时候提示不能超过4g有时候提示不能超过60g,没搞明白具体怎么样. 可以使用qq的传输文件夹功能 ...
- 【转载】 github vue 高星项目
内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...
- Python全栈开发记录_第六篇(生成器和迭代器)
说生成器之前先说一个列表生成式:[x for x in range(10)] ->[0,1,2....,9]这里x可以为函数(因为对python而言就是一个对象而已),range(10)也可 ...
- C#异步方法
Task MainTask; MainTask = Task.Factory.StartNew(() => { //耗时的异步逻辑 });
- Android 开发 ConstraintLayout详解
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3' app:layout_constraintHorizo ...
- Convert Adjacency matrix into edgelist
Convert Adjacency matrix into edgelist import numpy as np #read matrix without head. a = np.loadtxt( ...
- spring 2.5.6 错误:Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher
在运行一个第三方公司交付的项目的时候, 出现: Caused by: java.lang.IllegalStateException: Context namespace element 'annot ...
- Java数组操作十大方法 (转)
定义一个Java数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c&q ...
- Nexus构建
参考文章: Maven远程仓库搭建与配置(https://my.oschina.net/u/1455528/blog/637063) Maven仓库—Nexus环境搭建及简单介绍(http://blo ...