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包中 流按流向分为两种:输入流(读写数据) 输出流(写数据) 流按操作 ...
随机推荐
- 手机端rem简单配置相关
手机端rem简单配置相关 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 ...
- configparser读
#-*-coding:utf-8-*-__author__ = "logan.xu"import configparserconf = configparser.ConfigPar ...
- JS中原型与原型链
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function等 是 JS 自带的函数对象.下面举例说明. var o1 ...
- MFC中L, _T(),TEXT,_TEXT区别以及含义
字符串前面加L表示该字符串是Unicode字符串. _T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变.因此,Visual C++里边 ...
- 快速模式第三包收尾之quick_inI2()
快速模式第三包收尾之quick_inI2() 文章目录 快速模式第三包收尾之quick_inI2() 1. 序言 2. quick_inI2()处理流程图 3. 报文格式 4. quick_inI2( ...
- Spring Boot入门系列(二十六)超级简单!Spring Data JPA 的使用!
之前介绍了Mybatis数据库ORM框架,也介绍了使用Spring Boot 的jdbcTemplate 操作数据库.其实Spring Boot 还有一个非常实用的数据操作框架:Spring Data ...
- jq给动态标签绑定事件
$(document).on("click", ".autocompleteDiv .autocomplete_ul li", function () { lo ...
- python关键字--yield
彻底理解Python中的yield
- WPF 过渡效果
http://blog.csdn.net/lhx527099095/article/details/8005095 先上张效果图看看 如果不如您的法眼 可以移步了 或者有更好的效果 可以留言给我 废话 ...
- 抽奖之Flash大转盘
1.搭建JS与Flash互通的环境 function thisMovie(movieName){ if (window.document[movieName]) { return window.doc ...