zdppy+vue3+onllyoffice开发文档管理系统实战 20240814上课笔记 验证码功能的进一步优化

news2024/11/13 22:38:06

遗留问题

  • 1、实现验证码的功能
  • 2、要记录登录的Token和用户名,跳转到首页
  • 3、注册功能
  • 4、用户管理
  • 5、角色管理
  • 6、权限管理
  • 7、分享功能

当前进度

目前我们已经封装了zdppy_captcha这个框架,这个框架是专门用来生成验证码的。

缺少一些功能:

  • 1、如何通过接口的方法,能够拿到这个验证码
  • 2、如何定制验证码图片的大小
  • 3、如何校验验证码是否正确
  • 4、将验证码生成base64字符串

下一步计划

  • 1、如何通过接口的方法,能够拿到这个验证码
  • 2、如何定制验证码图片的大小
  • 3、如何校验验证码是否正确
  • 4、将验证码生成base64字符串
  • 5、要记录登录的Token和用户名,跳转到首页
  • 6、注册功能
  • 7、用户管理
  • 8、角色管理
  • 9、权限管理
  • 10、分享功能

如何通过接口的方法,能够拿到这个验证码

想法1

将bytesio转换为base64字符串,往前端传递,前端通过src显示base64字符串。

要解决的问题:

  • 1、怎么转base64?python自带了一个库
  • 2、前端怎么渲染base64图片?有个js库能转回来

想法2

将bytesio以文件流的形式往前端传递,浏览器访问一个URL地址,直接得到验证码图片。

前端的src访问这个地址,能够直接渲染这张图片?

要解决的问题:

  • 1、如何返回文件流?

Python将bytes转换为base64字符串

代码实现:

import random
import base64

from zdppy_captcha.image import ImageCaptcha

# 生成随机字符串
code = random.sample('abcdefghijklmnopqrstuvwxyz1234567890', 4)  # 随机选取4个不重复字符串,返回一个列表

# 生成图片验证码对象
image = ImageCaptcha()

# 第三种使用方式:生成图片验证码BytesIO
data = image.generate(code)
print(data, type(data))

# 转换为base
print(base64.b64encode(data.getvalue()).decode('utf8'))

测试地址:https://www.lddgo.net/convert/base64-to-image

测试结果:
在这里插入图片描述

封装为便捷的方法

目标就是通过调用一个函数,能够直接得到这个验证码的真实值,以及图片base64字符串。

这个真实值,可以用来缓存,在前端传递验证码过来的时候,用来比对,前端传递过来的验证码是否正确。

前端拿到的应该是base64字符串,它拿着这个字符串在页面中渲染,让用户根据验证码图片的内容,填写验证码,再将这个验证码发送到后端接口,进行比对。

最终,我们封装了如下方法:

import zdppy_captcha as captcha

# 获取验证码以及base64图片
code, img = captcha.get_base64(6)
print(code)
print(img)

这个方法支持如下参数:

def get_base64(width=160, height=60, num=4):
    """
    生成base64格式的随机字符串
    建议校验的时候不区分大小写
    :param width: 验证码图片的宽度
    :param height: 验证码图片的高度
    :param num: 字符串中验证码的个数
    :return: 真实值,base64图片字符串
    """

小总结

如果我们需要的是一个底层生成图片验证码的库的话,到这一步,就已经基本实现了。

我们接下来,只需要将这个方法,引入到zdppy的对应接口中,让zdppy_api暴露获取图片验证码的接口,以及一个校验验证码的接口即可。

不过我们这里有个需要考虑的地方:校验验证码的接口是和登录接口放一块?还是分为两个接口?

用我们zdppy框架的话,基本就不用考虑了。因为登录功能是在zdppy_amauth模块封装的,如果要嵌入登录功能的话,需要对接口做改造。

所以,我们这里采用的方案是将验证码校验的功能单独封装为一个接口。

另外一个功能需要考虑:获取验证码和校验验证码的功能非常常见,是否需要封装为更便捷的功能?

接下来要做:

  • 方案1:在项目中整合zdppy_captcha模块,编写获取验证码接口和校验验证码接口
  • 方案2:继续封装一个模块,用于生成获取验证码接口和校验验证码接口,项目中直接调用

怎么区分验证码是哪个用户的验证码?

  • 在生成验证码的时候,同时生成一个唯一的key,让用户校验验证码的时候,不仅要传递验证码,也要传递这个key过来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

024集——批量复制文字样式、改变文本文字样式——vba代码实现

CAD vba 不可直接修改文字样式的名称,可复制文字样式,文字样式名称前加特定前缀 要为对象改变文字样式,可使用 StyleName 属性。 If ent.ObjectName "AcDbText" Then ent.StyleName "新的" Set sel creatsel("…

【C#】读取与写入txt文件内容

在 C# 中读取和写入文本文件内容是一个常见的任务。以下是使用几种不同方法读取和写入文本文件的示例。 一、读取txt文件内容 1.1 使用 StreamReader using System; using System.IO;class Program {static void Main(){string filePath "C:\path\to\your\file.txt&qu…

【Unity打包Android】Gradle报错,Deprecated Gradle features were used in this build ···

Unity 2020.3.41f1c1 打包Android 加入Google Admob广告SDK后,打包Android失败,具体报错如下: 报错1: Starting a Gradle Daemon, 2 stopped Daemons could not be reused, use --status for details> Configure project :l…

Hutool找出对象修改前后的字段变化

首先Maven引入Hutool依赖&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.21</version> <!-- 请根据实际最新版本调整 --></dependency> 测试&#xff1a; 1…

OpenAI API error: “Unrecognized request argument supplied“

题意&#xff1a;OpenAI API 错误&#xff1a;‘提供了无法识别的请求参数’ 问题背景&#xff1a; Im receiving an error when calling the OpenAI API. Its not recognizing file argument, which I submitted to the API. 我在调用 OpenAI API 时遇到错误。API 不识别我提…

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…

日撸Java三百行(day23:使用具有通用性的队列)

目录 前言 一、基础知识准备 1.Object类 2.Integer类 2.1包装类 2.2装箱和拆箱 2.3Integer类的常见方法 二、代码实现 1.队列创建及初始化 2.方法创建 3.数据测试 4.完整的程序代码 总结 前言 在昨天&#xff0c;我们使用了两个队列来辅助完成二叉树的“压缩顺序…

Android gradle 构建

Understanding Tasks - Gradle task kapt 是 Kotlin 语言的注解处理器&#xff0c;它是 Android Studio 中用于处理 Kotlin 注解的工具。它通过在编译期间生成代码来增强 Kotlin 代码的功能。需要 Kotlin 编译器来解析和处理注解&#xff1b;使用 APT 来生成代码&#xff0c…

【通天星主动安全监控云平台信息泄露漏洞】

目录 一、漏洞简介 二、资产测绘 三、poc利用 四、脚本批量验证 一、漏洞简介 “通天星主动安全监控云平台”是一个基于云计算技术的安全监控平台&#xff0c;通常用于保障网络安全、工业控制系统安全或物联网设备的安全。该信息泄露漏洞位于接口&#xff1a;/808gps/Stand…

可移植性(兼容性)测试指南

可移植性是指应用程序能够安装到不同的环境中&#xff0c;在不同的环境中使用&#xff0c;甚至可以移动到不同的环境中。当然&#xff0c;前两者对所有系统都很重要。就PC软件而言&#xff0c;鉴于操作系统、共存和互操作应用程序、硬件、带宽可用性等方面的快速变化&#xff0…

JavaScript秒值转换为年月日时间字符串

当前效果&#xff1a; 因为后端传递过来的是秒值&#xff0c;显示的时候也是秒值。 但是这种不太友好&#xff0c;所以需要转换为 “xxxx年xx月xx日 xx:xx:xx” 的格式。 参考代码&#xff1a; formatDate (now) {const date new Date(now)var y date.getFullYear() // 年…

Springboot3 自定义全局异常与异常捕获

全局异常构建 package com.lingyang.system.util.exception;import lombok.Getter;/*** author **文* Description:* createDate 2024/8/8 15:20**/ Getter public class TokenErrotException extends RuntimeException{private final String errorMessage;public TokenErrotE…

三维点云深度网络 PointNeXt 源码阅读 (III) —— 骨干网络模型

Title: 三维点云深度网络 PointNeXt 源码阅读 (III) —— 骨干网络模型 (BaseSeg、PointNextEncoder、PointNextDecoder、SetAbstraction 和 FeaturePropogation) 文章目录 前言I. 整体模型 —— Tier 01. 模型对象的建立2. BaseSeg 模型类 II. 编码器与解码器 —— Tier 11. P…

基于区块链的金融凭证应用开发

基于区块链的金融凭证应用开发 这个项目旨在开发一个基于区块链技术的金融凭证应用平台,用于提升供应链金融中应收账款管理的效率和透明度。通过将应收账款资产上链,并利用智能合约实现债权凭证的转让与拆分,项目目标是降低融资成本、增强信用分析能力,并推动供应链金融的…

昂科烧录器支持Cmsemicon中微半导体的8位微控制器CMS79F1239

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Cmsemicon中微半导体的8位微控制器CMS79F1239已经被昂科的通用烧录平台AP8000所支持。 CMS79F1239为中微半导体自主8位RISC内核单片机&#xff0c;工作电压1.8V~5.5V&#xff…

JSONP解决前端跨域学习案例

JSONP 的工作原理 JSONP利用的是 前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><ti…

性能测试-性能测试工具wrk,Apache ab,ngrinder,locust,jmeter和loadrunner

性能测试工具&#xff1a; 企业中主流性能测试工具&#xff1a; jmeter jmeter&#xff1a; java开发的开源&#xff0c;线程、学习很低&#xff0c;接口、自动化、性能测试、第三方性能测试从jmeter扩展 loadrunner&#xff1a; 商业 loadrunner&#xff08;录播&#xff09;…

商业环境洞察:PEST分析法全解析

PEST 分析法是什么 PEST 分析作为一种企业战略规划中的关键工具&#xff0c;主要用于评估企业所处的宏观环境。"P"代表政治因素&#xff0c;涉及政府政策、法律法规及其对企业运营的潜在影响。"E"指的是经济环境&#xff0c;包括经济增长、汇率波动、通货…