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包中 流按流向分为两种:输入流(读写数据) 输出流(写数据) 流按操作 ...
随机推荐
- 回调与Promise
Promise 对象就是用于表示一个异步操作的最终状态(成功或失败).它的流程就是在什么状态下需要执行什么样的操作. resolve简单理解就是一步操作执行成功后的回调函数 then是Promise对 ...
- AQS实现原理
AQS实现原理 AQS中维护了一个volatile int state(共享资源)和一个CLH队列.当state=1时代表当前对象锁已经被占用,其他线程来加锁时则会失败,失败的线程被放入一个FIFO的 ...
- C++回调机制
一直对回调机制不是很了解,今天索性搜了很多资料顺便整理一下,进步一点点. 1.Callback方式(回调函数) 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数.如果你把函数的指针( ...
- thrift的介绍及其使用
什么是thrift Thrift是Facebook于2007年开发的跨语言的rpc服框架,提供多语言的编译功能,并提供多种服务器工作模式:用户通过Thrift的IDL(接口定义语言)来描述接口函数及数 ...
- 使用 IDEA 配合 Dockerfile 部署 SpringBoot 工程
准备 SpringBoot 工程 新建 SpringBoot 项目,默认的端口是 8080 ,新建 Controller 和 Mapping @RestController public class ...
- Spring系列.Environment接口
Environment 接口介绍 在 Spring 中,Environment 接口主要管理应用程序两个方面的内容:profile 和 properties. profile 可以简单的等同于环境,比 ...
- client-go实战之三:Clientset
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 前后端数据交互(五)——什么是 axios?
一.什么是 axios ? axios是基于 Promise 的 ajax 封装库,也是前端目前最流行的 ajax 请求库.简单地说发送 get.post 请求,是一个轻量级的库,使用时可直接引入. ...
- Linux 动态库的编译和使用
1. 动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组 ...
- go 1.14上怎么下载第三方包
终端 go env -w GO111MODULE=on GOPATH-->src/pkg/bin in src源码包中 某个包中 go mod init XXX(表示当前报的第三方依赖) 然 ...