国产低代码框架zdppy开发笔记002标准的接口响应

Python私教 2024-12-30 17:52:24
前言

通过前面的学习, 我们已经知道了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"] = data    return 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_data        else:            data = origin_data    except 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_data    except Exception as e:        return error_500(str(e))    try:        response = model._response        if response is not None:            new_data = {                k: data.get(k)                for k in response            }            data = new_data    except:        pass    return 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 apiimport 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这个框架有非常非常多更加强大的东西.

那么, 继续学习吧!!!

0 阅读:0

Python私教

简介:全栈工程师,目标人工智能.抖音同理想国真恵玩.