Python Flask实现图片验证码与邮箱验证码流程详细讲解

细致的Python Flask实现图片验证码与邮箱验证码流程详细讲解,以下就是教程:

1. 图片验证码的流程

1.1 安装依赖库

首先要安装依赖库,可以使用pip直接安装如下库

pip install flask flask-wtf Pillow
  • Flask是Web框架
  • Flask-wtf是Flask的表单框架
  • Pillow是Python中的图像处理库

1.2 创建Flask应用及路由

在Python文件中,我们需要导入相关的库,用Flask来搭建我们的web应用,代码如下:

from flask import Flask, make_response, request, jsonify, session
from flask_wtf import CSRFProtect
from flask_wtf.csrf import generate_csrf
from PIL import Image, ImageDraw, ImageFont
import random
import io

接下来需要创建Flask实例,并设置一些属性,如下所示:

app = Flask(__name__)
app.config.from_pyfile('config.py')
csrf = CSRFProtect(app)

这里使用了一个叫config.py的配置文件,用来设置一些常规的配置项,如下所示:

#debug模式
DEBUG = True
#安全密钥
SECRET_KEY = 'i-am-a-secret-key'
#CSRF保护
WTF_CSRF_ENABLED = True

接着创建Route来设置URL和URL处理函数,代码如下:

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

@app.route('/gen_captcha', methods=['GET'])
def generate_captcha():
    # 具体生成验证码的代码
    pass

我们目前只是声明了Route方法,函数的实现我们会在后面进行说明。

1.3 开始生成验证码代码

生成验证码的主要三个过程:

  • 生成随机字符串
  • 绘制验证码图像
  • 返回图像

我们分步骤来看。

1.3.1 生成随机字符串

def generate_random():
    return ''.join(random.sample(
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 4))

这个函数将会生成长度为4的随机字符串,用于作为验证码的数字。

1.3.2 绘制验证码图像

def generate_captcha_image(random_str):
    image = Image.new('RGB', (100, 38), (255, 255, 255))
    font = ImageFont.truetype("arial.ttf", 24)
    draw = ImageDraw.Draw(image)
    draw.text((10, 10), random_str, font=font, fill=(0, 0, 0))
    for i in range(random.randint(2, 4)):
        start = (random.randint(0, 100), random.randint(0, 38))
        end = (random.randint(0, 100), random.randint(0, 38))
        draw.line([start, end], fill=(0, 0, 0))
    return image

这个方法将会接收一个字符串参数random_str,然后生成相应的验证码图像,步骤如下:

  • 创建100x38大小的白色图像
  • 加载字体,设置字体大小(24),写入随机字符串
  • 随机生成2-4条干扰直线
  • 返回图像

1.3.3 返回图像

@app.route('/gen_captcha', methods=['GET'])
def generate_captcha():
    random_str = generate_random()
    img = generate_captcha_image(random_str)
    buf = io.BytesIO()
    #使用JPEG格式保存图像,然后在HTTP响应中返回图像数据
    img.save(buf, 'JPEG', quality=70)
    buf_str = buf.getvalue()
    response = make_response(buf_str)
    response.headers['Content-Type'] = 'image/jpeg'
    response.headers['Cache-Control'] = 'no-store'
    # 将生成的验证码字符串存入session
    session['captcha'] = random_str
    return response

这个方法实现将验证码图片返回客户端,为防止浏览器缓存,设置了缓存控制响应头,同时将验证码的字符串存储在session中。

1.4 验证码校验

接下来,我们校验验证码输入是否正确。在某个验证需求的位置,我们定义如下接口:

@app.route('/verify_captcha', methods=['POST'])
def verify_captcha():
    captcha = session.pop('captcha', None)
    if not captcha:
        return jsonify({'status': '0', 'msg': '验证码已失效'})
    user_input = request.form.get('captcha', '').strip()
    if user_input.lower() != captcha.lower():
        return jsonify({'status': '0', 'msg': '验证码错误'})
    return jsonify({'status': '1', 'msg': '验证成功'})

其实这个接口就是一个标准的POST Form提交处理,从Session中获取到验证码字符串的值,然后比对用户提交的值,如果一致则表示验证成功,否则就是验证失败。

1.5 完整的示例

完整的样例代码可以到这里查看。

2. 邮箱验证码的流程

2.1 安装依赖库

在我们开始之前,需要先安装如下库:

pip install flask flask-wtf flask-mail
  • Flask是Web框架
  • Flask-mail是Flask邮件框架

2.2 邮箱配置

能够使用发邮件的服务(SMTP)就行,在这里我使用网易邮件来提供SMTP服务,当然,其他也是可以的,如下是配置信息:

EMAIL_SERVER = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_USERNAME = 'Your mail.163.com email address'
EMAIL_PASSWORD = 'Your mail.163.com email password'

注意:这里需要修改‘你的邮箱地址’和‘你的邮箱密码’才能进行使用。

2.3 发送邮件

先创建一个邮件实例对象msg,在构造该对象的过程中需要添加发送者和接收者的信息以及邮件内容,如下所示:

from flask import Flask
from flask_mail import Mail, Message
app = Flask(__name__)

app.config.update(
    #邮箱服务器
    MAIL_SERVER='smtp.163.com',
    #邮箱端口
    MAIL_PORT=25,
    #邮箱用户名
    MAIL_USERNAME='Your mail.163.com email address',
    #邮箱密码,注意这里是授权码
    MAIL_PASSWORD='Your mail.163.com authorization code',
    #邮箱默认发送者
    MAIL_DEFAULT_SENDER='Your mail.163.com email address'
)

mail = Mail(app)

@app.route("/send_email")
def send_email():
    #收件人的邮箱,多个邮箱用逗号分隔
    recipients = ['123456@163.com']
    #创建邮件
    msg = Message('邮件标题',
                  recipients=recipients)
    #设置邮件内容
    msg.body = '邮件正文 <h1>测试Flask发送邮件!</h1>'
    #发送邮件
    mail.send(msg)
    return "发送邮件成功"

这里用到了邮件框架中的MailMessage两个类,分别用于邮件的实例创建和邮件类型以及信息的设置。

2.4 生成验证码

话不多说直接上代码,如下所示:

def generate_random():
    return ''.join(random.sample(
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 4))

def send_email_code(to):
    code = generate_random()
    msg = Message('注册码', recipients=[to])
    msg.body = 'Hello, 您的注册码是:%s , 有效期为5分钟。' % code
    mail.send(msg)
    return code

这个方法用于生成四位数的随机验证码,并将授权码发送到指定邮箱地址。

2.5 完整的示例

完整的样例代码可以到这里查看,更多注释请查看代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Flask实现图片验证码与邮箱验证码流程详细讲解 - Python技术站

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

相关文章

  • Python带动态参数功能的sqlite工具类

    一、Python带动态参数功能的sqlite工具类 Python自带有SQLite模块,可以很方便地对SQLite进行操作,但是在实际使用过程中,传递静态参数很容易出现问题。为了解决这个问题,可以使用Python的动态参数功能来对SQLite进行操作。SQLite工具类是一个可以完成这个任务的Python模块,可以实现数据库的增删改查等操作。 二、SQLit…

    Flask 2023年5月16日
    00
  • Flask中Cookie和Session理解与作用介绍

    Flask中的Cookie和Session是处理Web应用程序认证和授权的两种重要机制。本文将详细讲解Flask中Cookie和Session的理解与作用,并介绍它们的具体应用。 1. Flask中的Cookie 1.1 Cookie的介绍 Cookie是存储在客户端的小型文本文件,由服务器提供,在服务器和浏览器之间传递。Cookie通常用于内容管理系统的用…

    Flask 2023年5月15日
    00
  • python+flask编写一个简单的登录接口

    下面将为你详细讲解“Python+Flask编写一个简单的登录接口”的完整攻略以及两条示例说明。 一、准备工作 在开始编写登录接口前,需要进行以下准备工作: 1.安装Python和Flask,具体安装步骤可以参考官方文档。 2.安装Flask扩展flask_restful,可以使用以下命令进行安装: pip install flask_restful 二、编…

    Flask 2023年5月15日
    00
  • python flask sqlalchemy连接数据库流程介绍

    下面我将详细讲解如何使用Python Flask和SQLAlchemy连接数据库,并提供两个示例说明。 Flask和SQLAlchemy连接数据库的流程 连接数据库是Web应用程序开发中非常重要的一部分。Python Flask框架提供了一个Python ORM库 – SQLAlchemy,帮助我们更便捷地连接数据库。 下面是Flask和SQLAlchemy…

    Flask 2023年5月15日
    00
  • 深入flask之异步非堵塞实现代码示例

    以下是关于“深入flask之异步非堵塞实现代码示例”的完整攻略。该攻略包括两部分示例的说明:异步非堵塞实现的示例和使用gunicorn结合gevent的示例。 异步非堵塞实现示例 在Flask中,异步非堵塞实现可以通过使用Flask-SocketIO包中的socketio.run()方法。该方法基于gevent实现了异步非堵塞模型。 首先,需要安装Flask…

    Flask 2023年5月15日
    00
  • flask中的wtforms使用方法

    下面是有关Flask中使用WTForms的详细攻略。 WTForms简介 WTForms是一个Python第三方库,用于构建Web表单。它为表单字段提供了类型安全、数据验证和呈现模板的便捷方法。WTForms还提供了可扩展的表单字段和验证器,以方便自定义表单实现。 此外,WTForms还具有与Flask框架的集成。因此,在Flask应用程序中使用WTForm…

    Flask 2023年5月16日
    00
  • 基于Python Dash库制作酷炫的可视化大屏

    下面是基于Python Dash库制作可视化大屏的完整攻略,分为以下几步: 步骤一:安装Dash库 在Python环境中,安装Dash库可使用以下命令: pip install dash==1.21.0 步骤二:创建Dash应用 导入Dash库中的必要模块: import dash import dash_html_components as html im…

    Flask 2023年5月16日
    00
  • Python的Flask框架中集成CKeditor富文本编辑器的教程

    下面我来详细讲解如何在Python的Flask框架中集成CKeditor富文本编辑器。 步骤一:安装Flask和CKEditor库 首先确保已经安装了Flask和CKEditor库。如果没有安装,可以使用以下命令进行安装: pip install flask-ckeditor 步骤二:配置Flask应用 在Flask应用的配置文件中,添加以下代码段: fro…

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