- FastAPI 教程
- FastAPI - 首页
- FastAPI - 简介
- FastAPI - Hello World
- FastAPI - OpenAPI
- FastAPI - Uvicorn
- FastAPI - 类型提示
- FastAPI - IDE 支持
- FastAPI - REST 架构
- FastAPI - 路径参数
- FastAPI - 查询参数
- FastAPI - 参数验证
- FastAPI - Pydantic
- FastAPI - 请求体
- FastAPI - 模板
- FastAPI - 静态文件
- FastAPI - HTML 表单模板
- FastAPI - 访问表单数据
- FastAPI - 上传文件
- FastAPI - Cookie 参数
- FastAPI - 头部参数
- FastAPI - 响应模型
- FastAPI - 嵌套模型
- FastAPI - 依赖项
- FastAPI - CORS
- FastAPI - CRUD 操作
- FastAPI - SQL 数据库
- FastAPI - 使用 MongoDB
- FastAPI - 使用 GraphQL
- FastAPI - Websockets
- FastAPI - FastAPI 事件处理器
- FastAPI - 挂载子应用
- FastAPI - 中间件
- FastAPI - 挂载 Flask 应用
- FastAPI - 部署
- FastAPI 有用资源
- FastAPI - 快速指南
- FastAPI - 有用资源
- FastAPI - 讨论
FastAPI - 请求体
现在我们将使用 Pydantic 模型对象作为客户端请求的请求体。如前所述,我们需要为此使用 POST 操作装饰器。
import uvicorn from fastapi import FastAPI from typing import List from pydantic import BaseModel, Field app = FastAPI() class Student(BaseModel): id: int name :str = Field(None, title="name of student", max_length=10) subjects: List[str] = [] @app.post("/students/") async def student_data(s1: Student): return s1
可以看到,student_data() 函数用@app.post() 装饰器装饰,该装饰器的 URL 端点为 "/students/"。它从客户端的请求中接收 Student 类的对象作为 Body 参数。要测试此路由,请启动 Uvicorn 服务器并在浏览器中访问 https://127.0.0.1:8000/docs 打开 Swagger UI 文档。
文档识别出 "/students/" 路由与student_data() 函数以及 POST 方法相关联。在 schemas 部分,将列出 Student 模型。
展开其前面的节点以显示模型的结构。
点击“试一试”按钮在请求体中填写测试值。
点击“执行”按钮获取服务器的响应值。
虽然 Pydantic 模型会自动填充请求体,但也可以使用单个值向其添加属性。为此,我们需要将 Body 类对象用作要装饰的操作函数的参数。
首先,我们需要从fastapi导入 Body 类。如下例所示,在@app.post() 装饰器下方,在student_data() 函数的定义中声明 'name' 和 'marks' 作为 Body 参数。
import uvicorn from fastapi import FastAPI, Body @app.post("/students") async def student_data(name:str=Body(...), marks:int=Body(...)): return {"name":name,"marks": marks}
如果我们检查 Swagger UI 文档,我们应该能够找到与 student_data() 函数关联的此 POST 方法,并且该方法具有包含两个参数的请求体。
还可以声明一个操作函数,使其除了请求体之外,还具有路径和/或查询参数。让我们修改 student_data() 函数,使其具有路径参数 'college'、查询参数 'age' 和一个 Student 模型对象作为主体参数。
@app.post("/students/{college}") async def student_data(college:str, age:int, student:Student): retval={"college":college, "age":age, **student.dict()} return retval
该函数添加 college 和 age 参数的值以及 Student 对象的字典表示形式,并将其作为响应返回。我们可以如下检查 API 文档:-
可以看到,college 是路径参数,age 是查询参数,而Student 模型是请求体。