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日

相关文章

  • flask框架使用orm连接数据库的方法示例

    当使用 Flask 框架时,ORM(对象关系映射)是连接数据库的一个好选择。 SQLAlchemy 是一个流行的 ORM 库,它提供了方便的 ORM 接口,可以让我们更轻松地在 Flask 中使用数据库。 下面我们来讲解一下 Flask 框架使用 ORM 连接数据库的方法示例。 环境设置 在使用 Flask 和 SQLAlchemy 之前,我们需要安装 Py…

    Flask 2023年5月15日
    00
  • Flask模板渲染与Get和Post请求详细介绍

    我来为您讲解 “Flask模板渲染与Get和Post请求详细介绍” 的攻略。 Flask模板渲染 在 Flask 中,可以使用 Jinja2 模板引擎渲染模板。 创建模板 首先,我们需要在项目文件夹下创建一个 templates 文件夹,并创建一个 HTML 模板文件。 例如,创建一个名为 index.html 的模板文件: <!doctype htm…

    Flask 2023年5月15日
    00
  • Python动态配置管理Dynaconf的实现示例详解

    针对“Python动态配置管理Dynaconf的实现示例详解”这个话题,我们可以分成以下几个部分进行讲解: 什么是Dynaconf Dynaconf的使用方法 示例一:使用Dynaconf管理Flask应用的配置 示例二:使用Dynaconf和Docker容器管理Django应用的配置 1. 什么是Dynaconf Dynaconf是一个Python库,旨在…

    Flask 2023年5月16日
    00
  • python异步的ASGI与Fast Api实现

    下面是关于“python异步的ASGI与Fast Api实现”的完整攻略,包括两条示例说明: 概述 在Python中,异步编程是一种非常流行的编程范式,以其高效性和低资源消耗而闻名。ASGI(异步服务器网关接口)是Python Web应用程序中使用的异步协议。FastAPI是一个基于ASGI的现代,快速(Fast)框架,可以让你使用Python 3.7+中最…

    Flask 2023年5月16日
    00
  • Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍

    下面给您详细讲解“Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍”的完整攻略。 一对多关系 一对多关系适用于一个模型拥有多个其他模型的实例,但是其他模型的实例只属于一个模型实例。比如一个用户可以拥有多篇文章,但是一篇文章只属于一个用户。 在 Flask sqlalchemy 中可以使用 relationship 属性来建立一对多关系,…

    Flask 2023年5月15日
    00
  • python实现rest请求api示例

    下面是详细讲解“Python实现REST请求API示例”的完整攻略。 一、REST请求API简介 REST(Representational State Transfer)是一种基于HTTP协议的Web服务接口设计风格,它以资源为核心,提供统一的接口设计方法,是目前最流行的Web API开发方式之一。RESTful API的调用方式很简单,即构造一个HTTP…

    Flask 2023年5月16日
    00
  • 基于CentOS搭建Python Django环境过程解析

    下面就是关于如何基于CentOS搭建Python Django环境的完整攻略,包含了两条具体的示例说明。 准备工作 在开始之前,我们需要安装一些必要的软件,包括Python、pip、virtualenv和git等,这可以通过以下命令来完成: sudo yum install python3 python3-pip python3-devel git sudo…

    Flask 2023年5月15日
    00
  • 如何创建一个Flask项目并进行简单配置

    下面是创建Flask项目并进行简单配置的完整攻略,包含两条示例说明。 创建Flask项目 首先,我们需要创建一个Flask项目。创建项目的方法有多种,这里介绍两种常用的创建方式。 方法一:使用Flask官方提供的工具创建项目 Flask官方提供了一个命令行工具Flask CLI,可以用来创建Flask项目。具体操作步骤如下: 安装Flask CLI 打开命令…

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