zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

news2024/9/23 1:35:26

遗留问题

  • 1、封装API
  • 2、有账号密码
  • 3、查询所有有效的具体数据,也就是缓存的所有字段

封装查询所有有效具体数据的方法

基本封装

def get_all(self, is_active=True, limit=100000):
    """
    遍历数据库中所有的key,默认查询所有没过期的
    :param is_active: 是否只查没过期的
    :param limit: 默认10000,但是允许做限制
    :return: 遍历到的所有的key,没有返回空列表
    """
    _disk_get = self._disk.get

    columns = ["key", "raw", "store_time", "expire_time", "access_time", "access_count", "tag", "size", "mode",
               "filename", "value"]
    column = ",".join(columns)
    rows = None
    if is_active:
        # 查没过期的
        select = f'SELECT {column} FROM Cache where expire_time > ? LIMIT ?'
        rows = self._sql(select, (time.time(), limit)).fetchall()
    else:
        # 查所有的
        select = f'SELECT {column} FROM Cache  LIMIT ?'
        rows = self._sql(select, (limit,)).fetchall()

    # 处理
    data = []
    for row in rows:
        item = {}
        for i in range(len(columns)):
            item[columns[i]] = row[i]
        data.append(item)

    # 返回
    return data

基本用法

import zdppy_cache as c
import time

# 设置缓存
key = "code"
value = "A13k"
c.set(key, value, 3)

# 获取所有的缓存的key-value
print(c.get_all())

time.sleep(3)
print("默认查询未过期的:", c.get_all())
print("查询过期的:", c.get_all(False))

# 清空缓存
c.delete_all()

查询总缓存大小

最简单的方案

它是基于磁盘的,我们统计磁盘大小就知道了。

基本封装

def get_size():
    """
    获取占据的内存大小
    但是只有在调用方法的那一刻会占据内存,平时都是存储在磁盘中的
    """
    with Cache(cache_directory) as cache:
        return cache.volume()

使用示例

import zdppy_cache as c
import time

# 设置缓存
key = "code"
value = "A13k"
c.set(key, value, 3)

# 获取占据磁盘大小
print(c.get_size())

# 加很多东西
for i in range(100):
    c.set(f"zhangsan{i}", i)

print(c.get_size())

# 清空缓存
c.delete_all()

有账号密码

思路?

账号密码是用来校验权限,主要是为了确定自己专属数据库。

对账号密码做sha256加密得到一个字符串作为缓存目录。如果这个目录存在,说明系统中有该用户,否则没有,新建。

python实现sha256加密

import hashlib

data = "你好"   # 要进行加密的数据
data_sha = hashlib.sha256(data.encode('utf-8')).hexdigest()   
print(data_sha)

需要key用户私钥吗?

不需要,简单点。

简单的实现

import hashlib
import shutil
import os
from .core import Cache


class UserCache:
    def __init__(self, username, password, cache_dir="./tmp/.zdppy_cache"):
        # 构建缓存目录
        self.key = hashlib.sha256(f"{username}&&{password}".encode('utf-8')).hexdigest()
        self.cache_dir = os.path.join(cache_dir, self.key).replace("\\", "/")
        if not os.path.isdir(self.cache_dir):
            os.makedirs(self.cache_dir)
        self.cache = Cache(self.cache_dir)

    def set(self, key, value, expire=180):
        """设置缓存"""
        self.cache.set(key, value, expire)

    def get(self, key):
        """获取缓存"""
        value = self.cache.get(key)
        return value

    def delete_all(self):
        """清空缓存"""
        self.cache.close()
        try:
            shutil.rmtree(self.cache_dir)
        except OSError:
            pass

使用示例

import zdppy_cache

# 设置缓存
key = "code"
value = "A13k"

# 设置缓存
c = zdppy_cache.UserCache("admin", "admin123456")
c.set(key, value, 3)

# 获取缓存
print(c.get(key))

# 让另一个用户去获取缓存
c = zdppy_cache.UserCache("admin", "admin123457")
print("另一个用户", c.get(key))

# 清空缓存
c.delete_all()

封装API

基本目标

  • 1、管理员,传两个配置的key进来
    • 1、设置缓存
    • 2、获取缓存
    • 3、删除缓存
    • 4、清空缓存
    • 5、查询所有key,带查询参数:active只查激活的,value包含value默认只获取key
    • 6、当前缓存大小
    • 7、看所有数据
  • 2、普通用户,功能和管理员完全一样,但是必须要传账号密码

实现基于zdppy_api的接口缓存

基本示例:

import api
import zdppy_cache

key1 = "admin"
key2 = "admin123456"
app = api.Api(
    routes=[
        *zdppy_cache.zdppy_api.cache(key1, key2, api)
    ]
)

if __name__ == '__main__':
    app.run()

设置缓存:

req -X POST -d '{\"key\":1,\"value\":111}' http://127.0.0.1:8888/zdppy_cache/set

在这里插入图片描述

获取缓存:

req -d '{\"key\":1}' http://127.0.0.1:8888/zdppy_cache/get

在这里插入图片描述

想法

  • 查询总缓存大小 搞定

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

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

相关文章

服务器数据恢复—重建RAID失败导致数据丢失的数据恢复案例

服务器数据恢复环境: 某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windows server,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle数据库的数据量不大,oracle数据库内只有一…

【SpringBoot】电脑商城-08-新增收获地址

新增收货地址 1 新增收货地址-创建数据表 1.使用use命令先选中store数据库。 USE store; 2.在store数据库中创建t_address用户数据表。 CREATE TABLE t_address (aid INT AUTO_INCREMENT COMMENT 收货地址id,uid INT COMMENT 归属的用户id,name VARCHAR(20) COMMENT 收货人…

Oracle Linux 7.9 安装minikube体验

1.环境信息 前置所需: 操作系统:Oracle Linux 7.9 虚拟机配置:CPU:4核 内存:4G 容器:docker 26.1.4 安装minikube后环境: minikube: v1.33.1 kubernetes:v1.23.3 minukube体验说明:使用Virtua…

vs code中编写html的配置,插件安装

首先安装vs code 插件安装下面三个: 功能分别是: html css support :就是支持html环境,因为vs code就是一个文本编辑器 live server:自动更新编写的文件在浏览器刷新 auto rename tag:自动修改另一半标签…

火语言RPA流程组件介绍--获取/结束进程

🚩【组件功能】:获取整个进程列表,或者根据进程名/进程ID获取或结束指定的进程 配置预览 配置说明 查找方式 进程名:进程的名称。 进程ID:进程ID标识。 所有进程列表:返回所有当前系统运行的所有进程列表…

Vue的计算属性:methods方法、computed计算属性、watch监听属性

1、methods 方法 在创建的 Vue 应用程序实例中,可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法,因此可以像访问 data 数据那样来调用方法。 【实例】在 Vue 应用程序中,使用 methods 选项定义获取用户信…

JLMSR超分算法说明和效果

一、简介 JLMSR是基于加权概率模型构造的一种超分算法,属于传统超分,无需训练,适合硬件化。与传统超分的插值方案最大区别在于基于16*16的块进行上下文概率统计,结合权重进行插值。目前该插值方案已经线性化和整数化,…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps(开发者安全运营)是指将安全最佳实践融入软件开发生命周期的过程,从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局:DevSecOps市场竞争激烈。该领域有数百家供应商提供工具,帮助组织…

能实现可算不可见的同态加密技术详解

目录 同态加密的基本概念 同态加密示例 同态加密的原理 同态加密的类型 同态加密的应用场景 同态加密的挑战 小结 同态加密(Homomorphic Encryption,HE)是一种满足密文同态运算性质的加密算法,可以在加密数据上直接执行特定…

【C++ Primer Plus习题】4.8

问题: 解答: #include <iostream> #include <string> using namespace std;typedef struct _Pizza {string companyName;float diameter;float wieght; }Pizza;int main() {Pizza *pnew Pizza;cout << "请输入披萨的直径: ";cin >> p->d…

如何定义、注册以及什么是异步组件?

一. 如何定义异步组件 定义异步组件需要使用vue提供的 defineAsyncComponent() 方法&#xff1a; 注意&#xff1a;通过观察大家也可以发现&#xff0c;所谓的异步组件就相当于给普通组件套了一层外壳(defineAsyncComponent()),当然现在还不能感受到异步组件的魅力&#xff0c…

大模型入门到精通——Prompt Engineering工程

Prompt Engineering 1. Prompt Engineering 的意义 在 LLM&#xff08;大语言模型&#xff09;时代&#xff0c;Prompt Engineering&#xff08;提示工程&#xff09;已经成为开发者与用户的重要技能和概念。随着大模型&#xff08;如 GPT、GLM、BERT 等&#xff09;的快速发…

Windows SDK(九)登录框和计算器练习

这节课我们分别开始讲解登录框和计算机的实现 登录框实现 我们以上节课所学&#xff0c;自行创建一个对话框&#xff0c;ID为IDD_DIALOG1并将他编辑为一个登录框的样式。其中我们将账户的编辑框ID设置为IDC_ENIT_USERNAME&#xff0c;密码的编辑框ID设置为IDC_ENIT_PASSWORD。…

tm和r商标哪个最放心用!

有个网友联系普推知产老杨&#xff0c;问申请的商标可以授权使用不&#xff0c;这个没有下商标注册证&#xff0c;基本上没多大用&#xff0c;申请的商标也可以授权&#xff0c;但是由于该商标尚未获得注册&#xff0c;其权利状态尚不稳定会存大许多风险。 TM基本是下受理书后的…

MySQL 主从复制的两种方式详解

目录 概述 主从复制原理 环境准备 基于二进制日志的复制 配置master 配置slave 启动复制的命令 测试 Gtid方式进行主从同步 工作原理 配置master 配置slave 测试 概述 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后…

初识C语言指针(4)

目录 1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. typedef 关键字 6. 函数指针数组 结语 1. 字符指针变量 字符指针变量就是存储字符或字符串首字符地址的变量&#xff0c;字符指针变量有2种使用方式。 最常用的使用方式&#xff1a…

pikachu-ssrf_redis

目录 SSRF 1、SSRF漏洞介绍&#xff1a; 2、SSRF漏洞原理&#xff1a; 3、SSRF漏洞利用手段&#xff1a; 4、SSRF漏洞绕过方法&#xff1a; SSRF(curl)用法 1、通过网址访问链接 2、利用file协议查看本地文件 3、dict协议扫描内网主机开放端口 4.gopher&#xff1a;威…

神经网络算法 - 一文搞懂Gradient Descent(梯度下降)

本文将从梯度下降的本质、梯度下降的原理、梯度下降的算法 三个方面&#xff0c;带您一文搞懂梯度下降 Gradient Descent | GD。 梯度下降 机器学习“三板斧”&#xff1a;选择模型家族&#xff0c;定义损失函数量化预测误差&#xff0c;通过优化算法找到最小化损失的最优模型参…

docker GBase 8sV8.8使用的常见错误

因项目需要GBase 8sV8.8数据库环境&#xff0c;所以在搭建使用过程中有一些坑和错误&#xff0c;所以记录和分享 docker搭建 docker.com获取镜像 docker pull liaosnet/gbase8s:v8.8_3503x1_x64创建容器 docker run -d -p 19088:9088 \-e SERVERNAMEgbase01 \-e USERPASSGB…

CCleaner:系统优化与隐私保护的双重守护

大家好&#xff0c;今天电脑天空要介绍一款非常实用的系统优化工具——CCleaner。如果你的电脑运行速度越来越慢&#xff0c;或者担心隐私泄露问题&#xff0c;那么CCleaner可能是你的解决方案。 系统优化&#xff0c;一键搞定 CCleaner能够智能识别并清理电脑中的临时文件、…