6.FastAPI参数数据类型
在FastAPI中,声明参数时限定数据类型会拥有相同的特性:
编辑器支持
传入请求的数据转换
响应数据转换
数据验证
自动补全和文档
参数的数据类型可以为基本数据类型,也可以为复杂数据类型
6.1基本数据类型
int
float
str
bool
6.2复杂数据类型
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,在请求和响应中将表示为 float 代表总秒数;
frozenset
在请求和响应中,作为 set 对待:
在请求中,列表将被读取,消除重复,并将其转换为一个 set
在响应中 set 将被转换为 list
bytes
标准的 Python bytes,在请求和相应中被当作 str 处理,生成的模式将指定这个 str 是 binary "格式";
Decimal
标准的 Python Decimal,在请求和相应中被当做 float 一样处理;
关于 有效的pydantic数据类型,可以在Field Types - pydantic找到。
代码示例:
from fastapi import FastAPI
from fastapi import Body
from pydantic import BaseModel
from datetime import datetime
from datetime import time
app = FastAPI()
class Task(BaseModel):
task_id: str = Body(None)
task_name: str = Body(...)
start_time: datetime = Body(datetime.now())
end_time: datetime = Body(None)
run_way: int = Body(..., gt=0, lt=3)
run_at: time = Body(None)
run_interval: int = Body(None)
@app.post(path='/task')
async def task(task: Task):
if task.run_way == 1:
return {
'description': 'This task will run at {0}'.format(task.run_at),
'eff_time': {
'start_time': task.start_time,
'end_time': task.end_time
}
}
elif task.run_way == 2:
return {
'description': 'This task will run interval {0}'.format(task.run_interval),
'eff_time': {
'start_time': task.start_time,
'end_time': task.end_time
}
}执行请求:
curl -H "Content-Type: application/json" -X POST -d "{\"task_name\":\"\", \"run_way\":1, \"run_at\": \"02:30:00\"}" http://127.0.0.1:8000/task
{
"description":"This task will run at 02:30:00",
"eff_time":{
"start_time":"2022-01-12T16:13:50.950009",
"end_time":null
}
}版权声明:本文为chenhaiy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。