FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
系列文章:
FastAPI 学习之路(一)fastapi--高性能web开发框架
一、额外信息
from typing import Optional from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
class Config:
schema_extra = {
"example": {
"name": "DEMO",
"description": "DEMO",
"price": 20,
"tax": 0.5,
}
}
@app.post("/items/")
def return_item( item: Item):
results = { "item": item}
return results
那么我们请求下试试。

接口满足我们的请求,我们看下接口文档是否有请求的示例。

接口文档是正常有这个的示例。代码中使用Config 和 schema_extra 为Pydantic模型声明一个简单的示例。
其实我们在Field也会可以实现一个额外的信息,比如我们增加一个example字段,我们看下如何实现的,带来什么样的效果
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel,Field
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price:float = Field(..., example=600)
tax: Optional[float] = Field(None, example=0.5) @app.post("/items/")
def return_item( item: Item):
results = { "item": item}
return results
我们看下效果,正常的接口请求没有变动。

我们看下接口的文档。文档在解析的时候,会解析出来这个额外的信息。

当然像Body,Path等也都可以增加这些参数。
二、 额外数据类型
到目前为止,您一直在使用常见的数据类型,如:
intfloatstrbool
但是您也可以使用更复杂的数据类型。
您仍然会拥有现在已经看到的相同的特性:
很棒的编辑器支持。
传入请求的数据转换。
响应数据转换。
数据验证。
自动补全和文档。
其他数据类型
下面是一些你可以使用的其他数据类型:
UUID:一种标准的 "通用唯一标识符" ,在许多数据库和系统中用作ID。
在请求和响应中将以
str表示。datetime.datetime:一个 Python
datetime.datetime.在请求和响应中将表示为 ISO 8601 格式的
str,比如:2008-09-15T15:53:00+05:00.datetime.date:Python
datetime.date.在请求和响应中将表示为 ISO 8601 格式的
str,比如:2008-09-15.datetime.time:一个 Python
datetime.time.在请求和响应中将表示为 ISO 8601 格式的
str,比如:14:23:55.003.datetime.timedelta:一个 Python
datetime.timedelta.在请求和响应中将表示为
float代表总秒数。Pydantic 也允许将其表示为 "ISO 8601 时间差异编码", 查看文档了解更多信息。
frozenset:在请求中,列表将被读取,消除重复,并将其转换为一个
set。在响应中
set将被转换为list。产生的模式将指定那些
set的值是唯一的 (使用 JSON 模式的uniqueItems)。在请求和响应中,作为
set对待:bytes:标准的 Python
bytes。在请求和相应中被当作
str处理。生成的模式将指定这个
str是binary"格式"。Decimal:标准的 Python
Decimal。在请求和相应中被当做
float一样处理。
下面是一个接口操作的示例,其中的参数使用了上面的一些类型。
from typing import Optional
from uuid import UUID
from fastapi import Body, FastAPI
from datetime import datetime, time, timedelta
app = FastAPI()
@app.put("/items/{id}")
async def read_items(
item_id: UUID,
start_time: Optional[datetime] = Body(None), end_time: Optional[datetime] = Body(None), after: Optional[timedelta] = Body(None), ):
start_process = start_time
duration = end_time - start_process
return {
"id": item_id,
"start_datetime": start_time,
"end_datetime": end_time,
"after": after,
"start_process": start_process,
"duration": duration,
}
那么我们看下接口文档的请求。

UUId来源 http://www.uuid.online/可以生成。
这样就是我们利用了这些参数的一个请求。

文章首发在公众号,欢迎关注。

FastAPI 学习之路(十二)接口几个额外信息和额外数据类型的更多相关文章
- FastAPI 学习之路(二十)接口文档配置相关
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2
既然我们已经有了所有的安全流程,就让我们来使用 JWT 令牌和安全哈希密码让应用程序真正地安全. 关于 JWT 它是一个将 JSON 对象编码为密集且没有空格的长字符串的标准.字符串看起来像这样: e ...
- FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2
OAuth2 规定在使用(我们打算用的)「password 流程」时,客户端/用户必须将 username 和 password 字段作为表单数据发送.我们看下在我们应该去如何实现呢. 我们写一个登录 ...
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- FastAPI 学习之路(二)
之前的文章已经介绍了如何安装,以及简单的使用,这篇文章呢,我们就不去分享如何安装对应的包了. 我们如何去编写呢,其实很简单,按照下面的步骤,一个简单的基于fastapi的接口就编写完毕. 首先:创建一 ...
- FastAPI 学习之路(二十七)安全校验
你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证.那么我们看下,需要怎么才能实现呢 ...
- Object-c学习之路十二(OC的copy)
oc中的拷贝分为:copy(浅拷贝)和mutablecopy(深拷贝). 浅拷贝也为指针拷贝,拷贝后原来的对象计数器会+1: 深拷贝为对象拷贝,原来的对象计数器不变. 注意:自定义对象拷贝时要实现NS ...
- Java学习之路(十二):IO流<二>
字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...
- Java学习之路(十二):IO流
IO流的概述及其分类 IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流(读写数据) 输出流(写数据) 流按操作 ...
随机推荐
- Elasticsearch集群搭建教程及生产环境配置
Elasticsearch 是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性. 本教程将提供有关如何设置 Elasticsearch 集群的一些信息,并将添加一 ...
- n, n+1, ..., 2n 中的 5 数环初探
本篇是 IMO 2021 第一题题解及相关拓展问题分析 和 IMO 2021 第 1 题拓展问题的两个极值的编程求解 的延伸篇. 从上两篇的分析,可知: 当 n < 48 时,n, n+1, . ...
- 【MIT6.S081/6.828】手把手教你搭建开发环境
目录 1. 简介 2. 安装ubuntu20.04 3. 更换源 3.1 更换/etc/apt/sources.list文件里的源 3.2 备份源列表 3.3 打开sources.list文件修改 3 ...
- 如何在RHEL7或CentOS 7系统下修改网卡名称(亲测有效~!)
亲测有效的更改RHEL7或CentOS 7的网卡名称的方法, 按照以下4步来操作就可以实现! Step 1 :网卡配置文件名称重命名为eth0[root@localhost ~]# ifconfige ...
- DPDK应用示例指南简介(汇总)
DPDK应用示例指南简介 <DPDK示例>系列文章主要是学习.记录.翻译DPDK官方示例文档.为了更好地理解和学习DPDK, 特通过对源码中的经典示例进行整理,供大家学习.交流和讨论. A ...
- Configuration对象和SessionFactory会话池
一.加载核心配置文件方式 二.加载映射文件方式 三.SessionFactory相当于连接池 四.获取session会话 同一个线程中获取的session两种方法获取的是同一个session对象: 不 ...
- 如何让阿三 Windows 10、11 的恢复分区(Recovery Partition)恢复到 “盖茨” 模式
如何将 Windows Server 2022 的恢复分区(Recovery Partition)移动到 C 盘之前,恢复 C 盘容量调整功能. 请访问原文链接:https://sysin.org/b ...
- 如何实现 iOS 短视频跨页面的无痕续播?
在一切皆可视频化的今天,短视频内容作为移动端产品新的促活点,受到了越来越多的重视与投入.盒马在秒播.卡顿率.播放成功率等基础优化之外,在用户使用体验上引入了无痕续播能力,提升用户观看视频内容的延续性. ...
- python3.x内置函数
函数 返回值类型 函数详情 abs(x) int|float 求绝对值,若是复数则返回复数的模 all(iterable) bool 若所有元素为真则返回True(非0,非空,非None) any(i ...
- Apache配置与应用
目录: 一.基于域名的虚拟主机 二.基于IP地址的虚拟主机 三.基于端口的虚拟主机 四.Apache连接保持 五.构建Web虚拟目录与用户授权限制 六.Apache日志分割 七.AWStats 分析系 ...