前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI 学习之路(四)使用pydantic模型做请求体

FastAPI 学习之路(四)使用pydantic模型做请求体

作者头像
雷子
发布2021-07-29 15:28:04
2K0
发布2021-07-29 15:28:04
举报

FastAPI 系列文章:

FastAPI 学习之路(一)

FastAPI 学习之路(二)

FastAPI 学习之路(三)

前言

我们之前的文章分享了,如何增加参数,那么我们这次分享来看下请求体。

正文

什么是请求体:请求体是客户端发送给 API 的数据。

什么是响应体:响应体是 API 发送给客户端的数据。

大部分的请求都会有请求体的。你不能使用 GET 操作(HTTP 方法)发送请求体。


我们去写一个例子,去定义一下请求体

代码语言:javascript
复制
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
class Item(BaseModel):
    name: str
    desc: Optional[str] = None
    price: float
@app.post("/items/")
def create_item(item: Item):
    return item

那么我们部署下,然后用postman请求下

可以正常返回我们预期的结果。

我们在代码中创建数据模型,然后数据模型声明为继承自 BaseModel 的类。

使用标准的 Python 类型来声明所有属性。

当一个模型属性具有默认值时,它不是必需的。否则它是一个必需属性。将默认值设为 None 可使其成为可选属性。我们去请求下,当我们不传递desc看下。

从结果中,我们可以看出,当我们没有传递参数的时候,默认是null,那么我看下如果我们没有定义可选属性的不传递,接口会怎么返回给我们呢。

我们可以看到,接口已经返回了对应的错误。所以当我们在定义的时候就可以对对应的参数进行是否是可选择的参数。其实我们在定义的时候,也定义了类型,比如我们对应price定义是一个float,但是呢,我们现在给它传递一个str类型,比如五角。

接口返回的是一个类型错误,因为后台在处理的时候呢,默认转化了类型,转化失败,就直接fastapi自动处理完毕了。并且返回了统一格式的返回值。

我们看下接口文档。

接口文档默认定义模型将成为生成的 OpenAPI 模式的一部分,并且在交互式 API 文档中展示。

当然我们前面的请求体是没有做处理,其实我们在实际中还是要处理呢,那么我们如何处理呢,其实很简单,我们看下,当价格大于100,我们返回太贵了。 (西瓜要是100一斤,也很贵了。)

如何去实现呢。

代码语言:javascript
复制
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
    name: str
    desc: Optional[str] = None
    price: float

app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
    if item.price>100:
        return "太贵了"
    return item

这样就完成了,那么我们看下。请求是否返回正确,当传递的价格大于100

当我们去传递的价格小于100时候如何返回呢?

可以看到这样是符合我们需求的。

后续我们会分享不适用 Pydantic模型也可以。


后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FastAPI 系列文章:
  • 我们在代码中创建数据模型,然后数据模型声明为继承自 BaseModel 的类。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档