flask实现验证码并验证功能

那么首先来介绍一下 Flask。Flask 是一款轻量级的 Web 应用框架,它基于 Jinja2 模板引擎,Werkzeug WSGI 工具包和 Python 标准库。它具有灵活性、可扩展性和易于使用等特点,适合用于快速地搭建原型应用、服务、RESTful API 和网站等。

当在网站或后台管理系统中设计登录表单时,通常需要使用验证码验证功能来防止恶意 BOT 及暴力破解,下面介绍如何在 Flask 中实现验证码及验证码验证功能。

Flask 验证码实现

  1. 引入依赖包

安装 Pillow 库:

pip install Pillow

安装 captcha 库:

pip install captcha
  1. 生成图片验证码
from flask import Flask, Response
from captcha.image import ImageCaptcha
app = Flask(__name__)

@app.route('/captcha')
def gen_captcha():
    image = ImageCaptcha(fonts=['./times_new_york.ttf'])
    code = 'ABCD'  # 生成随机验证码字符
    data = image.generate(code)  # 生成图片验证码
    response = Response(data.getvalue(), mimetype='image/png')
    response.headers['Content-Type'] = 'image/png'
    return response
  1. 生成 Math 类型验证码
from flask import Flask, Response
from captcha.image import ImageCaptcha
from captcha.math import MathCaptcha
app = Flask(__name__)

@app.route('/captcha')
def gen_captcha():
    captcha_type = 'math'  # 指定验证码类型为数学计算类型
    if captcha_type == 'math':
        captcha = MathCaptcha()
        code = captcha.generate_expression()
        image = ImageCaptcha(fonts=['./times_new_york.ttf'])
    else:
        captcha = ImageCaptcha(fonts=['./times_new_york.ttf'])
        code = 'ABCD'  # 生成随机验证码字符
        image = captcha
    data = image.generate(code)  # 生成图片验证码
    response = Response(data.getvalue(), mimetype='image/png')
    response.headers['Content-Type'] = 'image/png'
    return response

Flask 验证码验证功能

通过生成图片验证码后,需要在表单提交时接收验证码并验证其正确性。下面介绍如何在 Flask 中实现验证码验证功能。

from flask import Flask, request
from captcha.image import ImageCaptcha
from captcha.math import MathCaptcha
app = Flask(__name__)

@app.route('/captcha', methods=['GET'])
def gen_captcha():
    captcha_type = 'math'  # 指定验证码类型为数学计算类型
    if captcha_type == 'math':
        captcha = MathCaptcha()
        code = captcha.generate_expression()
        image = ImageCaptcha(fonts=['./times_new_york.ttf'])
    else:
        captcha = ImageCaptcha(fonts=['./times_new_york.ttf'])
        code = 'ABCD'  # 生成随机验证码字符
        image = captcha
    data = image.generate(code)  # 生成图片验证码
    response = Response(data.getvalue(), mimetype='image/png')
    response.headers['Content-Type'] = 'image/png'
    session['captcha'] = captcha.solve_expression(code)  # 将验证码字符存入 session 中
    return response

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']
    captcha = request.form['captcha']
    if session['captcha'] == captcha:  # 验证表单提交的验证码和 session 中存储的验证码是否相等
        # TODO: 验证用户名和密码
        return 'Login Success!'
    else:
        return 'Captcha Error!'

由上述代码可知,通过将验证码字符存入 session 中,在提交表单时比较表单提交的验证码和 session 中存储的验证码是否相等,以实现验证码验证功能。

其中,通过使用 captcha.solve_expression(code) 方法计算生成的数学表达式的结果,并将其存入 session 中。

另外,在具体实现中,还需要根据表单类型和应用场景的需求选择具体的验证码类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flask实现验证码并验证功能 - Python技术站

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

相关文章

  • Python利用flask操作Redis的方法详解

    下面详细讲解“Python利用flask操作Redis的方法详解”的完整攻略及示例说明。 1. Redis介绍 Redis是一个使用ANSI C编写的开源、内存数据结构存储库,它通过键值来存储所有类型的数据,包括字符串、哈希、列表等,并支持各种类型的操作,比如排序、范围查询、集合操作等。 2. Flask介绍 Flask是一个轻量级的Python Web框架…

    Flask 2023年5月15日
    00
  • Python使用Flask框架同时上传多个文件的方法

    Python使用Flask框架同时上传多个文件的方法需要以下步骤: 1. 创建HTML表单 HTML表单需要添加enctype属性,值是multipart/form-data,表示表单数据同时包含文本和二进制数据(文件)。表单中使用input标签的type属性为file的元素来让用户选择需要上传的文件,如下所示: <form action="…

    Flask 2023年5月15日
    00
  • Vue打包路径配置过程

    下面是 Vue 打包路径配置的完整攻略: 1. 理解打包路径 在 Vue 应用中,所有的资源文件都可以被打包(Bundle)到一起,如 JS、CSS、图片等等。在浏览器端使用时,需要访问打包后的文件,这些文件在浏览器中被认为是相对于 HTML 引用的路径来解析的。因此,我们需要对打包路径进行配置。打包路径分为两种情况: 在开发环境下使用的路径 在生产环境下使…

    Flask 2023年5月16日
    00
  • Flask-蓝图 blueprint详情

    Flask-蓝图(blueprint)是Flask框架的一个重要概念,常用于将一个大型应用切割成多个模块,分别进行开发和维护,提高了代码的可维护性和可读性。在本文中,我们将详细讲解Flask-蓝图的各种细节,并介绍两个简单的示例说明。 什么是Flask-蓝图(blueprint) Flask-蓝图(blueprint)是Flask框架中一个可重用的程序组件。…

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

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

    Flask 2023年5月15日
    00
  • 详解flask表单提交的两种方式

    下面就给您详细讲解“详解flask表单提交的两种方式”的完整攻略。 前言 在使用 Flask 开发中,处理表单是必不可少的,它关系到与用户之间的数据交互。本文将会讨论 Flask 中的两种表单提交方式,包括 get 和 post 请求。 get请求 在 Flask 中,get 请求相对简单,直接用 query string 就能传递表单数据,处理方式如下: …

    Flask 2023年5月15日
    00
  • Flask带参URL传值的实现方法

    下面是完整的攻略,包含两个示例说明。 Flask带参URL传值的实现方法 在基于Flask框架构建Web应用程序的开发中,要实现将参数传递给URL的功能,Flask提供了多种实现方法。下面分别对这些方法进行详细的讲解。 方法1:基于URL路径传递参数 这是一种常见的URL传递参数的方式,在URL路径中添加参数,可以通过Flask提供的URL规则,解析出参数并…

    Flask 2023年5月16日
    00
  • python flask项目打包成docker镜像发布的过程

    下面我来分享一下Python Flask项目打包为Docker镜像并发布的完整攻略。 环境准备 在开始之前,你需要确保已经安装好以下工具: Docker Docker-Compose Python Flask Git 如果你还没有安装,可以参考以下步骤进行安装: 安装Docker和Docker-Compose。可以访问Docker官网并按照官网的指引进行安装…

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