FastAPI 学习之路(五)
系列文章:
FastAPI 学习之路(一)fastapi--高性能web开发框架
什么是请求体:请求体是客户端发送给 API 的数据。
什么是响应体:响应体是 API 发送给客户端的数据。
大部分的请求都会有请求体的。你不能使用 GET 操作(HTTP 方法)发送请求体。
我们去写一个例子,去定义一下请求体
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一斤,也很贵了。)
如何去实现呢。
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时候如何返回呢?
可以看到这样是符合我们需求的。