zdppy+vue3+onlyoffice文档管理系统实战 20240829上课笔记 Python验证码框架完成

遗留的问题

  • 还没有测试校验的功能

测试校验验证码的功能

生成验证码

from .tobase64 import get_base64
from .validate import is_captchadef captcha(api, cache, num=4, expire=60):""":param cache: 缓存对象:param num: 验证码的个数:param expire: 验证码的过期时间,默认1分钟"""async def get_captcha(req):"""获取zdppy_api生成验证码的接口:param success: api.resp.success 是zdppy_api框架中统一返回成功结果的方法:return:"""key, code, img = get_base64(num)try:cache.set(key, code, expire)return api.resp.success({"key": key,"img": img,})except Exception as e:passreturn api.resp.error_500(str(e))async def validate(req):"""校验验证码"""# 用户的验证码data = await api.req.get_json(req)key = data.get("key")code = data.get("code")if not key or not code:return api.resp.error_400("key或者code不能为空")# 校验v1 = is_captcha(cache, key, code)return api.resp.success({"key": key, "code": code, "ok": v1})return [api.resp.get("/zdppy_captcha", get_captcha),api.resp.post("/zdppy_captcha", validate),]

在API接口中使用

import zdppy_api as api
import zdppy_captcha
import zdppy_cachecache = zdppy_cache.Cache("tmp/.captcha_cache")
app = api.Api(routes=[*zdppy_captcha.zdppy_api.captcha(api, cache),]
)if __name__ == '__main__':import zdppy_uvicornzdppy_uvicorn.run(app, host="0.0.0.0", port=8888)

获取验证码

import reqresp = req.get("http://127.0.0.1:8888/zdppy_captcha")
print(resp.json())
print(resp.json().get("data").get("img"))

校验验证码

import reqresp = req.post("http://127.0.0.1:8888/zdppy_captcha", json={"key": "919bdbde658f4b178d08bb580557fbf5", "code": "ihbn"})
print(resp.json())
print(resp.json().get("data").get("img"))

将验证码的功能整合到登录界面里

当前的登录界面

在这里插入图片描述

当前的后代代码

import json
import req
import zdppy_api as api
import zdppy_env as env
import zdppy_mcrud as mcrud
import routes
import zdppy_amauth as amauthfrom zdppy_api import PlainTextResponseenv.load(".env")db = mcrud.new_env()async def doc_callback(request):data = await api.req.get_json(request)print("callback === ", data)# status == 2 文档准备好被保存if data.get("status") == 2:req.download(data.get("url"), "data/test.docx")if data.get("status") == 6:req.download(data.get("url"), "data/test.docx")# status == 6 文档编辑会话关闭data = {"error": 0}# return JSONResponse('{"error":0}')# return JSONResponse(json.dumps(data))return PlainTextResponse(json.dumps(data))app = api.Api(routes=[api.resp.dir_route("/dist", "data"),api.resp.post("/callback", doc_callback),*routes.get_file_routes(db),*amauth.routers.get_all_routers(db),],middleware=[api.middleware.cors()],
)if __name__ == "__main__":import zdppy_uvicornzdppy_uvicorn.run(app, host="0.0.0.0", port=18888)

大部分的功能都集中在main.py中,不利于代码的管理,所以我们需要进行拆分。

封装一个get_routes方法

from .file import get_file_routesdef get_routes(db):"""初始化路由"""routes = []routes.extend(get_file_routes(db))  # 文件相关的表return routes

封装文档相关的路由

import zdppy_api as api
import req
import json
from zdppy_api import PlainTextResponseasync def doc_callback(request):data = await api.req.get_json(request)print("callback === ", data)# status == 2 文档准备好被保存if data.get("status") == 2:req.download(data.get("url"), "data/test.docx")if data.get("status") == 6:req.download(data.get("url"), "data/test.docx")# status == 6 文档编辑会话关闭data = {"error": 0}# return JSONResponse('{"error":0}')# return JSONResponse(json.dumps(data))return PlainTextResponse(json.dumps(data))def get_doc_routes():"""获取文档相关的路由"""return [api.resp.post("/callback", doc_callback),]

封装权限相关的路由

import zdppy_amauth as amauthfrom .file import get_file_routes
from .doc import get_doc_routesdef get_routes(db):"""初始化路由"""routes = []routes.extend(get_file_routes(db))  # 文件相关的路由routes.extend(get_doc_routes())  # 文档相关的路由routes.extend(amauth.routers.get_all_routers(db))  # 权限相关的路由return routes

最终,我们得到比较干净的入口代码

import zdppy_api as api
import zdppy_env as env
import zdppy_mcrud as mcrud
import routesenv.load(".env")db = mcrud.new_env()app = api.Api(routes=[*routes.get_routes(db),],middleware=[api.middleware.cors()],
)if __name__ == "__main__":import zdppy_uvicornzdppy_uvicorn.run(app, host="0.0.0.0", port=18888)

遗留的问题

  • 1、验证码整合
  • 2、做存储的功能

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

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

相关文章

【软考】网络安全控制技术

目录 1. 说明2. 防火墙技术3. 加密技术4. 用户识别技术5. 访问控制技术6. 网络反病毒技术7. 网络安全漏洞扫描技术8.入侵检测技术9.例题 1. 说明 1.为了保护网络信息的安全可靠,除了运用法律和管理手段外,还需依靠技术方法来实现。2.网络安全控制技术目…

C++系列-STL容器之vector

STL概念 vector基本概念vector与数组的区别vector容器的特点动态大小连续存储自动扩容尾部操作高效 vector动态扩展的含义vector常用的接口示意 vector的构造函数vector赋值操作重载赋值assign赋值 vector的容量和大小vector的插入和删除vector数据存取vector互换容器vector互换…

Apache RocketMQ 批处理模型演进之路

作者:谷乂 RocketMQ 的目标,是致力于打造一个消息、事件、流一体的超融合处理平台。这意味着它需要满足各个场景下各式各样的要求,而批量处理则是流计算领域对于极致吞吐量要求的经典解法,这当然也意味着 RocketMQ 也有一套属于自…

从开题到答辩:ChatGPT超全提示词分享!(上)【建议收藏】

在浩瀚的知识领域中,提问的艺术是探索真理的钥匙。在这个信息爆炸的时代,深入探索知识的海洋,不仅需要热情和毅力,更需要正确的方法和工具。学术研究是一个复杂而严谨的过程,涉及从选题、文献综述到研究设计、数据收集…

Spring Boot常用注解及其含义

Spring Boot常用注解及其含义 注解含义SpringBootApplication标记主应用程序类,包含Configuration、EnableAutoConfiguration和ComponentScan。EnableAutoConfiguration启用Spring Boot的自动配置功能,根据类路径中的依赖自动配置应用程序。Configurati…

最新高仿拼夕夕源码/拼单系统源码/拼单商城/类目功能齐全

源码简介: 高仿拼夕夕源码,拼单商城系统源码、拼团商城源码,改的版本。拼夕夕拼团商城系统源码源码 多商户多区域拼团系统源码。 自己改的版本,类似于拼单的商城,功能齐全,看着还挺不错,绝对值…

能源与节能

期刊名称: 能源与节能 国内统一刊号(CN): CN 14-1360/TD 国际标准刊号(ISSN):ISSN 2095-0802 栏目设置:本刊特稿能源产业节能减排技术研究实践运用 征稿简则 本刊围绕科技发展规划和科技政策,刊登煤炭、石油、天然气…

macos 10.15 catalina xcode 下载和安装

在macos 10.15 catalina系统中, 由于系统已经不再支持,所以我们无法通过应用商店来安装xcode, 需要手动下载指定版本的 xcode 版本才能安装, catalina 支持的最新xcode版本为 Xcode v12.4 (12D4e) , 其他的新版本是无法安装在Catalina系统中的. Xcode_12.4.xip下载地址 注意,下…

git-命名规范

目录 压轴:压箱底的东西 博客几乎没人说这个,属于不可外传的东西。过段时间,我也会进行访问限制,毕竟,掌握人越少竞争压力越小,我也怕,请删谨慎保存。 分支命名策略: Git分支命名的…

RocketMQ第5集

一 RocketMQ的工作流程 1.1 生产环节producer Producer可以将消息写入到某Broker中的某Queue中:其中Producer发送消息之前,会先向NameServer发出获取消息Topic的路由信息的请求,NameServer返回该Topic的路由表及Broker列表。简单的说&…

火爆硅谷的“AI原生”代码编辑器Cursor使用体验

简单总结下: 如果现在你有需要改动到代码、有需要迅速了解一个开源项目的代码逻辑、或者对代码一直没有入门想要学习的话: 现在!立刻!马上!下载体验使用cursor!It‘s a life-saving decision!…

排序算法见解(2)

1.快速排序 1.1基本思想: 快速排序是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以…

IPv4地址和子网掩码

IP地址构成: IP 地址由 4 组 8 位二进制组成的,一共 32 位。 网络号和主机号: IP 地址由网络号和主机号组成。和第二张图片上一样,前面相同标蓝的就是网络号,不同的就是主机号。不同网络的通信需要通过路由器连接&…

Python简介、发展史

Python简介、发展史 本文目录: 零、时光宝盒 一、Python简介 二、Python设计者 三、Python发展史 四、Python语言的编程语言特性 五、Python现状 六、Python的未来 零、时光宝盒 我家所在的楼是3栋楼连接在一起的建筑,也就是3栋楼楼顶建筑上互通。…

react中的useCallback、useMemo、useRef 和 useContext

hook函数中依赖项:函数中使用的响应式变量组成的数组。响应式变量包括 props、state 和所有你直接在组件中定义的变量和函数。 前言 一、useCallback 缓存回调函数 使用方式 二、useMemo:缓存计算的结果 三、useRef:在多次渲染之间共享…

Spring MVC概述

1.1 MVC设计模式 MVC(Model-View-Controller)是一种软件设计模式,旨在将应用程序的业务逻辑、用户界面和用户输入分离。Spring MVC遵循这一模式,提供了以下几个核心组件: Model:表示应用程序的数据和业务…

sqlite3 数据库

1.sqlite3 相关命令: .tables 查看数据库中的表 .headers on/off 开启或者关闭表头 .width 设置列宽 .mode column 对齐 .schema 查询表头类型 2.sqlite3 的sql语句: 插入数据:insert into 表名 values; 查询表:select …

mysql的半同步模式

1.半同步模式原理 mysql的主备库通过binlog日志保持一致,主库本地执行完事务,binlog日志落盘后即返回给用户;备库通过拉取主库binlog日志来同步主库的操作。默认情况下,主库与备库并没有严格的同步,因此存在一定的概率…

ocp19c 学习第1篇

1.操作系统镜像,安装学习环境 通过网盘分享的文件:12-V995537-01.iso 链接: https://pan.baidu.com/s/1nYeKMSM-gwsJon9kpCs_Fw?pwd5537 提取码: 5537 2.linux7防火墙设置 linux7防火墙设置[rootocp4 ~]# systemctl status firewalld.service[rootoc…

【C++】如何解决“pointer to incomplete class type is not allowed”。

这个错误信息 “pointer to incomplete class type is not allowed” 在 C 中通常表示你正在尝试使用一个尚未完全定义的类的指针。 可能的原因及解决方法如下: 一、类定义不完整 前向声明后就使用指针: 如果你只是对一个类进行了前向声明&#xff08…