FastAPI(16)- 额外的数据类型

简介: FastAPI(16)- 额外的数据类型

常见的数据类型


  • int
  • float
  • str
  • bool

 

但 FastAPI 支持使用更复杂的数据类型

仍然能得到 FastAPI 的支持

  • IDE 智能提示
  • 请求数据的数据类型转换
  • 响应数据的数据类型转换
  • 数据验证
  • 自动注释和文档

 

复杂的数据类型


UUID

  • 常见的唯一标识符
  • str 类型

 

datetime.datetime

  • Python 的 datetime.datetime
  • str 类型
  • 栗子:2008-09-15T15:53:00+05:00

 

datetime.date

  • Python 的 datetime.date
  • str 类型
  • 栗子:2008-09-15

 

datetime.time

  • Python 的 datetime.time
  • str 类型
  • 栗子:15:53:00.003

 

datetime.timedelta

  • Python 的 datetime.timedelta
  • float 类型
  • 表示秒数

 

frozenset

  • set 类型
  • 在请求中,将读取一个列表,消除重复项并将其转换为一个集合
  • 在响应中,集合将被转换为列表
  • 会在 Schema 中加一个标识 uniqueItems,表示 set 里面的值是唯一的

 

bytes

  • Python 标准类型 bytes
  • str 类型
  • 生成 Schema 会指定它为一个带有二进制格式的 str

 

Decimal

  • Python 标准类型十进制
  • float 类型

 

重点

  • FastAPI 不只是有以上的复杂数据类型,更多的数据类型可以看 Pydantic Types
  • 只要 Pydantic 有的,FastAPI 都支持

 

复杂数据类型的栗子


#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog:  https://www.cnblogs.com/poloyy/
# time: 2021/9/21 1:58 下午
# file: 14_extra.py
"""
import uuid
from datetime import datetime, time, timedelta
from decimal import Decimal
from typing import Optional
from uuid import UUID
import uvicorn
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_items(
        item_id: UUID,
        start_datetime: Optional[datetime] = Body(None),
        end_datetime: Optional[datetime] = Body(None),
        repeat_at: Optional[time] = Body(None),
        process_after: Optional[timedelta] = Body(None),
        address: Optional[frozenset] = Body(None),
        computer: Optional[bytes] = Body(None),
        age: Optional[Decimal] = Body(None),
):
    start_process = start_datetime + process_after
    duration = end_datetime - start_process
    return {
        "item_id": item_id,
        "start_datetime": start_datetime,
        "end_datetime": end_datetime,
        "repeat_at": repeat_at,
        "process_after": process_after,
        "start_process": start_process,
        "duration": duration,
        "address": address,
        "computer": computer,
        "age": age,
    }
if __name__ == "__main__":
    print(uuid.uuid1())
    uvicorn.run(app="14_extra:app", host="127.0.0.1", port=8080, reload=True, debug=True)


正确传参的请求结果

image.png


校验错误的请求结果

image.png

image.png

查看 Swagger API 文档

微信图片_20220515143314.png

相关文章
|
JSON API 数据格式
FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据
FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据
560 0
FastAPI(13)- 详解 Fields,针对 Pydantic Model 内部字段添加额外校验和元数据
|
开发框架 JSON 数据库
FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
|
Python
fastapi 模式的额外信息,示例 / Cookie参数 / Header参数
fastapi 模式的额外信息,示例 / Cookie参数 / Header参数
238 0
fastapi 模式的额外信息,示例 / Cookie参数 / Header参数
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
|
NoSQL Redis 数据库
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程