当前位置: 首页 > news >正文

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、做存储的功能

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python统计FreeMind测试用例数量
  • C语言阴阳迷宫
  • SparkShop开源商城 uploadFile 任意文件上传漏洞复现
  • LabVIEW项目中硬件选型与长期需求沟通
  • OSI七层模型中的数据链路层
  • 图像数据处理25
  • MySQL数据库用户管理和授权
  • 突发性网络攻击的安全挑战分析
  • 微软DP420认证,涉及SQL,C#,Java
  • Apache Kafka 简介、使用场景及特点
  • day-43 盛最多水的容器
  • Shell 脚本入门指南
  • xss-labs靶场通关详解
  • 【DSP+FPGA】基于DSP+FPGA XC7K325T与TMS320C6678的通用信号处理平台
  • 【软考】【多媒体应用设计师】媒体与技术2
  • 【技术性】Search知识
  • 345-反转字符串中的元音字母
  • Consul Config 使用Git做版本控制的实现
  • gf框架之分页模块(五) - 自定义分页
  • HTTP中GET与POST的区别 99%的错误认识
  • js学习笔记
  • node-glob通配符
  • Redis 懒删除(lazy free)简史
  • SQLServer之索引简介
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用API自动生成工具优化前端工作流
  • 线上 python http server profile 实践
  • 小程序button引导用户授权
  • 硬币翻转问题,区间操作
  • 交换综合实验一
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # Panda3d 碰撞检测系统介绍
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (c语言)strcpy函数用法
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (JS基础)String 类型
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)nsfocus-绿盟科技笔试题目
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .Net 4.0并行库实用性演练
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET IoC 容器(三)Autofac
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .NET/C# 获取一个正在运行的进程的命令行参数