【Django-ninja】使用schema

news/2025/2/22 15:45:26/

 在Django Ninja中,"schema"主要是指帮助描述和规范你的API的工具,以便系统能够自动生成文档并提供验证。通俗地说,它有两个主要作用:

  1. API文档生成器: Schema 让 Django Ninja 能够自动生成互动式的API文档。就像一个自动化的说明书,告诉开发者每个API端点是什么,它需要什么样的输入,返回什么样的输出。这样,开发者可以通过查看这份文档更容易地理解和测试API。

  2. 数据验证器: Schema 也用于验证API请求和响应中的数据。它规定了输入数据的格式和类型,以及API应该如何响应请求。这确保了API的数据是符合预期的,提高了系统的健壮性和可靠性。

总的来说,Django Ninja中的Schema就像一个帮你整理和规范API的工具,使得API的开发、使用和测试更加简单和清晰。

from ninja import NinjaAPI, Field, Schemaclass AddIn(Schema):"""推理请求输入."""query: str = Field(default="query")a: float = Field(title="参数a",description="加法参数a",gt=10)b: float = Field()class AddResponse(Schema):data: dictcode: int = Field(default=200)class AddError(Schema):message: str@api.post("/add", response={200: AddResponse, 403: AddError})
def add(request, req: AddIn):try:print(f"query: {req.query}")return 200, AddResponse(data=dict(result=req.a + req.b))# return 200, {"data": dict(result=req.a + req.b)} # 这样也是可以的。except:return 403, AddError(message="error")@api.get("/get_add")
def get_add(request, req: AddIn = Query(...)):return {"data": req.a + req.b}

post方法的schema

这里如果用的是return 200, {"data": dict(result=req.a + req.b)}, 后面的字典会自动通过AddResponse类格式化处理,然后输出。

所以如果@api.post中指定了response为字典,需要注意返回值应该是一个tuple,第一值是key, 第二个值是可以通过相应的schema转化的字典数据。

get方法的schema

以下代码,我是这样理解的。所有get请求中的query参数,也就是/get_add?a=12&b=1这个请求路径中的a和b以及其他可能的参数,通通都会被Query类收集起来,然后Query类会被AddIn格式化,所以最终传递到函数体内到req是一个AddIn类型。(todo可能理解不对。我消化消化)

@api.get("/get_add")
def get_add(request, req: AddIn = Query(...)):return {"data": req.a + req.b}


http://www.ppmy.cn/news/1340075.html

相关文章

力扣hot100 三数之和 双指针 细节去重

Problem: 15. 三数之和 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考 Code ⏰ 时间复杂度: O ( n 2 ) O(n^2) O(n2) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution {public List<List<Integer>> threeSum(int[] nums){List&l…

【C++】 C++入门 — auto关键字

C入门 auto 关键字1 介绍2 使用细则3 注意事项 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读下一篇文章见&#xff01;&#xff01;&#xff01; auto 关键字 1 介绍 编程时常常需要把表达式的值赋给变量&#xff0c;这就要求在声明变量时清楚地知道表达式的类…

纳毕化学携手隆道打造数字化采购平台 推动采购业务管理能力升级

近期&#xff0c;纳毕化学集团有限公司&#xff08;以下简称“纳毕化学”&#xff09;与北京隆道网络科技有限公司合作&#xff0c;共同推出的“纳毕E-Trade采供协同云平台”正式上线运行&#xff0c;助力纳毕化学有效提升采购效率&#xff0c;降低采购成本&#xff0c;实现更加…

【lesson32】基础IO之复习C语言的接口

文章目录 基础IO要讲的知识点介绍复习C语言的接口 基础IO要讲的知识点介绍 1.复习一下C语言的接口 2.直接使用系统接口 3.分析系统接口的细节&#xff0c;引入fd&#xff08;文件描述符&#xff09; 4.fd的周边问题&#xff08;fd的理解、fd和file的关系、fd分配规则、fd重定向…

aspose-words基础功能演示

我们在Aspose.Words中使用术语“渲染”来描述将文档转换为文件格式或分页或具有页面概念的介质的过程。我们正在讨论将文档呈现为页面。下图显示了 Aspose.Words 中的渲染情况。 Aspose.Words 的渲染功能使您能够执行以下操作&#xff1a; 将文档或选定页面转换为 PDF、XPS、H…

壹[1],Xamarin开发环境配置

1&#xff0c;环境 VS2022 注&#xff1a; 1&#xff0c;本来计划使用AndroidStudio&#xff0c;但是也是一堆莫名的配置让人搞得很神伤&#xff0c;还是回归C#。 2&#xff0c;MAUI操作类似&#xff0c;但是很多错误解来解去&#xff0c;且调试起来很卡。 3&#xff0c;最…

05:容器镜像技术揭秘|发布容器服务器|私有镜像仓库

容器镜像技术揭秘&#xff5c;发布容器服务器&#xff5c;私有镜像仓库 创建镜像使用commit方法创建自定义镜像。Dockerfile打包镜像创建apache服务镜像制作 php 镜像 微服务架构创建nginx镜像 发布服务通过映射端口发布服务容器共享卷 docker私有仓库 创建镜像 使用commit方法…

四大组件 - ContentProvider

参考&#xff1a;Android 这 13 道 ContentProvider 面试题&#xff0c;你都会了吗&#xff1f; 参考&#xff1a;《Android 开发艺术探索》 第 9.5 节&#xff08;ContentProvider 的工作过程&#xff09; 参考&#xff1a;内容提供者程序 参考&#xff1a;<provider>&g…