4.FastAPI请求体

4.FastAPI请求体

4.1请求体(Request Body)

请求体是客户端发送到API的数据。

响应体时API返回给客户端的数据。

在FastAPI中,定义请求体需要使用pydantic模型;不能通过get请求发送请求体。

发送请求体的方法:

  • post

  • put

  • delete

  • patch

4.2创建数据模型

4.2.1定义模型

  • 需要使用pydantic中的BaseModel类

  • 声明自己的数据模型为一个继承BaseModel的类

代码如下:

from pydantic import BaseModel
​
class Language(BaseModel):
    language_id: str = None
    language_name: str
    description: str = None
    year: int = 2010
    ranking: int = 1

数据类型与默认值的使用规则与请求参数是相同的。如上面的代码中,除language_name外,其他均为可选的。

将上面的代码保存为language.py

4.2.2使用模型作为参数

在路由对应的函数中使用模型作为参数,代码如下:

from fastapi import FastAPI
from language import Language
​
app = FastAPI()
​
​
@app.post(path='/create_language')
async def create_language(language: Language):
    return language

在上面的代码中声明的参数类型为Language,接下来执行如下请求:

curl -H "Content-Type: application/json" -X POST -d "{\"language_name\": \"Python\", \"ranking\":9}" http://127.0.0.1:8000/create_language
​
{"language_id":null,"language_name":"Python","description":null,"year":2010,"ranking":9}

4.3使用请求体的好处

通过定义 pydantic model,FastAPI会进行如下操作:

  • 读取请求的正文,读取为JSON类型;

  • 转换为相应的Python类型

  • 验证数据

4.4同时定义路径参数、查询参数和请求体参数

在FastAPI中,对于路径参数、查询参数和请求体参数的区分规则:

  • 路径中存在的参数为路径参数;

  • 其他基本类型的参数为查询参数;

  • 声明为pydantic模型类型的参数为请求体;

代码如下:

from fastapi import FastAPI
from language import Language
​
app = FastAPI()
​
@app.post(path='/create_language/{a}/{b}')
async def create_lanuage(language: Language, a: int, b: int, x: int = 2, y: int = 3):
    return {'language': language, 'added': a + b, 'multiply': x * y}

执行请求:

curl -H "Content-Type: application/json" -X POST -d "{\"language_name\": \"Python\", \"ranking\":9}" http://127.0.0.1:8000/create_language/2/3
{
    "language": {
        "language_id":null,
        "language_name":"Python",
        "description":null,
        "year":2010,
        "ranking":9
    },
    "added":5,
    "multiply":6
}
C:\Users\Administrator>curl -H "Content-Type: application/json" -X POST -d "{\"language_name\": \"Python\", \"ranking\":9}" http://127.0.0.1:8000/create_language/2/3?"x=5&y=6"
{
    "language":{
        "language_id":null,
        "language_name":"Python",
        "description":null,
        "year":2010,
        "ranking":9
    },
    "added":5,
    "multiply":30
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janeb1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值