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写日志
验证码在后台的编写,并实现点击验证码图片时时发生更新 验证码在软件中的地位越来越重要,有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试:下面就是实现验证码的基本步骤: ...
随机推荐
- 通过SQLServer的数据库邮件来发送邮件
前段时间需要做一个发送邮件的功能,于是就花了一点时间研究了一下.发现通过SQLServer就可以发送邮件,只需要配置一下就可以了,而且配置过程很简单.下面来说一下配置过程: 1.启用Database ...
- JS 实现右下角弹窗
<!DOCTYPE HTML> <head> <title>JS实现右下角弹窗</title> <meta http-equiv="co ...
- Mac端解决(含修改8.0.13版的密码):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
1. 安装mysql但是从来没启动过,今天一启动就报错: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2 ...
- Shiro的认证和权限控制
权限控制的方式 从类别上分,有两大类: - 认证:你是谁?–识别用户身份. - 授权:你能做什么?–限制用户使用的功能. 权限的控制级别 从控制级别(模型)上分: - URL级别-粗粒度 - 方法级别 ...
- Python的迭代器和生成器
列表生成式 列表生成式可以快速创建list. >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] ...
- 001.[python学习]写在前面的
0.多动手写写也许你所说的问题就不是问题: 1.最好的帮助文档是dir和help,如下图: 2.如果为了快速完成任务可以选择IDE,否则尽量不要依赖它,因为它的智能导致自己的无能: 3.也许有其他语言 ...
- 打包发布到Tomcat
idea: file-->project structure --> Artifacts --> 点+号 web application exploded from m ...
- linux挂载硬盘分区
[转]https://www.jb51.net/article/138204.htm 基本步骤:分区——格式化——挂载——写入文件 1.使用fdisk -l命令查看添加的硬盘名称,可以看到sdb ...
- 循环队列搜索 Search in Rotated Sorted Array
这里比较重要的是,不要一上来就判断mid 和 target有没有关系.因为数组是无序的,这样的判断毫无结论,只会搞的更复杂.应该先想办法判断出哪一侧是有序的. class Solution { pub ...
- js:苹果手机页面返回,数据不刷新问题
$(function () { var isPageHide = false; window.addEventListener('pageshow', function () { ...