FASTAPI 07-POST请求
前言
post请求接收json格式请求body
+V lzq599220 送python测试开发视频全套资料 总共80G
一、创建数据模型
创建模型,我们需要用到BaseModel,从 pydantic 中导入 BaseModel, 将你的数据模型声明为继承自 BaseModel 的类。
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Book(BaseModel):
book_name: str
book_author: str
book_price: float
description: Optional[str] = None
和声明查询参数时一样,当一个参数时必填时,声明这个参数,后面声明类型,当一个模型属性具有默认值时,它不是必需的。将默认值设为 None 可使其成为可选属性。
上述模型声明转化为json为
{
"book_name":"python",
"book_author":"Teacher Li",
"book_price":10.00,
"description":"books description"
}
由于 description 是可选的(它们的默认值为 None),下面的json也将是有效的:
{
"book_name":"python",
"book_author":"Teacher Li",
"book_price": 10.00
}
二、创建一个POST请求
完整的代码如下:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
# 创建Book模型
class Book(BaseModel):
book_name: str
book_author: str
book_price: float
description: Optional[str] = None
# 声明实例
app = FastAPI()
# 声明一个创建书本信息的post接口
@app.post("/books/")
async def create_book(book: Book):
return book
if __name__ == '__main__':
uvicorn.run(app)
使用了 Python 类型声明,FASTAPI 将会:
- 将请求体作为 json 读取,转换为相应的类型(在需要时)。
- 校验数据。当数据无效,将返回一条清晰易读的错误信息,指出不正确数据的确切位置和内容。
- 将接收的数据赋值到参数 book中。由于你已经在函数中将它声明为 book类型,你还将获得对于所有属性及其类型的一切编辑器支持(代码补全等)。
- 为模型生成 json模式定义,你还可以在其他任何对你的项目有意义的地方使用它们。 这些模式将成为生成的 Docs 模式的一部分,并且被Swagger所使用。
启动服务,通过apifox进行访问该接口:
查看Docs模式,也可看出json在Swagger一部分:
三、path路径参数与json请求body
同时请求路径参数与body请求,FastAPI 将识别出与路径参数匹配的函数参数应从路径中获取,而声明为 Pydantic 模型的函数参数应从请求体中获取。代码如下:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
# 创建book模型
class Book(BaseModel):
book_name: str
book_author: str
book_price: float
description: Optional[str] = None
app = FastAPI()
@app.post("/books/{book_id}")
async def update_book(book_id: int, book: Book):
return {"book_id": book_id, **book.dict()}
此接口为,传入book_id, 修改该book_id对应的book信息
总结
本章介绍了如何在FastAPI框架中处理POST请求以及如何结合路径参数来接收并处理JSON格式的请求体,FastAPI利用Python类型提示和Pydantic模型,简化了POST请求中JSON数据的接收和处理过程,同时也提供了强大的数据验证和API文档自动生成功能。通过结合路径参数与请求体,开发者能够轻松地设计和实现复杂接口;