首页>文档>FastAPI>fastapi中文手册:Extra data types(额外数据类型)

fastapi中文手册:Extra data types(额外数据类型)

fastapi中文手册:Extra data types(额外数据类型)

FastAPI 是一个高性能 Web 框架,用于构建 API。

主要特性:

  • 快速:非常高的性能,与 NodeJS 和 Go 相当
  • 快速编码:将功能开发速度提高约 200% 至 300%
  • 更少的错误:减少约 40% 的人为错误
  • 直观:强大的编辑器支持,自动补全无处不在,调试时间更少
  • 简易:旨在易于使用和学习,减少阅读文档的时间。
  • 简短:减少代码重复。
  • 稳健:获取可用于生产环境的代码,具有自动交互式文档
  • 基于标准:基于并完全兼容 API 的开放标准 OpenAPI 和 JSON Schema 

直到现在,你已经使用了常见的下面的这几种数据类型:

  • int
  • float
  • str
  • bool
    但是你也可以使用更复杂的数据类型。

一、其他数据类型

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

1. UUID:

  • 一个标准的“通用唯一标识符”,在许多数据库和系统中通常作为ID使用。
  • 在请求和响应中将以str表示。

2. datetime.datetime:

  • Python的日期时间类型: datetime.datetime.
  • 在请求和响应中,将以ISO 8601格式的str表示, 比如: 2008-09-15T15:53:00+05:00.

3. datetime.date:

  • python的日期类型: datetime.date.
  • 在请求和响应中,将以ISO 8601格式的str表示, 比如: 2008-09-15.

4. datetime.time:

  • Python的时间类型: datetime.time.
  • 在请求和响应中,将以ISO 8601格式的str表示, 比如: 14:23:55.003.

5. datetime.timedelta:

  • Python的时间增量类型: datetime.timedelta.
  • 在请求和响应中,将以float表示总秒数.
  • Pydantic还允许将其表示为“ ISO 8601时间差异编码”

6. frozenset:

  • 在请求和响应中, 格式与 set相同:
    • 在请求中,将读取列表,消除重复,并将其转换为“集合”.
    • 在响应中,set将会被转化为list.
    • 生成的schema中将制定set中的值是唯一的 (using JSON Schema’s uniqueItems).

7. bytes:

  • Python标准类型: bytes.
  • 在请求和响应中将被视为str
  • 生成的Schema将指定它是带有binary“格式”的str

8. Decimal:

  • Python标准类型: Decimal.
  • 在请求和响应中,将以float格式.

二、举例

下面是一些使用上面的数据类型的一些路径操作函数的例子:

from datetime import datetime, time, timedelta 
from uuid import UUID 
from fastapi import Body, FastAPI

app = FastAPI()

@app.put("/items/{item_id}")
async def read_items(
    item_id: UUID,
    start_datetime: datetime = Body(None),
    end_datetime: datetime = Body(None),
    repeat_at: time = Body(None),
    process_after: timedelta = Body(None)
):
   pass

注意:函数内部的参数具有其自然数据类型

例如,您可以执行常规的日期操作,例如:

from datetime import datetime, time, timedelta
from uuid import UUID

from fastapi import Body, FastAPI

app = FastAPI()

@app.put("/items/{item_id}")
async def read_items(
    item_id: UUID,
    start_datetime: datetime = Body(None),
    end_datetime: datetime = Body(None),
    repeat_at: time = Body(None),
    process_after: timedelta = 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,
    }

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索