国产低代码框架zdppy开发笔记002 标准的接口响应
前言
通过前面的学习, 我们已经知道了zdppy_api和zdppy_req的基本用法, 接下来我们会在学习中多次用到这两个框架.
我们已经知道了该如何响应一个字符串,但是我们该如何响应json数据呢?
在zdppy_api中,我们定义了一组规范的API响应, 我们慢慢来看看.
规范的响应
首先来看看底层的一些方法:
def success(data=None,msg="success",code=10000,
):"""返回成功的响应"""result = {"msg": msg, "status": True, "code": code}if data is not None:result["data"] = datareturn JSONResponse(result)def success_orm_reflect(model=None,msg="success",code=10000,
):"""响应ORM模型对象"""if model is None:return success(None, msg, code)# 获取数据data = {}try:origin_data = model.__dict__.get("__data__") or {}response = getattr(model, "__response__")if response is not None:new_data = {k: origin_data.get(k)for k in response}data = new_dataelse:data = origin_dataexcept Exception as e:return error_500(str(e))return success(data, msg, code)def success_orm(model=None,msg="success",code=10000,
):"""响应ORM模型对象"""if model is None:return success(None, msg, code)# 获取数据data = {}try:origin_data = model.__dict__.get("__data__") or {}data = origin_dataexcept Exception as e:return error_500(str(e))try:response = model._responseif response is not None:new_data = {k: data.get(k)for k in response}data = new_dataexcept:passreturn success(data, msg, code)def error(msg="服务器错误", code=10001):"""服务器错误"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_401(msg="权限校验失败", code=10401):"""权限校验失败"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_400(msg="数据处理失败", code=10400):"""数据处理失败"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_402(msg="请求参数校验失败", code=10402):"""请求参数校验失败"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_404(msg="找不到该资源", code=10404):"""找不到该资源"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_501(msg="服务器内部错误", code=10501):"""服务器内部错误"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_500(msg="服务器内部错误", code=10500):"""服务器内部错误"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_mysql(msg="连接mysql失败", code=13306):"""连接mysql失败"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_redis(msg="连接redis失败", code=16379):"""连接redis失败"""return JSONResponse({"msg": msg, "status": False, "code": code})def error_es(msg="连接es失败", code=19200):"""连接es失败"""return JSONResponse({"msg": msg, "status": False, "code": code})
内容非常的丰富, 不过不要被吓到了, 实际上我们在工作中常用的只有几个.
我们一个一个来学习一下.
返回成功的响应
我们先来看看服务端的代码.
import zdppy_api as apiasync def hello(request):return api.resp.success()app = api.Api(routes=[api.resp.get("/", hello)]
)if __name__ == "__main__":app.run(port=8888)
这里我们用async def hello(request)
来定义了一个异步的方法, 这个是标准的API接口的写法.
在zdppy_api这个框架中, 所有的接口都是异步的, 都需要用async来标记.
接着就是返回值, 我们返回的是 api.resp.success()
, 这是标准的成功的响应, 返回的是一个JSON数据.
接下来我们来写一个简单的客户端, 看看返回值是什么.
import zdppy_req as reqprint(req.get("http://127.0.0.1:8888/").json())
我们之前使用text输出文本类型的数据, 现在使用json()
输出json类型的数据.
客户端输出结果如下:
{'msg': 'success', 'status': True, 'code': 10000}
这是非常标准的成功响应.
我们在真实开发的时候,比如新增成功, 修改成功, 查询成功等等, 都是使用这个响应.
这个响应还支持自定义的数据.
zdppy_rand框架介绍
提到数据, 这里在给大家介绍一个zdppy框架下的开发神器, 也是能够极大的提高我们的开发效率.
那就是zdppy_rand, 这是一个用来生成随机数据的框架.
比如我们要生成20条随机用户的信息, 我们会怎么办呢?
写一堆代码生成随机的姓名, 年龄, 性别还有其他的一些东西?
统统不需要, 使用zdppy_rand, 只需要一行代码就可以搞定.
data = rand.user.list()
是不是超级简单?
哈哈, 我就喜欢简单的东西, 别人说简单, 会让我觉得很有成就感.
返回带数据的响应
那么, 接下来, 我们来编写一个接口, 这个接口能够返回随机的20个用户的信息, 我们来看看有多简单.
实际上我们只需要对之前的代码稍加改造就行了.
接口改为:
async def hello(request):data = rand.user.list()return api.resp.success(data)
完整的代码是:
import zdppy_api as api
import zdppy_rand as randasync def hello(request):data = rand.user.list()return api.resp.success(data)app = api.Api(routes=[api.resp.get("/", hello)]
)if __name__ == "__main__":app.run(port=8888)
此时客户端也需要稍加改造, 因为生成的随机用户信息实在是太多了.
我们来改写一下客户端, 遍历返回的每一个用户信息.
import zdppy_req as reqdata = req.get("http://127.0.0.1:8888/").json()
for v in data.get("data"):print(v)
此时的输出结果如下:
我们复制其中一条信息来看看:
{'name': '杜飞文', 'ename': 'cytheria', 'gender': '女', 'age': 43, 'weight': 191.60044071508094, 'height': 159.0499732814901, 'phone': '13314438056', 'email': 'monica@yahoo.com', 'cid': '220822197402161021', 'job': '挂杆复烤工', 'department': '人力资源部', 'salary': 63982.85120517511, 'id': 19}
- name: 姓名
- ename: 英文名
- gender: 性别
- age: 年龄
- weight: 体重
- height: 身高
- phone: 手机号
- email: 邮箱
- cid: 身份证号
- job: 职业
- department: 部门
- salary: 薪资
- id: 唯一编号
返回标准错误信息
除了返回成功的响应, 我们还通常需要对错误信息做处理, zdppy_api还给我们提供了一些标准的错误信息, 我们来看看.
我们写一个接口, 接收用户传入的code, 这个code是不同值的时候返回不同的错误信息.
async def hello(request):# 获取查询参数code = api.req.get_query(request, "code")if code == "1":return api.resp.error()elif code == "2":return api.resp.error_401()elif code == "3":return api.resp.error_404()elif code == "4":return api.resp.error_500()elif code == "5":return api.resp.error_501()elif code == "6":return api.resp.error_mysql()elif code == "7":return api.resp.error_redis()return api.resp.success()
对于怎么获取查询参数, zdppy_api也做了封装, 一句代码就可以搞定:
code = api.req.get_query(request, "code")
其他的就是一些常见的错误:
- api.resp.error() : 通用错误
- api.resp.error_401(): 权限错误
- api.resp.error_404(): 数据找不到错误
- api.resp.error_500(): 服务器错误
- api.resp.error_mysql(): MySQL处理错误
- api.resp.error_redis(): redis处理错误
接着, 我们也是使用req框架请求一下试试.
import zdppy_req as reqcodes = ["1", "2", "3", "4", "5", "6"]
for code in codes:print(req.get(f"http://127.0.0.1:8888?code={code}").json())
控制台输出如下:
总结
我们学习了如何返回成功的响应, 成功且带数据的响应, 以及一些标准的常见错误的响应.
这个是做api开发最基础的东西, 我们后面会大量的用到.
到目前为止, 你就算是以及能够使用api开发一些简单的接口了.
此外, 我们还学习了zdppy_rand这个框架的用法, 一行代码就能够生成非常丰富的用户信息, 非常的好用.
但是还是那句话, 这些只是zdppy框架的冰山一角罢了, 我们继续学习, 会发现zdppy这个框架有非常非常多更加强大的东西.
那么, 继续学习吧!!!
相关文章:
国产低代码框架zdppy开发笔记002 标准的接口响应
前言 通过前面的学习, 我们已经知道了zdppy_api和zdppy_req的基本用法, 接下来我们会在学习中多次用到这两个框架. 我们已经知道了该如何响应一个字符串,但是我们该如何响应json数据呢? 在zdppy_api中,我们定义了一组规范的API响应, 我们慢慢来看看. 规范的响应 首先来看…...
关于Nginx
1.Nginx的配置 proxy_pass http: 当你需要将请求分发到多个后端服务器时,需要实现负载均衡功能,可以使用upstream指令定义一组服务器,并在proxy_pass中引用这个服务组名称。。如果不需要负载均衡,只需要将请求转发到单一的后端…...
数据库实时会话管理,性能问题诊断后的临门一脚
目录 前言 实时会话管理 DBdoctor 实时会话功能 1.实时会话列表 2.结束会话 3.操作历史 4.SQL分析 结语 前言 在之前的文章中我们介绍了DBdoctor性能洞察功能,它能够快速量化数据库连接会话单条SQL的资源消耗,实现性能问题快速根因定位并给出优…...
以EM算法为例介绍坐标上升(Coordinate Ascent)算法:中英双语
中文版 什么是 Coordinate Ascent 算法? Coordinate Ascent(坐标上升)是一种优化算法,它通过在每次迭代时优化一个变量(或一个坐标),并保持其他变量不变,逐步逼近最优解。与坐标下…...
visual studio连接sql server数据库
目录 1、为什么要建立连接2、在sql server中建立数据库3、visual studio连接sql server数据库4、学生信息管理系统页面布局5、添加事件逻辑 5.1 页面跳转5.2 读取学生信息5.3 查询学生信息5.4 修改学生信息5.5 删除学生信息5.6 添加学生信息 bilibili演示视频 github源码 1、…...
磁盘的相关操作
1.让U盘连接到虚拟机中 两种方法:1>在弹出的窗口中设置 2>通过选项设置 菜单栏---->虚拟机----->可移动设备---->找到U盘名---->连接到虚拟机中 2.查看U盘是否已被成功识别 方法:ls /dev/sd* 显示包含除了sda外的文件说明U盘连接成功…...
数据结构与算法Python版 图的应用与广度优先搜索
文章目录 一、图的应用-词梯问题二、图的广度优先搜索 一、图的应用-词梯问题 词梯问题 Word Ladder 从一个单词演变到另一个单词,其中的过程可以经过多个中间单词。要求是相邻两个单词之间差异只能是1个字母如FOOL变SAGE:FOOL >> POOL >>…...
Unity——InputField组件自动换行和enter键换行
文章目录 输入框实现换行功能 输入框实现换行功能 在Unity中,如果你想要在输入框(如InputField)中实现换行功能 ,你需要确保以下几点: 1、文本组件支持多行: 确保你的InputField的文本组件(Te…...
solr9.7 单机安装教程
1.环境要求:jdk11以上 2.下载wget https://dlcdn.apache.org/solr/solr/9.7.0/solr-9.7.0.tgz 3.解压 4.修改solr.in.sh配置 5.启动命令 bin/solr start 6.创建core bin/solr create -c <core名称> 注意:用solr ui界面创建,会提示找不到solrconfig.xml和m…...
虚幻引擎UE5渲染不够快的解决办法
虚幻引擎是由Epic Games公司开发的一款功能强大、全球最开放且先进的实时 3D 创作工具,广泛应用于游戏、影视、建筑可视化、虚拟现实等多个领域!虚幻引擎UE5如何实现在网上极速渲染呢?本文提供云渲染和云电脑两套方案用于渲染提速ÿ…...
基于STM32的智能家居环境监控系统设计
目录 引言系统设计 硬件设计软件设计系统功能模块 环境监控模块控制模块显示模块系统实现 硬件实现软件实现系统调试与优化结论与展望 1. 引言 随着智能家居技术的发展,环境监控系统已经成为家居管理的重要组成部分。智能家居环境监控系统通过实时监测室内温度、湿…...
Android service framework笔记
1. 网络摘录如何添加一个Application Framework Service(一)(without native code) 如何添加一个Application Framework Service(二)(with native code) 2.书籍摘录...
【图像处理lec10】图像压缩
目录 一、图像压缩基础 1、图像压缩的基本概念 2、数据冗余与压缩比 3、三种主要的数据冗余类型 4、保真度评估标准(Fidelity Criteria) 5、应用与实践 二、图像压缩模型 1、图像压缩模型概述 (1)压缩系统的结构 &#…...
flask后端开发(2):URL与视图
目录 URL定义request获取请求参数 gitcode地址: https://gitcode.com/qq_43920838/flask_project.git URL定义 from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello World!app.route(/profile) def profile():return 我是个人…...
Linux Ubuntu24配置安装Java
目录 一. 通过apt安装java1.1 列出所有可用java版本1.2 安装指定java版本1.3 安装后确认1.4 /etc/alternatives/目录 二. 手动安装java 一. 通过apt安装java 1.1 列出所有可用java版本 apt list openjdk-*jdk apluserubuntu24-01:~$ apt list openjdk-*jdk Listing... Done …...
线段树例题题解
卫星覆盖(NOI1997) 题面: SERCOI(Space-Earth Resource Cover-Observe lnstitute) 是一个致力于利用卫星技术对空间和地球资源进行覆盖观测的组织。现在他们研制成功一种新型资源观测卫星 -SERCOI-308。这种卫星可以…...
极品飞车6的游戏手柄设置
极品飞车,既可以用键盘来控制车辆的前进、后退、左转、右转、加速与减速,也可以使用游戏手柄来操作车辆的运行。需要注意的是,极品飞车虽然支持手柄,但是仅支持常见的北通、罗技还有部分Xbox系列的手柄,至于其他的PS4手…...
为何DeepSeek V3模型为自己是ChatGPT?
DeepSeek V3 AI模型:为何它认为自己是ChatGPT? 引言 在人工智能领域,最新的技术进展总是令人兴奋。最近,一家资金雄厚的中国AI实验室DeepSeek发布了一款新的AI模型——DeepSeek V3,它在多个流行基准测试中超越了许多…...
【每日学点鸿蒙知识】人脸活体检测、NodeController刷新、自动关闭输入框、Row设置中间最大宽、WebView单例
1、HarmonyOS 人脸活体检测调用? H5调用应用侧方法可参考以下demo: index.ets Web()//注册方法.javaScriptProxy({object: this.testObj,name: "testObjName",methodList: ["getLocationTS"],controller: this.webController})cla…...
深入理解Composer自动加载机制
Composer是PHP生态系统中最常用的依赖管理工具之一,它不仅能够帮助开发者管理项目的依赖关系,还能够自动加载这些依赖项。自动加载机制是Composer的核心功能之一,通过自动加载,开发者可以在运行时按需加载所需的类和文件ÿ…...
SQL SERVER日常运维巡检系列之-日志
前言 做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期、结果进行登记,同时可能需要出一份巡检报告。 本系列旨在解决一些常见的困扰: 不知道巡检哪些东西不知道怎么样便捷体检机器太多体检麻烦生成报告困难,无…...
2024年中国新能源汽车用车发展怎么样 PaperGPT(二)
用车趋势深入分析 接上文,2024年中国新能源汽车用车发展怎么样 PaperGPT(一)-CSDN博客本文将继续深入探讨新能源汽车的用车强度、充电行为以及充电设施的现状。 用车强度 月均行驶里程:2024年纯电车辆月均行驶超过1500公里&…...
【数据结构】线性数据结构——链表
1. 定义 链表是一种线性数据结构,由多个节点(Node)组成。每个节点存储数据和指向下一个节点的指针。与数组不同,链表的节点不需要在内存中连续存储。 2. 特点 动态存储: 链表的大小不固定,可以动态增加或…...
Spring中的设计模式
Spring中的设计模式 控制反转(IoC)和依赖注入(DI) IoC 是一个原则,而不是一个模式,以下模式(但不限于)实现了 IoC 原则。 **Spring IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置…...
微信小程序给外面的view设置display:flex;后为什么无法给里面的view设置宽度
如果父盒子view设置了display:flex,子view设置宽度值无效,宽度值都是随着内容多少而改变: 问题视图: 原因: flex布局元素的子元素,自动获得了flex-shrink的属性 解决方法: 给子view增加:fl…...
异步爬虫之aiohttp的使用
在上一篇博客我们介绍了异步爬虫的基本原理和 asyncio 的基本用法,并且在最后简单提及了使用aiohttp 实现网页爬取的过程。本篇博客我们介绍一下 aiohttp 的常见用法。 基本介绍 前面介绍的 asyncio模块,其内部实现了对 TCP、UDP、SSL协议的异步操作&a…...
vue3大屏实现;使用使用CSS Grid实现大屏
文章目录 一、效果1.效果2.使用CSS Grid3.插件4.html代码5.index.scss代码 一、效果 1.效果 方案:采用CSS的Grid布局,实现首页大屏模块划分和自适应功能; 布局: 大屏主要内容,高宽比是1920*1080;即16:9的…...
安卓入门二 Kotlin基础
Kotlin Kotlin的历史 Kotlin由Jet Brains公司开发设计,2011年公布第一版,2012年开源。 2016年发布1.0正式版,并且Jet Brains在IDEA加入对Kotlin的支持,安卓自此又有新的选择。 2019年谷歌宣布Kotlin成为安卓第一开发语言&#x…...
在ubuntu上如何使用sdkman安装两个版本的java并进行管理和维护
在Ubuntu上使用SDKMAN安装和管理两个不同版本的Java的步骤如下: 安装SDKMAN 打开终端,使用以下命令安装SDKMAN: curl -s "https://get.sdkman.io" | bash这个命令会下载并运行SDKMAN!的安装脚本。 安装完成后,需要打开…...
《代码随想录》Day20打卡!
《代码随想录》二叉树:二叉搜索树的最近公共祖先 本题的完整题目如下: 本题的思路如下: 1.之前写过一个二叉树的最近公共祖先,本题相比于另一道题,不同是本题是二叉搜索树,有一些可用的性质。 2.本题使用递…...
GPIO相关寄存器,点灯
目录 一.输入模式 1.浮空输入 2.上拉输入 3.下拉输入 4.模拟输入 二.输出模式 1.推挽输出 2.开漏输出 三.寄存器 1.寄存器的作用 2.功能与类型 3.控制某一引脚输出电压来点灯所需要控制的寄存器 1.打开对应时钟开关 2.端口模式寄存器 ---输出模式 3.输出类型寄存…...
25 - GRACE Mascon数据缺失月份数据插值
25 - GRACE Mascon数据缺失月份数据插值 0 引言1 程序包获取1.1 获取ssa插值算法程序包1.2 try2 利用ssa对grace mascon数据进行插值3 完整代码及相关函数3.1 Main程序3.1 子程序4 总结0 引言 💦💦💦💦💦 上篇介绍了grace mascon数据提取及简单的分析过程,仔细…...
深入理解Redis:从理论到实践的Java之旅
Redis,这个开源的内存数据结构存储系统,自2009年诞生以来,凭借其丰富的数据结构、快速的读写性能以及高度的可扩展性,迅速成为了分布式系统和高并发应用中的明星组件。本文将带你深入理解Redis,并通过Java语言的实践示…...
REDIS的集群
REDIS的集群模式: 主从模式:redis高可用的基础,哨兵和集群都是建立在此基础之上 特点: 主从模式和数据库的主从模式(工作模式)是一样的,主负责写入,然后把写入到数据同步到从&…...
linux——vi命令常用操作
一、vi模式 vi一般分为三种模式,分别是命令行模式、插入模式、末行模式 1.命令模式:控制屏幕光标的移动,按 :进入末行模式,按 i(其他插入命令也可) 进入插入模式; 2.插入模式&…...
SKETCHPAD——允许语言模型生成中间草图,在几何、函数、图算法和游戏策略等所有数学任务中持续提高基础模型的性能
概述 论文地址:https://arxiv.org/pdf/2406.09403 素描是一种应用广泛的有效工具,包括产生创意和解决问题。由于素描能直接传达无法用语言表达的视觉和空间信息,因此从古代岩画到现代建筑图纸,素描在世界各地被用于各种用途。儿童…...
计算机网络•自顶向下方法:网络应用原理
网络应用原理 网络应用架构 目前有两种主流的网络应用架构: 客户-服务器架构(Client-server) 服务器(server): 有一台总是在线的主机,上面运行着服务器程序(server)服务器主机(server machine)具有永久的…...
python: Oracle Stored Procedure query table
oracel sql script CREATE OR REPLACE PROCEDURE SelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId paramSchoolId; END SelectSchool; /-- 查询所有 CREATE OR REPLACE PROCEDURE SelectScho…...
Webpack学习笔记(6)
首先搭建一个基本的webpack环境: 执行npm init -y,创建pack.json,保存安装包的一些信息 执行npm install webpack webpack-cli webpack-dev-server html-webpack-plugin -D,出现node_modules和package-lock.json。 1.source-Ma…...
数仓建模:如何进行实体建模?
目录 1 如何进行实体建模? 业务建模 领域建模 逻辑建模 2 实体建模具体步骤 需求分析...
C++ 设计模式:享元模式(Flyweight Pattern)
链接:C 设计模式 链接:C 设计模式 - 单例模式 享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享尽可能多的相同对象来减少内存使用和提高性能。享元模式适用于大量细粒度对象的场景,这些对象之…...
idea报错:There is not enough memory to perform the requested operation.
文章目录 一、问题描述二、先解决三、后原因(了解) 一、问题描述 就是在使用 IDEA 写代码时,IDEA 可能会弹一个窗,大概提示你目前使用的 IDEA 内存不足,其实就是提醒你 JVM 的内存不够了,需要重新分配。弹…...
Kubernetes Gateway API-2-跨命名空间路由
1 跨命名空间路由 Gateway API 具有跨命名空间路由的核心支持。当多个用户或团队共享底层网络基础设施时,这很有用,但必须对控制和配置进行分段,以尽量减少访问和容错域。 Gateway 和 Route(HTTPRoute,TCPRoute,GRPCRoute) 可以部署到不同的命名空间中,路由可以跨命名空间…...
【视觉SLAM:四、相机与图像】
相机模型 相机模型是计算机视觉中的重要内容,用于描述真实相机如何将三维世界投影到二维图像平面。以下从多个角度介绍常见的相机模型。 针孔相机模型 针孔相机模型是最简单的相机模型,用数学公式描述从三维世界到二维图像平面的映射关系。核心公式如…...
【spring】参数校验Validation
前言 在实际开发中,我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递,传来的参数长度不符合要求等,这种时候如果放任不管,继续执行后续业务逻辑,很有可能就会出现意想不到的bug。 有人可能会…...
基于 InternLM 和 LangChain 搭建你的知识库
本文基于InternStudio 算力平台利用 InternLM 和 LangChain 搭建知识库。 InternStudio (OpenAIDE)[1] 是面向算法开发者与研究员的云端集成开发环境。基于「容器实例」,「镜像中心」,「分布式训练」,「公开数据集」模块为用户提供 “算力、算…...
C++ 设计模式:备忘录模式(Memento Pattern)
链接:C 设计模式 链接:C 设计模式 - 状态模式 备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这个模式在需要保存和恢复对象状态的场景中非常有用ÿ…...
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
SMEC88ST SDK开发包下载 目前市场上很多嵌入式产品方案都是可以破解复制的,主要是因为方案主芯片不具备防破解的功能,这就导致开发者投入大量精力、财力开发的新产品一上市就被别人复制,到市场上的只能以价格竞争,最后工厂复制的产…...
利用JavaScript实现猜数字
一,使用while循环实现 以下代码为固定数字非随机数,答案通过弹窗来设置,结果太唯一。 let number;while (true) {number prompt(我正在想一个1-10的数字,你猜猜看?);switch (number) {case "1":alert("小了&quo…...
terminal_学习
参考: 让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南 https://sspai.com/post/55176MAC 终端美化教程(来个全套 )https://blog.csdn.net/weixin_42326144/article/details/121957795 x.1 zsh做美化(安装oh…...