FastAPI(19)- Response Model 响应模型 (上)

简介: FastAPI(19)- Response Model 响应模型 (上)

前言


  • 前面文章写的这么多路径函数最终 return 的都是自定义结构的字典
  • FastAPI 提供了 response_model 参数,声明 return 响应体的模型

 

什么是路径操作、路径函数

# 路径操作

@app.post("/items/", response_model=Item)

# 路径函数

async def create_item(item: Item):

   ...

 

重点

response_model 是路径操作的参数,并不是路径函数的参数哦

  • @app.get()
  • @app.post()
  • @app.put()
  • @app.delete()

 

最简单的栗子


#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog:  https://www.cnblogs.com/poloyy/
# time: 2021/9/21 5:12 下午
# file: 17_response_model.py
"""
from typing import List, Optional
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
    tags: List[str] = []
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
    return item
if __name__ == "__main__":
    uvicorn.run(app="16_Header:app", host="127.0.0.1", port=8080, reload=True, debug=True)


上面代码栗子,请求模型和响应模型都是同一个 Pydantic Model

 

FastAPI 通过 response_model 会做

  • 将输出数据转换为 Model 中声明的类型
  • 验证数据
  • 在 OpenAPI 给 Response 添加 JSON Schema 和 Example Value
  • 最重要:将输出数据限制为 model 的数据

 

正确传参的请求结果

image.png


查看 Swagger API 文档

微信图片_20220515143946.png


为什么 response_model 不是路径函数参数而是路径操作参数呢?

  • 因为路径函数的返回值并不是固定的,可能是 dict、数据库对象,或其他模型
  • 但是使用响应模型可以对响应数据进行字段限制和序列化

 

区分请求模型和响应模型的栗子


需求

  • 假设一个注册功能
  • 输入账号、密码、昵称、邮箱,注册成功后返回个人信息
  • 正常情况下不应该返回密码,所以请求体和响应体肯定是不一样的

 

实际代码

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
app = FastAPI()
class UserIn(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: Optional[str] = None
class UserOut(BaseModel):
    username: str
    email: EmailStr
    full_name: Optional[str] = None
@app.post("/user/", response_model=UserOut)
async def create_user(user: UserIn):
    return user


  • 即使请求数据包含了密码,但因为响应模型不包含 password,所以最终返回的响应数据也不会包含 password
  • FastAPI 通过 Pydantic 过滤掉所有未在响应模型中声明的数据

 

相关文章
|
6月前
|
JSON API 持续交付
逐步指南:使用FastAPI部署YOLO模型的步骤
逐步指南:使用FastAPI部署YOLO模型的步骤
|
数据库
FastAPI(53)- Response Headers 响应设置 Headers
FastAPI(53)- Response Headers 响应设置 Headers
542 0
FastAPI(53)- Response Headers 响应设置 Headers
|
3月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
232 1
|
3月前
|
存储 缓存 NoSQL
【性能飙升的秘密】FastAPI应用如何借助缓存技术实现极速响应?揭秘高效Web开发的制胜法宝!
【8月更文挑战第31天】FastAPI是一个高性能Web框架,利用Starlette和Pydantic实现高效API构建。本文介绍如何通过缓存提升FastAPI应用性能,包括使用`starlette-cache[redis]`实现Redis缓存,以及缓存一致性和缓存策略的注意事项。通过具体示例展示了缓存的配置与应用,帮助开发者构建更高效的Web应用。
186 0
|
JSON Kubernetes API
使用FastAPI部署Ultralytics YOLOv5模型
YOLO是You Only Look Once(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以在本文中,我们将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。
283 5
|
JSON NoSQL API
全面拥抱 FastApi — 响应模型
全面拥抱 FastApi — 响应模型
|
机器学习/深度学习 Python
【Python】fastapi框架之Web部署机器学习模型
【Python】fastapi框架之Web部署机器学习模型
|
JavaScript API 网络安全
FastAPI(52)- Response Cookies 响应设置 Cookies
FastAPI(52)- Response Cookies 响应设置 Cookies
398 0
FastAPI(52)- Response Cookies 响应设置 Cookies
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)