fastapi教程翻译(十):Extra data types(
2019-10-15 本文已影响0人
warmsirius
直到现在,你已经使用了常见的下面的这几种数据类型:
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'suniqueItems
).
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,
}