FastAPI 学习之路(十)请求体的字段
系列文章:
FastAPI 学习之路(一)fastapi--高性能web开发框架
与使用 Query、Path 和 Body 在路径操作函数中声明额外的校验和元数据的方式相同,你可以使用 Pydantic 的 Field 在 Pydantic 模型内部声明校验和元数据。我们看一个简单的例子。
from typing import Optional
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = Field(
None, title="这是描述", max_length=300
)
price: float = Field(..., gt=0, description="价格必须大于0")
tax: Optional[float] = None
@app.put("/items/{itemid}")
async def update_items(itemid: int, item: Item = Body(..., embed=True)):
results = {"itemid": itemid, "item": item}
return results
这里还是举的一个物品的价格,还打折的例子,我们对于描述和price用了Field,我们看下效果。我们用postman请求下。问可以看到item还是一个参数组

那么我们看下我们代码中条件,假如,我们现在的价格小于0.

我们可以看到,接口正常给我们返回了不应该小于0。我们可以看下接口文档

Field 的工作方式和 Query、Path 和 Body 相同,包括它们的参数等等也完全相同。
我们可以看下Field的源码。它里面是FieldInfo类实例化,然后校验。

FieldInfo其实是继承了父类Representation,然后实现了对应的方法。

那么我们在来看下boby, Query、Path 方法,
body,是一个方法,他是params的Query方法,

我们在往下看,发下,params的body类。

而Body的父类就是FieldInfo。和我们上面的Field一样,只不过Field是直接使用的FieldInfo,body只是上面两层做 了简单的封装,其实都是FieldInfo。

我们看下query

然后看到这里可能就发现下面就是一个Query类,

它是集成了Param类,Param类才是集成了FieldInfo类。

我们看下path

它也是params里面的Path类,

然后Param继承了FieldInfo方法。

其实他们的共同的父类就是Representation。
从上面的代码一顿跳转,我们就能看出来,他们最后的根都是Representation,只是上面的boby, Query、Path方法的父类都是直接或者间接的继承FieldInfo,而Field就是FieldInfo的实例化,FieldInfo继承了Representation,它们本质上就是Representation类的子类。所以他们几个的使用方法,和使用参数没有太大的区别。
请记住当你从 fastapi 导入 Query、Path 等对象时,他们实际上是返回特殊类的函数。
你可以在 Field、Query、Body 中声明额外的信息。这些信息将包含在生成的 JSON Schema 中。
文章首发在公众号,欢迎关注。

FastAPI 学习之路(十)请求体的字段的更多相关文章
- FastAPI 学习之路(十一)请求体 - 嵌套模型
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(九)请求体有多个参数如何处理?
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(二十)接口文档配置相关
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(十四)响应模型
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(十五)响应状态码
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(十六)Form表单
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(十八)表单与文件
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(十九)处理错误
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
随机推荐
- ES6扩展——字符串部分新的方法
1.padStart padEnd(count, 字符串) 补全字符串 //padStart(num,str) padEnd补全一个字符串的长度 //num表示补全到几位,str是用来填充的字符串 { ...
- 你知道 ES6~ES12等叫法是怎么来的吗?
你知道 ES6~ES12等叫法是怎么来的吗? 前言 作为一名前端开发,学习 JavaScript 自是天经地义的事,但是,JavaScript 的发展历史是怎样的,恐怕有相当一部分人都不太了解. 我们 ...
- String转double失去精度问题
最近遇到一个坑,微信小程序中退款 19.9的字符串转double变成19.89,导致退不成功 . 坑死我了.现在把更改后的代码贴出来 public static void main(String[] ...
- Clean Architecture For RazorPage 实现多语言和本地化
最近终于把多语言功能加上了,这次就再发一篇,讲一下在asp.net core环境下如何实现多语言和本地化(Globalization and localization)功能,主要参看:ASP.NET ...
- Panel添加边框颜色和边框粗细调整
Panel控件添加边框颜色 C# WinForm窗体控件Panel修改边框颜色以及边框宽度方法 - JiYF - 博客园 (cnblogs.com) 1.新建一个用户控件的项目,如下: 2.添加一个P ...
- Android系统编程入门系列之应用内键值对数据的简单保存
在应用程序间及与用户的通信交互过程中,会产生并传递一系列数据.针对这些数据,有部分是只在应用程序中使用的缓存数据,还有一部分是在不同位置多次或长时间使用的持久化数据. 对于缓存数据来说,通常以代码中定 ...
- Lucene入门及实际项目应用场景
导入maven依赖 <dependency> <groupId>org.apache.lucene</groupId> <artifactId>luce ...
- 地址栏url中去掉所有参数
1.地址栏url中去掉所有参数,这个是纯前端解决,很多时候页面跳转时候会选择在url后面带参数过去,(使用?&),方便传也方便取,但是我们要做的是不要让页面的一些请求参数暴露在外面 正常项目工 ...
- shell脚本之循环语句 for-while-until
目录: 一.for循环语句 二.while循环语句 三.unti循环语句 一.for循环语句 读取不同的变量值,用来逐个执行同一组命令 举例 批量添加用户◆ 用户名存放在users.txt文件中, ...
- java版gRPC实战之三:服务端流
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...