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’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,
}