python web框架Flask实现图形验证码及验证码的动态刷新实例

针对这个话题,我将详细解释如何使用 Flask 实现图形验证码及验证码的动态刷新。

需求分析:

我们的目标是实现两个示例:

  • Example 1:静态图形验证码
  • Example 2:动态图形验证码

环境部署:

首先,我们需要安装 Flask 和 Pillow 两个库。Flask 用于构建我们的 Web 应用程序,而 Pillow 用于操作图像。

pip install flask
pip install pillow

示例 1:静态图形验证码

步骤 1:创建 Flask 应用程序

from flask import Flask, make_response, session
from PIL import Image, ImageDraw, ImageFont
import random

app = Flask(__name__)
app.secret_key = 'hard to guess string'

这里我们引入 Flask 应用程序和相关库,并创建了一个 Flask 的实例 app,并设置了一个 secret_key,用于加强安全性。

步骤 2:定义路由

@app.route('/static')
def get_static_captcha():
    captcha_str = ''.join(random.sample('0123456789abcdefghijklmnopqrstuvwxyz', 4))
    img = Image.new('RGBA', (120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(img)
    fonts_path = '/usr/share/fonts/truetype/freefont/FreeMono.ttf'
    font = ImageFont.truetype(fonts_path, 25)
    draw.text((10, 5), captcha_str, font=font, fill=(0, 0, 0))
    response = make_response(img.tobytes())
    response.headers['Content-Type'] = 'image/png'
    session['captcha'] = captcha_str
    return response

这里我们定义了一个路由,当用户访问 /static 路径时,会返回一个 PNG 图片。

步骤 3:设置图片响应头

response.headers['Content-Type'] = 'image/png'

设置图片的响应头(MIME 类型)为 image/png。

步骤 4:生成验证码字符串,并将其存储在 session 中

captcha_str = ''.join(random.sample('0123456789abcdefghijklmnopqrstuvwxyz', 4))
session['captcha'] = captcha_str

这里我们使用 Python 的 random 模块生成 4 位随机字符串,用于生成验证码,并将验证码字符串存储在 session 中,以备后续验证。

步骤 5:使用 Pillow 生成图形验证码

img = Image.new('RGBA', (120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
fonts_path = '/usr/share/fonts/truetype/freefont/FreeMono.ttf'
font = ImageFont.truetype(fonts_path, 25)
draw.text((10, 5), captcha_str, font=font, fill=(0, 0, 0))
response = make_response(img.tobytes())

使用 Pillow 库操作图像,生成 120 * 30 的白色图片,并在其上绘制生成的验证码,返回生成的图片对象。

步骤 6:启动 Flask 应用

if __name__ == '__main__':
    app.run()

将应用程序运行在本地服务器上。

启动应用后,可以通过浏览器访问 http://127.0.0.1:5000/static,即可看到生成的验证码。

示例 2:动态图形验证码

步骤 1:安装 jQuery

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask dynamic captcha demo</title>
    <script src="https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
    <img src="/dynamic" id="dynamic-captcha">
    <button id="refresh">Refresh</button>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#refresh").click(function () {
                $("#dynamic-captcha").attr("src", "/dynamic");
            });
        });
    </script>
</body>
</html>

这里使用了 jQuery 库,添加了一个动态刷新验证码的按钮,当用户点击按钮时,会使用 Ajax 技术重新加载 /dynamic 路径,获取新的验证码。

步骤 2:创建路由

@app.route('/dynamic')
def generate_dynamic_captcha():
    captcha_str = ''.join(random.sample('0123456789abcdefghijklmnopqrstuvwxyz', 4))
    img = Image.new('RGBA', (120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(img)
    fonts_path = '/usr/share/fonts/truetype/freefont/FreeMono.ttf'
    font = ImageFont.truetype(fonts_path, 25)
    draw.text((10, 5), captcha_str, font=font, fill=(0, 0, 0))
    response = make_response(img.tobytes())
    response.headers['Content-Type'] = 'image/png'
    session['captcha'] = captcha_str
    return response

这里我们定义了一个新的路由 /dynamic,与 /static 相比,这里增加了一个刷新验证码字符串的操作。

步骤 3:编写 HTML 模板

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask dynamic captcha demo</title>
    <script src="https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
    <img src="/dynamic" id="dynamic-captcha">
    <button id="refresh">Refresh</button>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#refresh").click(function () {
                $("#dynamic-captcha").attr("src", "/dynamic");
            });
        });
    </script>
</body>
</html>

这里定义了一个包含动态或静态验证码的图片标签,并添加一个刷新按钮。

步骤 4:使用 Flask 渲染模板

@app.route('/')
def index():
    return render_template('index.html')

这里我们将模板 index.html 渲染为响应内容。

步骤 5:启动 Flask 应用

if __name__ == '__main__':
    app.run()

将应用程序运行在本地服务器上。

启动应用后,可以通过浏览器访问 http://127.0.0.1:5000,即可看到动态验证码的示例,而点击 Refresh 按钮后会刷新验证码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python web框架Flask实现图形验证码及验证码的动态刷新实例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 使用Python FastAPI构建Web服务的实现

    使用Python FastAPI构建Web服务的实现可以分为以下步骤: 1. 安装FastAPI FastAPI是一个基于Python的Web框架,提供了快速、简单和易于使用的方式来构建Web API。您可以使用以下命令在Python环境中安装FastAPI: pip install fastapi 2. 安装uvicorn uvicorn是一个Python…

    Flask 2023年5月16日
    00
  • 在 Django/Flask 开发服务器上使用 HTTPS

    使用HTTPS是现代Web开发中必不可少的安全手段之一,可以加密Web应用程序和服务器之间的通信,防止敏感数据被恶意截取。在Django/Flask开发服务器上使用HTTPS,可以提高Web应用程序的安全性。下面是详细的攻略: 一、Django 1. 生成证书和密钥 使用openssl在本地主机上生成自签名ssl证书和密钥文件: $ openssl req …

    Flask 2023年5月15日
    00
  • 微信小程序前端如何调用python后端的模型详解

    “微信小程序前端如何调用python后端的模型”需要通过Web API的方式进行调用。下面是详细的步骤: 步骤1:设计后端Web API 后端Web API实现了模型的调用,并输出模型结果。可以使用Flask或Django等框架来实现Web API。以下是一个用Flask编写的Web API的示例代码: from flask import Flask, re…

    Flask 2023年5月16日
    00
  • Python Flask-Login实现用户会话管理

    我将为您讲解“Python Flask-Login实现用户会话管理”的完整攻略,包含两条示例说明。 提供背景知识 Flask-Login是一个用于Flask的用户会话管理库,提供了方便的登录、注销等功能。通过Flask-Login,我们可以很容易地实现用户会话管理的功能。 安装Flask和Flask-Login 在开始之前,我们需要安装Flask和Flask…

    Flask 2023年5月15日
    00
  • 在Python的Flask框架下收发电子邮件的教程

    在Python的Flask框架下收发电子邮件需要使用到Python标准库中的smtplib和email模块。 安装Flask-Mail 在开始之前,需要先安装Flask-Mail。 可以在终端中使用以下命令进行安装: pip install Flask-Mail 或者在服务器/虚拟环境中使用以下命令进行安装: sudo pip install Flask-M…

    Flask 2023年5月16日
    00
  • flask使用session保存登录状态及拦截未登录请求代码

    下面是“flask使用session保存登录状态及拦截未登录请求代码”的完整攻略,包含两条示例说明。 什么是Session Session 是指用户与Web应用间的一次会话,可以用来存储在整个会话过程中需要跨越请求和响应之间一直使用的数据。 在 Flask 中,可以使用 session 对象保存用户会话数据。session 对象是一个相当有用的、用于临时存储…

    Flask 2023年5月16日
    00
  • Python中turtle库常用代码汇总

    让我分步骤地介绍一下“Python中turtle库常用代码汇总”的完整攻略: 1. turtle库概述 turtle库是Python语言内置的绘图库,可以让我们使用海龟的方式来绘制图形,如线条、图案、形状等。turtle库在Python 3中默认安装,无需额外安装。下面是turtle库的使用方法: import turtle 2. 常用命令 turtle库中…

    Flask 2023年5月15日
    00
  • Flask wtforms实现表单验证使用

    下面是详细的“Flask wtforms实现表单验证使用”的攻略: 一、前置知识 在使用 Flask wtforms 实现表单验证前,需要了解以下知识: Flask:Python Web 应用框架,提供了一个模块化的方式组织 Web 应用程序。 Flask wtforms:基于 Flask 的表单验证扩展,可以方便地进行表单验证。 HTML 表单:Web 表…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部