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/”。它从客户端的请求中接收一个学生类的对象作为身体参数。为了测试这个路由,启动Uvicorn服务器,并在浏览器中打开Swagger UI文档,访问http://localhost:8000/docs

文档中指出,”/students/”路由与post方法的 student_data() 函数相连。在模式部分,学生模型将被列出。

FastAPI - 请求主体

展开它前面的节点,可以看到该模型的结构

FastAPI - 请求主体

点击 Try it out 按钮,在请求体中填入测试值。

FastAPI - 请求主体

点击 执行 按钮,得到服务器的响应值。

FastAPI - 请求主体

虽然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方法,它有一个带有两个参数的请求体。

FastAPI - 请求主体

我们也可以将一个操作函数声明为具有路径和/或查询参数以及请求体。让我们修改student_data()函数,使其拥有一个路径参数 “college”,”age “作为查询参数,一个学生模型对象作为主体参数。

@app.post("/students/{college}")
async def student_data(college:str, age:int, student:Student):
   retval={"college":college, "age":age, **student.dict()}
   return retval

该函数将学院和年龄参数的值与学生对象的字典表示法一起添加,并将其作为响应返回。我们可以查看API文档,如下所示

FastAPI - 请求主体

可以看出, college 是路径参数, age 是查询参数, 学生 模型是请求体。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程