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

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

在当今的互联网世界中,为了防止恶意访问,许多网站在登录和注册表单中都采用了验证码技术。验证码可以防止机器人自动提交表单,确保提交行为背后有一个真实的人类用户。
本文将向您展示如何使用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. 演示视频+完整代码

演示视频如下,篇幅所限,如需完整代码,请打开地址免费获取:https://mp.weixin.qq.com/s/2fgjKvuuwaFvhYt5P68T1A

2023-09-11_113520

6. 总结

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

目录
相关文章
|
Web App开发 数据安全/隐私保护 Python
万能ck提取登录软件,京东贴吧淘宝拼多多cookie提取工具,python框架分享
这个框架使用了Selenium进行浏览器自动化操作,包含了京东和淘宝的登录示例。代码展示了如
|
9月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
10月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
638 0
|
存储 数据库 数据安全/隐私保护
抖音ck提取工具,快手小红书微博哔哩哔哩cookie提取登录软件,python框架
这个框架提供了完整的Cookie提取功能,支持抖音、快手、小红书、微博和哔哩哔哩平台。主要特点包括
|
数据可视化 算法 数据挖掘
Python 3D数据可视化:7个实用案例助你快速上手
本文介绍了基于 Python Matplotlib 库的七种三维数据可视化技术,涵盖线性绘图、散点图、曲面图、线框图、等高线图、三角剖分及莫比乌斯带建模。通过具体代码示例和输出结果,展示了如何配置三维投影环境并实现复杂数据的空间表示。这些方法广泛应用于科学计算、数据分析与工程领域,帮助揭示多维数据中的空间关系与规律,为深入分析提供技术支持。
532 0
Python 3D数据可视化:7个实用案例助你快速上手
|
数据采集 存储 NoSQL
Python爬虫案例:Scrapy+XPath解析当当网网页结构
Python爬虫案例:Scrapy+XPath解析当当网网页结构
|
数据采集 存储 前端开发
Python爬虫自动化:批量抓取网页中的A链接
Python爬虫自动化:批量抓取网页中的A链接
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
1260 86
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API

推荐镜像

更多