基于Python+Flask实现一个简易网页验证码登录系统案例

 更新时间:2023年09月22日 10:43:47   作者:子午  
当今的互联网世界中,为了防止恶意访问,许多网站在登录和注册表单中都采用了验证码技术,验证码可以防止机器人自动提交表单,确保提交行为背后有一个真实的人类用户,本文将向您展示如何使用Python的Flask框架来创建一个简单的验证码登录系统

1. 开始之前

首先,确保你已经安装了以下所需的库:

pip install flask Pillow
  • Flask: 一个轻量级的Web服务器和框架。
  • Pillow: 处理图像操作,用于生成验证码图像。

2. 生成验证码图像

我们使用Pillow库来生成验证码图像。除了显示数字和字母,为了增加安全性,我们还会在图像上添加一些干扰线条和噪点。

from PIL import Image, ImageDraw, ImageFont
import random
import string
def generate_captcha_image():
    # 定义图片大小及背景颜色
    image = Image.new('RGB', (120, 30), color=(73, 109, 137))
    # 使用系统自带字体,或指定字体文件路径
    font_path = "./arial.ttf"
    fnt = ImageFont.truetype(font_path, 15)
    d = ImageDraw.Draw(image)
    # 生成5位数的验证码文本
    captcha_text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))
    d.text((10, 10), captcha_text, font=fnt, fill=(255, 255, 0))
    # 添加干扰线条和噪点
    for _ in range(random.randint(3, 5)):
        start = (random.randint(0, image.width), random.randint(0, image.height))
        end = (random.randint(0, image.width), random.randint(0, image.height))
        d.line([start, end], fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200)))
    for _ in range(100):
        xy = (random.randrange(0, image.width), random.randrange(0, image.height))
        d.point(xy, fill=(random.randint(50, 200), random.randint(50, 200), random.randint(50, 200)))
    return image, captcha_text

3. 使用Flask建立Web应用

现在,我们使用Flask来创建一个Web应用,并展示登录页面与验证码图像。

from flask import Flask, render_template, jsonify, request, session
import io
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here'
@app.route('/')
def index():
    # 渲染登录页面
    return render_template('login.html')
@app.route('/captcha')
def captcha():
    # 使用上述函数生成验证码图片
    image, captcha_text = generate_captcha_image()
    # 将验证码文本存储到session,以便之后进行验证
    session['captcha'] = captcha_text
    buf = io.BytesIO()
    image.save(buf, format='PNG')
    buf.seek(0)
    return buf.getvalue(), 200, {
        'Content-Type': 'image/png',
        'Content-Length': str(len(buf.getvalue()))
    }

4. 处理登录请求

登录时,我们需要验证用户输入的验证码是否与我们生成的匹配。

@app.route('/login', methods=['POST'])
def login():
    # 检查用户输入的验证码是否与session中的一致
    if request.json.get('captcha', '').upper() == session.get('captcha', '').upper():
        return jsonify({'status': 'success', 'message': '登录成功'})
    else:
        return jsonify({'status': 'error', 'message': '验证码错误'}), 400

5. 总结

通过上面的代码,我们创建了一个简单的网站验证码登录系统。用户需要输入与图片上显示的验证码匹配的文本来验证自己是人类。这不仅提高了安全性,而且能够有效地阻止恶意机器人。 尽管此示例只是基础版本,但您可以在此基础上添加更多的安全性措施,例如使用更复杂的验证码、添加限制登录尝试次数的功能或使用其他验证方法。 希望本文能帮助您了解如何使用Python和Flask来创建验证码登录系统。在实际开发中,为了提供更好的用户体验和安全性,建议进一步完善和增强此系统。

以上就是基于Python+Flask实现一个简易网页验证码登录系统案例的详细内容,更多关于Python+Flask网页验证码登录的资料请关注脚本之家其它相关文章!

相关文章

  • 详解pandas绘制矩阵散点图(scatter_matrix)的方法

    详解pandas绘制矩阵散点图(scatter_matrix)的方法

    这篇文章主要介绍了详解pandas绘制矩阵散点图(scatter_matrix)的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 在 Python 中接管键盘中断信号的实现方法

    在 Python 中接管键盘中断信号的实现方法

    要使用信号,我们需用导入 Python 的signal库。然后自定义一个信号回调函数,当 Python 收到某个信号时,调用这个函数。 ,下面通过实例代码给大家介绍在 Python 中接管键盘中断信号,需要的朋友可以参考下
    2020-02-02
  • python中的getattribute 、getattr、setattr方法详解

    python中的getattribute 、getattr、setattr方法详解

    这篇文章主要介绍了python中的getattribute 、getattr、setattr方法详解,python类中默认有一些特殊方法,这篇文章记录一下特殊方法的功能及用法,需要的朋友可以参考下
    2023-11-11
  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    这篇文章主要介绍了Django中的AutoField字段使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python实现12306登录并保存cookie的方法示例

    python实现12306登录并保存cookie的方法示例

    这篇文章主要介绍了 python实现12306登录并保存cookie的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • python读取TXT每行,并存到LIST中的方法

    python读取TXT每行,并存到LIST中的方法

    今天小编就为大家分享一篇python读取TXT每行,并存到LIST中的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • pytorch网络模型构建场景的问题介绍

    pytorch网络模型构建场景的问题介绍

    这篇文章主要介绍了pytorch网络模型构建场景的注意点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • Python实现计算两个指定日期相差几年几月几日

    Python实现计算两个指定日期相差几年几月几日

    这篇文章主要为大家详细介绍了如何使用Python实现计算两个日期之间相差多少年,多少月,多少天,文中的的示例代码讲解详细,需要的可以参考下
    2024-02-02
  • 使用Tensorboard工具查看Loss损失率

    使用Tensorboard工具查看Loss损失率

    今天小编就为大家分享一篇使用Tensorboard工具查看Loss损失率,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python图形界面tkinter的使用技巧

    python图形界面tkinter的使用技巧

    这篇文章主要介绍了python图形界面tkinter的使用技巧,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论