到现在为止,我们已经看到的常用数据类型,比如:

  • 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.
    在请求和响应中,将以总秒数的浮点数表示。
    * Pydantic还允许将其表示为“ ISO 8601时间差异编码”,有关更多信息,请参阅文档。
  • frozenset
    在请求和响应中,将其视为set
    在请求中,将读取列表,消除重复项并将其转换为set
    在响应中,set竟会被转化为list
    生成的架构将指定set值是唯一的(使用JSON架构的uniqueItems)。
  • bytes
    标准python的bytes
    在请求和响应中被视为str
    * 生成的模式将指定它是具有binary“格式”的str
  • Decimal
    标准python的Decimal
    在请求和响应中,处理方式与float相同。

    举例

    这是使用上述某些类型的参数进行路径操作的示例。 ```python 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, }

  1. 请注意,函数内部的参数具有其自然数据类型,例如,您可以执行常规的日期操作,例如:
  2. ```python
  3. from datetime import datetime, time, timedelta
  4. from uuid import UUID
  5. from fastapi import Body, FastAPI
  6. app = FastAPI()
  7. @app.put("/items/{item_id}")
  8. async def read_items(
  9. item_id: UUID,
  10. start_datetime: datetime = Body(None),
  11. end_datetime: datetime = Body(None),
  12. repeat_at: time = Body(None),
  13. process_after: timedelta = Body(None),
  14. ):
  15. start_process = start_datetime + process_after
  16. duration = end_datetime - start_process
  17. return {
  18. "item_id": item_id,
  19. "start_datetime": start_datetime,
  20. "end_datetime": end_datetime,
  21. "repeat_at": repeat_at,
  22. "process_after": process_after,
  23. "start_process": start_process,
  24. "duration": duration,
  25. }