首页 > 其他分享 >【8.0】Fastapi响应模型

【8.0】Fastapi响应模型

时间:2023-10-01 15:46:59浏览次数:36  
标签:8.0 定义 Fastapi email 响应 str model password response

【一】自定义响应模型

【1】定义视图函数

from fastapi import APIRouter
from pydantic import BaseModel, EmailStr
from typing import Optional

app04 = APIRouter()


### 响应模型

# 定义基本类
class UserBase(BaseModel):
    # 定义字段 username : 用户名 类型为 str : 字符串
    username: str
    # 定义字段 email : 邮箱 类型为 EmailStr : 自动校验邮箱
    email: EmailStr
    # 定义字段 mobile : 手机号 类型为 str : 字符串
    mobile: str = "10086"
    # 定义字段 full_name : 手机号 类型为 Optional[str] : 可选填参数 ,字符串类型
    full_name: Optional[str] = None


# 定义用户登录类
class UserIn(UserBase):
    # 登陆需要校验密码
    # 定义字段 password : 密码 类型为 str : 字符串
    password: str


# 定义用户响应信息类
class UserOut(UserBase):
    # 返回信息 不需要将用户的密码作为响应数据返回
    ...


# 新建两个用户
users = {
    "user01": {"username": "user01", "password": "123123", "email": "[email protected]"},
    "user02": {"username": "user02", "password": "123456", "email": "[email protected]", "mobile": "110"}
}

# response_model : 默认响应数据模型
# response_model_exclude_unset : 只使用前端传过来的值,而不使用默认值(mobile: str = "10086" ---> 不使用10086 而是使用前端传入的数据/函数中赋值)
@app04.post('/response_model', response_model=UserOut, response_model_exclude_unset=True)
async def response_model(user: UserIn):
    """response_model_exclude_unset=True表示默认值不包含在响应中,仅包含实际给的值,如果实际给的值与默认值相同也会包含在响应中"""
    # password不会被返回
    print(user.password)
    return users["user01"]

【2】发起请求

  • 当我们使用 response_model_exclude_unset=True

image-20230930104133942

  • 当我们使用 response_model_exclude_unset=False

image-20230930104309180

【二】响应模型字段取并集

【1】定义视图

from fastapi import APIRouter
from pydantic import BaseModel, EmailStr
from typing import Optional, Union

app04 = APIRouter()


### 响应模型

# 定义基本类
class UserBase(BaseModel):
    # 定义字段 username : 用户名 类型为 str : 字符串
    username: str
    # 定义字段 email : 邮箱 类型为 EmailStr : 自动校验邮箱
    email: EmailStr
    # 定义字段 mobile : 手机号 类型为 str : 字符串
    mobile: str = "10086"
    # 定义字段 full_name : 手机号 类型为 Optional[str] : 可选填参数 ,字符串类型
    full_name: Optional[str] = None


# 定义用户登录类
class UserIn(UserBase):
    # 登陆需要校验密码
    # 定义字段 password : 密码 类型为 str : 字符串
    password: str


# 定义用户响应信息类
class UserOut(UserBase):
    # 返回信息 不需要将用户的密码作为响应数据返回
    ...


# 新建两个用户
users = {
    "user01": {"username": "user01", "password": "123123", "email": "[email protected]"},
    "user02": {"username": "user02", "password": "123456", "email": "[email protected]", "mobile": "110"}
}

# 响应字段取两个模型类的并集
@app04.post('/response_model/attributes', response_model=Union[UserIn, UserOut])
async def response_model_attributes(user: UserIn):
    return user

【2】发起请求

image-20230930104856524

【三】多个模型类

【1】定义视图

from fastapi import APIRouter
from pydantic import BaseModel, EmailStr
from typing import Optional, Union, List

app04 = APIRouter()


### 响应模型

# 定义基本类
class UserBase(BaseModel):
    # 定义字段 username : 用户名 类型为 str : 字符串
    username: str
    # 定义字段 email : 邮箱 类型为 EmailStr : 自动校验邮箱
    email: EmailStr
    # 定义字段 mobile : 手机号 类型为 str : 字符串
    mobile: str = "10086"
    # 定义字段 full_name : 手机号 类型为 Optional[str] : 可选填参数 ,字符串类型
    full_name: Optional[str] = None


# 定义用户登录类
class UserIn(UserBase):
    # 登陆需要校验密码
    # 定义字段 password : 密码 类型为 str : 字符串
    password: str


# 定义用户响应信息类
class UserOut(UserBase):
    # 返回信息 不需要将用户的密码作为响应数据返回
    ...

# 新建两个用户
users = {
    "user01": {"username": "user01", "password": "123123", "email": "[email protected]"},
    "user02": {"username": "user02", "password": "123456", "email": "[email protected]", "mobile": "110"}
}


# 响应字段取两个模型类的并集
@app04.post(
    '/response_model/attributes',
    # 当 response_model 为 列表类型时,可以使用多个响应模型类
    response_model=List[UserOut]
)
async def response_model_attributes(user: UserIn):
    # 在返回时,需要返回多个用户信息
    return [user, user]

【2】发起请求

image-20230930110600966

【四】包含/排除字段

【1】定义视图

from fastapi import APIRouter
from pydantic import BaseModel, EmailStr
from typing import Optional, Union, List

app04 = APIRouter()


### 响应模型

# 定义基本类
class UserBase(BaseModel):
    # 定义字段 username : 用户名 类型为 str : 字符串
    username: str
    # 定义字段 email : 邮箱 类型为 EmailStr : 自动校验邮箱
    email: EmailStr
    # 定义字段 mobile : 手机号 类型为 str : 字符串
    mobile: str = "10086"
    # 定义字段 full_name : 手机号 类型为 Optional[str] : 可选填参数 ,字符串类型
    full_name: Optional[str] = None


# 定义用户登录类
class UserIn(UserBase):
    # 登陆需要校验密码
    # 定义字段 password : 密码 类型为 str : 字符串
    password: str


# 定义用户响应信息类
class UserOut(UserBase):
    # 返回信息 不需要将用户的密码作为响应数据返回
    ...

# 新建两个用户
users = {
    "user01": {"username": "user01", "password": "123123", "email": "[email protected]"},
    "user02": {"username": "user02", "password": "123456", "email": "[email protected]", "mobile": "110"}
}

# 响应字段取两个模型类的并集
@app04.post(
    '/response_model/attributes',
    # 只使用固定的响应模型类
    response_model=UserOut,
    # 返回的相应数据中 必须包含的字段
    response_model_include=["username", "email"],
    # 返回的响应数据中必须排除的字段
    response_model_exclude=["mobile"]
)
async def response_model_attributes(user: UserIn):
    return user

【2】发起请求

image-20230930110352073

【五】响应状态码

【1】定义视图

from fastapi import APIRouter, status
from pydantic import BaseModel, EmailStr
from typing import Optional, Union, List

app04 = APIRouter()

#### 响应状态码
@app04.post('/status_code', status_code=status.HTTP_200_OK)
async def status_attribute():
    return {"status_code": 200, "status_type": str(type(status.HTTP_200_OK))}

【2】发起请求

image-20230930111146363

标签:8.0,定义,Fastapi,email,响应,str,model,password,response
From: https://www.cnblogs.com/dream-ze/p/17738894.html

相关文章

  • 【6.0】Fastapi请求体参数及混合参数
    【一】说明项目接上小结【二】请求体和字段fromfastapiimportAPIRouter,Path,QueryfrompydanticimportBaseModel,Fieldapp03=APIRouter()##请求体字段classCityInfo(BaseModel):#给name字段添加注解#...:表示必填字段#example:表示......
  • 【13.0】Fastapi中的Jinja2模板渲染前端页面
    【一】创建Jinja2引擎#必须模块fromfastapiimportRequest#必须模块fromfastapi.templatingimportJinja2Templates#创建子路由application=APIRouter()#创建前端页面配置templates=Jinja2Templates(directory='./coronavirus/templates')#初始化数据库......
  • 【12.0】Fastapi中的数据库SQLAlchemy ORM 操作
    【一】大型项目结构树coronavirus ├─static #静态文件 ├─templates #前端页面 ├─__init__.py #初始化文件 ├─database.py #数据库操作 ├─models.py #数据库表模型类 ├─schemas.py #响应体模型类 ├─curd.py #视图函数 └─main.py #......
  • 【11.0】Fastapi的OAuth2.0的授权模式
    【一】OAuth2.0的授权模式授权码授权模式(AuthorizationCodeGrant)隐式授权模式(ImplicitGrant)密码授权模式(ResourceOwnerPasswordCredentialsGrant)客户端凭证授权模式(ClientCredentialsGrant)【二】密码授权模式【1】FastAPI的OAuth2PasswordBearer说明......
  • FastAPI学习-26 并发 async / await
    前言有关路径操作函数的asyncdef语法以及异步代码、并发和并行的一些背景知识async和await关键字如果你正在使用第三方库,它们会告诉你使用await关键字来调用它们,就像这样:results=awaitsome_library()然后,通过asyncdef声明你的路径操作函数:@app.get('/')asy......
  • 【Nginx23】Nginx学习:响应头与Map变量操作
    Nginx学习:响应头与Map变量操作响应头是非常重要的内容,浏览器或者客户端有很多东西可能都是根据响应头来进行判断操作的,比如说最典型的Content-Type,之前我们也演示过,直接设置一个空的types然后指定默认的数据类型的值,所有的请求浏览器都会直接下载。另外,我们现在在做前后分离的......
  • Ubuntu22.04 使用pyppeteer启动浏览器无响应
    问题使用示例代码启动浏览器无响应。解决添加启动参数options={'args':['--no-sandbox']}......
  • vue处理响应式的思路
    首先看如下js代码leta='张三'console.log(a)//当前页面展示的是张三a='李四'首先页面刚开始渲染的时候数据a为张三,之后将a修改为了李四以后页面不会发生改变,但是数据已经修改了,vue为了解决这一问题,采用响应式的办法。通过对象的defineProperty方法,在回调函数中监听;......
  • 7、Windows应急响应
    Windows应急响应一、概述近年来,随着互联网的发展网络安全攻击事件也是大幅度增多,如何在第一时间发现攻击事件,并实施应急处置,能够有效的将损失降到最低。在实施应急响应的过程中,需要从多方面进行联动工作,具体的流程和依据可以参考《GB∕T38645-2020信息安全技术网络安全事件应......
  • 请求和响应
    第1关:通过response对象刷新网页任务描述本关任务:编写一个网页定时刷新并跳转的功能。相关知识为了完成本关任务,你需要掌握HttpServletResponse对象的常用方法和应用。编程要求在右侧编辑器Begin-End之间补充代码,编写一个模拟用户登录成功2秒后跳转至百度首页的......