fastapi学习笔记1

fastapi学习笔记1

传入参数

  • python中使用*来表示,函数定义方法的后面都需要传入变量名,也就是不再是位置参数,而是关键字参数
  • 如果body中只使用了一个json对象,那么可以使用关键字embed来将这个参数转成对象,否则默认就必须是关键字参数的传入办法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None


@app.put("/items/{item_id}")
async def update_item(*, item_id: int, item: Item = Body(..., embed=True)):
results = {"item_id": item_id, "item": item}
return results

# 传入的参数格式:
{
"item": {
"name": "Foo",
"description": "The pretender",
"price": 42.0,
"tax": 3.2
}
}


# 如果没有加`embed`,参数格式就是:
{
"name": "Foo",
"description": "The pretender",
"price": 42.0,
"tax": 3.2
}

传参的定义以及校验

使用pydantic模块以及自身的Query, Body...均可以实现

注意点

  • 传入的参数是datatime类型时,request和response都会转成str,如果返回需要按照你设定的格式,可以使用strftime方法转一次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@app.put("/items/{item_id}")
async def read_items(
item_id: int,
start_datetime: datetime = Body(None, format="YY-mm-dd HH:MM:SS"),
end_datetime: datetime = Body(None, example="hello,world"),
repeat_at: time = Body(None),
process_after: timedelta = Body(None),
):
print(start_datetime.date)
print(start_datetime.strftime("%d"))
start_process = start_datetime + process_after
duration = end_datetime - start_process
return {
"item_id": item_id,
"start_datetime": start_datetime.strftime("%y-%m-%d %H:%M:%S"),
"end_datetime": end_datetime.strftime("%y-%m-%d %H:%M:%S"),
"repeat_at": repeat_at,
"process_after": process_after,
"start_process": start_process.strftime("%y-%m-%d %H:%M:%S"),
"duration": duration,
}