到现在为止,我们已经看到的常用数据类型,比如:
intfloatstrbool
但是你也可以使用更多的混合数据类型。
到目前为止,您仍将拥有相同的功能:
- 强大的编辑器支持
- 来自传入请求的数据转换
- 为响应数据进行数据转换
- 数据验证
-
其他数据类型
这里有一些你可以使用的额外的数据类型:
UUID
一个标准的“通用唯一标识符”,在许多数据库和系统中通常作为ID使用。
在请求和响应中将以str表示。datetime.datetime:
一个python的datetime.datetime.
在请求和响应中,将以ISO 8601格式表示为str,例如:2008-09-15T15:53:00 + 05:00。datetime.date:
Pythondatetime.date.
在请求和响应中,将以ISO 8601格式表示为str,例如:2008-09-15。datetime.time:
一个python的datetime.time.
在请求和响应中,将以ISO 8601格式的str表示,例如:14:23:55.003。datetime.timedelta:
一个pythondatetime.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, }
请注意,函数内部的参数具有其自然数据类型,例如,您可以执行常规的日期操作,例如:```pythonfrom datetime import datetime, time, timedeltafrom uuid import UUIDfrom fastapi import Body, FastAPIapp = 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_afterduration = end_datetime - start_processreturn {"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,}
