系列文章:

  FastAPI 学习之路(一)fastapi--高性能web开发框架

  FastAPI 学习之路(二)

  FastAPI 学习之路(三)

  FastAPI 学习之路(四)

  FastAPI 学习之路(五)

FastAPI 学习之路(六)查询参数,字符串的校验

  FastAPI 学习之路(七)字符串的校验

   FastAPI 学习之路(八)路径参数和数值的校验

  FastAPI 学习之路(九)请求体有多个参数如何处理?

  FastAPI 学习之路(十)请求体的字段

FastAPI 学习之路(十一)请求体 - 嵌套模型

    FastAPI 学习之路(十二)接口几个额外信息和额外数据类型

FastAPI 学习之路(十三)Cookie 参数,Header参数

我们可以在我们不同的请求路径的返回参数使用响应模型。我们看一个简单的demo。

from typing import List, Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class One(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
@app.post("/items/", response_model=One)
def create_item(item: One):
return item

我们可以看下,接口的正常返回

esponse_model是「装饰器」方法(get,post 等)的一个参数。不像之前的所有参数和请求体,它不属于路径操作函数。

它接收的类型与你将为 Pydantic 模型属性所声明的类型相同,因此它可以是一个 Pydantic 模型,但也可以是一个由 Pydantic 模型组成的 list,例如 List[Item]

FastAPI 将使用此 response_model 来:

  • 将输出数据转换为其声明的类型。

  • 校验数据。

  • 在 OpenAPI 的路径操作中为响应添加一个 JSON Schema。

  • 并在自动生成文档系统中使用。

但最重要的是:

  • 会将输出数据限制在该模型定义内。

我们下面做一个演示,我们正常的都应该知道,我们去创建用户的时候呢,我们的密码是明文的,我们要返回的用户信息中,不能携带我们的密码,我们应该如何处理呢,其实很简单

from typing import Optional

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

我们看下接口的实际返回

我们看下接口的文档的展示

我们在接口的请求中,如果不传递,我不想要返回带默认值的,

我们看下代码如何实现的

from typing import Optional

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

其实就是response_model_exclude_unset来处理,我们看下实际的效果

那么这个时候,我们传递了呢。

可以看到,我们传递了参数就可以正常的展示,不传递参数的,我们不返回默认的值。

文章首发在公众号,欢迎关注。

最新文章

  1. TCP/IP之Nagle算法与40ms延迟
  2. css3学习--border
  3. go环境import cycle not allowed问题处理
  4. logstash搭建日志追踪系统
  5. Java编程语言中sleep()和yield()的区别
  6. iOS - UIImageView
  7. Tomcat下部署多个项目
  8. [ActionScript 3.0] AS3 绘制立方体
  9. Spiral Matrix 解答
  10. Theano+Keras+CUDA7.5+VS2013+Windows10x64配置
  11. Python 接口测试(一)
  12. Einbahnstrasse
  13. maven问题解决:提示maven依赖包缺失,但是去文件夹下找确实有这个包
  14. dtNavMeshQuery::findLocalNeighbourhood m_tinyNodePool->getNode dtHashRef整数哈希 getPortalPoints dtOverlapPolyPoly2D
  15. 「Python」数据清洗常用正则
  16. linux samba建立共享文件夹
  17. BZOJ2795&2890&3647[Poi2012]A Horrible Poem——hash
  18. Received empty response from Zabbix Agent at[172.16.1.51]. Assuming that agent dropped connection because of access permissions
  19. PAT 1079 延迟的回文数(代码+思路)
  20. 【转载】HTTP/FTP客户端开发库:libwww、libcurl、libfetch

热门文章

  1. Mysql基本知识整理
  2. Nginx配置文件详解与优化建议
  3. docker run命令指定GPU多个显卡不生效的问题解决和代码示例
  4. multipass指定virualbox搭建k8s集群(选择docker作为默认容器)
  5. 批量修改Linux密码脚本(Python)
  6. MongoDB 常见问题 - 解决找不到 mongo、mongod 命令的问题
  7. Linux内核学习之工作队列
  8. DOM对象入门
  9. Spring-图解
  10. python生成时间序列(date_range)