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)
正确传参的请求结果

校验错误的请求结果

查看 Swagger API 文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菠萝测试笔记

来支持下测试小锅锅

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值