系列文章:

  FastAPI 学习之路(一)fastapi--高性能web开发框架

  FastAPI 学习之路(二)

  FastAPI 学习之路(三)

  FastAPI 学习之路(四)

  FastAPI 学习之路(五)

FastAPI 学习之路(六)查询参数,字符串的校验

  FastAPI 学习之路(七)字符串的校验

   FastAPI 学习之路(八)路径参数和数值的校验

  FastAPI 学习之路(九)请求体有多个参数如何处理?

  FastAPI 学习之路(十)请求体的字段

FastAPI 学习之路(十一)请求体 - 嵌套模型

一、额外信息

我们有这样的一个需求,我们希望可以看到接口的一个简单的请求示例展示在我们的接口文档中,应该如何实现呢。我们看下如何实现的:
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等也都可以增加这些参数。

二、 额外数据类型

到目前为止,您一直在使用常见的数据类型,如:

  • int

  • float

  • str

  • bool

但是您也可以使用更复杂的数据类型。

您仍然会拥有现在已经看到的相同的特性:

  • 很棒的编辑器支持。

  • 传入请求的数据转换。

  • 响应数据转换。

  • 数据验证。

  • 自动补全和文档。

其他数据类型

下面是一些你可以使用的其他数据类型:

  • 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 学习之路(十二)接口几个额外信息和额外数据类型的更多相关文章

  1. FastAPI 学习之路(二十)接口文档配置相关

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  2. FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2

    既然我们已经有了所有的安全流程,就让我们来使用 JWT 令牌和安全哈希密码让应用程序真正地安全. 关于 JWT 它是一个将 JSON 对象编码为密集且没有空格的长字符串的标准.字符串看起来像这样: e ...

  3. FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2

    OAuth2 规定在使用(我们打算用的)「password 流程」时,客户端/用户必须将 username 和 password 字段作为表单数据发送.我们看下在我们应该去如何实现呢. 我们写一个登录 ...

  4. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  5. FastAPI 学习之路(二)

    之前的文章已经介绍了如何安装,以及简单的使用,这篇文章呢,我们就不去分享如何安装对应的包了. 我们如何去编写呢,其实很简单,按照下面的步骤,一个简单的基于fastapi的接口就编写完毕. 首先:创建一 ...

  6. FastAPI 学习之路(二十七)安全校验

    你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证.那么我们看下,需要怎么才能实现呢 ...

  7. Object-c学习之路十二(OC的copy)

    oc中的拷贝分为:copy(浅拷贝)和mutablecopy(深拷贝). 浅拷贝也为指针拷贝,拷贝后原来的对象计数器会+1: 深拷贝为对象拷贝,原来的对象计数器不变. 注意:自定义对象拷贝时要实现NS ...

  8. Java学习之路(十二):IO流<二>

    字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...

  9. Java学习之路(十二):IO流

    IO流的概述及其分类 IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流(读写数据)     输出流(写数据) 流按操作 ...

随机推荐

  1. 新东方APP技术架构演进, 分布式系统架构经验分享

    今天的演讲题目是"新东方APP技术架构演进, C端技术经验分享" 作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监 古代东西方的思想家都产 ...

  2. Linux Ubuntu SVN图形界面 安装使用

    安装 sudo apt-get install rapidsvn 使用 rapidsvn

  3. D3之svg transform 与 css3 transform 区别与联系

    D3就不用多介绍了,在数据可视化界属于大佬级别的js库.在这里主要想记录一下在写程序期间遇到的一个问题. 如下图所示,想完成主视图在小地图上的映射,小地图的白色矩形框用来代表当前主视图可见区域,主视图 ...

  4. 前后端数据交互(三)——ajax 封装及调用

    有很多框架已经将 ajax 封装,需要的时候只需要调用就好,比如 jquery 是最常用的.我们为什么还需要学习 ajax 的封装呢?首先加强我们对ajax的认识,其次如果只是因为ajax请求需要引入 ...

  5. Leetcode 146. LRU 缓存机制

    前言 缓存是一种提高数据读取性能的技术,在计算机中cpu和主内存之间读取数据存在差异,CPU和主内存之间有CPU缓存,而且在内存和硬盘有内存缓存.当主存容量远大于CPU缓存,或磁盘容量远大于主存时,哪 ...

  6. Java HashMap工作原理:不仅仅是HashMap

    前言: 几乎所有java程序员都用过hashMap,但会用不一定会说. 近年来hashMap是非常常见的面试题,如何为自己的回答加分?需要从理解开始. "你用过hashMap吗?" ...

  7. 【数据库上】第五讲 E-R模型扩展知识

    第五讲 E-R模型扩展知识 一.E-R模型设计主意问题 1.1 用实体还是实体集 案例:学院对象的表示 应将各个学院看做实体集,还是实体? 方法一:将各个学院看作一个实体集 如果各学院具有不同属性特征 ...

  8. 取消input默认提示框

    input输入框有自动保存记忆功能,点击的时候之前输入的内容会在下拉框自动提示 autocomplete="off",这是H5的一个属性. <input type=" ...

  9. python库--tensorflow

    方法 返回值类型 参数 说明 张量    .constant() Tensort 张量 实例t value 创建一个常量tensor dtype=None 输出类型 shape=None 返回tens ...

  10. 海量列式非关系数据库HBase 原理深入

    HBase读数据流程: 前置关键词描述: Block Cache :读缓存,缓存上一次读的数据,整个ReginServer只有一个 MemStore :写缓存,缓存上一次写的数据,每个Store有一个 ...