我们在刚开始学习中,一般接触的就是@app.get("/"),尽管其简单易学。但在实际应用中就有缺陷,比如我想要输入的参数是一个待处理文本,这样可能会因为文本过长而无法输入等问题的出现,因此我也学习了一下POST,并写下这篇文章进行记录和分享学习过程。其中代码参考了官网,然后做一点自己的研究过程。
我们使用 Pydantic 模型来声明请求体,并能够获得它们所具有的所有能力和优点。
一、post()类
1、首先,你需要从 pydantic
中导入 BaseModel
:
2、然后,将你的数据模型声明为继承自 BaseModel
的类。使用标准的 Python 类型来声明所有属性:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Car(BaseModel):
name: str //必选参数
weight: Optional[str] = None //可选参数
price: float //必选参数
length: Optional[float] = None //可选参数
app = FastAPI()
@app.post("/car/")
async def create_item(car: Car):
return car
3、里面当然可以创建必须参数,可选参数,如果不了解可以看我第一次的文章:https://mp.csdn.net/mp_blog/creation/editor/124687834
在终端打开
得到结果
跳转到
4、此时没发现有什么东西不要担心,加上/docs打开交互文档
5、点击POST
可看见需要的参数类型,点击右侧的try it out,即可输入可自己要的参数
6、在Request body中输入自己的参数
7、点击Execute,即可获得自己想要的Response
8、当然了,你也可以不输入可选参数
二、put()类
其实与get有点类似
from fastapi import FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(item_id: int):
return {"item_id": item_id}
通常是在完成请求体+路径参数中结合使用
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item):
return {"item_id": item_id, **item.dict()}
在终端使用uvicorn main:app --reload运行后,打开交互文档,点击try it out 即可进行输入
127.0.0.1:8000/docs
当然了也可以应用于请求体 + 路径参数 + 查询参数
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
app = FastAPI()
@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: Optional[str] = None):
result = {"item_id": item_id, **item.dict()}
if q:
result.update({"q": q})
return result
即可获得
输入自己想要的
得到结果
谢谢大家的浏览!!!有问题或者意见可以私信或者评论谢谢大家