首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

返回带有字段名而不是别名的pydantic model作为fastapi响应

在FastAPI中,可以使用Pydantic模型作为响应的返回类型。Pydantic是一个用于数据验证和序列化的Python库,它提供了一种简单而强大的方式来定义数据模型。

当使用Pydantic模型作为FastAPI的响应类型时,可以选择返回带有字段名而不是别名的模型。为了实现这一点,可以在Pydantic模型的Config类中设置alias_generatorNone,并将allow_population_by_field_name设置为True。这样做可以确保返回的模型中的字段名与定义的字段名一致。

下面是一个示例:

代码语言:txt
复制
from fastapi import FastAPI
from pydantic import BaseModel, Field

class Item(BaseModel):
    name: str = Field(..., alias="item_name")

    class Config:
        allow_population_by_field_name = True
        alias_generator = None

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int):
    item = Item(name="Foo")
    return item

在上面的示例中,Item模型定义了一个名为name的字段,并使用Field函数设置了别名为item_name。通过设置Config类的属性,我们确保返回的模型中的字段名为name而不是别名item_name

关于FastAPI和Pydantic的更多信息,可以参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

fastapi 响应模型 响应状态码 表单参数

表单参数 learn from https://fastapi.tiangolo.com/zh/tutorial/response-model/ 1. response_model 响应模型 不是 路径参数...208) async def read_item(item_id: str): return items[item_id] 关于 HTTP 状态码 在 HTTP 协议中,你将发送 3 位数的数字状态码作为响应的一部分...100 及以上状态码用于「消息」响应。你很少直接使用它们。具有这些状态代码的响应不能带有响应体。 200 及以上状态码用于「成功」响应。这些是你最常使用的。...一个特殊的例子是 204,「无内容」。此响应在没有内容返回给客户端时使用,因此该响应不能包含响应体。 300 及以上状态码用于「重定向」。...表单参数 接收的不是 JSON,而是表单字段时,要使用 Form from fastapi import FastAPI, Form app = FastAPI() @app.post("/login

89730
  • FastAPI(27)- Handling Errors 处理错误

    前言 许多情况下,需要向客户端返回一些特定的错误,比如 客户端没有足够的权限进行该操作 客户端无权访问该资源 客户端尝试访问的项目不存在 HTTPException 介绍 要将带有错误的 HTTP 响应...,应该 raise 它,而不是 return 它 查看一下 HTTPException 源码 status_code:响应状态吗 detail:报错信息 headers:响应头 简单的栗子 当 item_id...重写默认异常处理程序 FastAPI 有一些默认的异常处理程序 比如:当引发 HTTPException 并且请求包含无效数据时,异常处理程序负责返回默认的 JSON 响应 可以使用自己的异常处理程序覆盖...body 属性 RequestValidationError 包含它收到的带有无效数据的正文,可以在开发应用程序时使用它来记录主体并调试它,将其返回给用户 数据验证失败的请求结果 看一眼 RequestValidationError...的子类 当使用了 response_model,如果响应数据校验失败,就会抛出 ValidationError 客户端并不会直接收到 ValidationError,而是会收到 500,并报 Internal

    1.1K10

    FastAPI(19)- Response Model 响应模型

    前言 前面文章写的这么多路径函数最终 return 的都是自定义结构的字典 FastAPI 提供了 response_model 参数,声明 return 响应体的模型 什么是路径操作、路径函数 # 路径操作...Pydantic Model FastAPI 通过 response_model 会做 将输出数据转换为 Model 中声明的类型 验证数据 在 OpenAPI 给 Response 添加 JSON...因为路径函数的返回值并不是固定的,可能是 dict、数据库对象,或其他模型 但是使用响应模型可以对响应数据进行字段限制和序列化 区分请求模型和响应模型的栗子 需求 假设一个注册功能 输入账号、密码、昵称...、邮箱,注册成功后返回个人信息 正常情况下不应该返回密码,所以请求体和响应体肯定是不一样的 实际代码 from typing import Optional from fastapi import FastAPI...password FastAPI 通过 Pydantic 过滤掉所有未在响应模型中声明的数据 正确传参的请求结果 查看 Swagger API 文档 来看看路径操作有什么关于响应模型的参数 response_model_exclude_unset

    1.3K40

    FastAPI(21)- 多个模型的代码演进

    需求 注册功能 请求输入密码 响应不需要输出密码 数据库存储加密后的密码 实际代码 #!...import FastAPI from typing import Optional from pydantic import BaseModel, EmailStr app = FastAPI()...因为代码重复增加了错误、安全问题、代码同步问题(当在一个地方更新而不是在其他地方更新时)等的可能性 上面代码存在的问题 三个模型都共享大量数据 利用 Python 继承的思想进行改造 声明一个 UserBase...模型,作为其他模型的基础 然后创建该模型的子类来继承其属性(类型声明、验证等),所有数据转换、验证、文档等仍然能正常使用 这样,不同模型之间的差异(使用明文密码、使用哈希密码、不使用密码)也很容易识别出来...import FastAPI from typing import Optional from pydantic import BaseModel, EmailStr app = FastAPI()

    53530

    FastAPI后台开发基础(10): 响应控制

    )序列化 JSON 响应 文档自动生成:Swagger UI 和 Redoc 文档会自动显示正确的响应模型,包括字段描述和别名 请求:curl -X 'POST' 'http://127.0.0.1...=True,那么无论路由级别的设置如何,这个字段都不会被包括在任何响应中 FastAPI 的 response_model_include 和 response_model_exclude: 这些设置在路由级别...) Response 对象将优先,这是因为 Response 对象被视为最终响应,FastAPI 不会对其内容进行进一步的处理或修改 这种方法特别适用于以下场景: 自定义响应:当你需要完全控制返回的...和直接返回 Response 对象(如 JSONResponse) Response 对象将优先,这是因为 Response 对象被视为最终响应,FastAPI 不会对其内容进行进一步的处理或修改...高度灵活:可以根据函数逻辑返回不同类型的响应,如重定向或 JSON 响应 明确控制:直接控制响应的具体类型和内容,适用于需要根据不同条件返回不同响应类型的场景 文档生成:自动生成的

    15243

    FastAPI(46)- JSONResponse

    背景 创建 FastAPI 路径操作函数时,通常可以从中返回任何数据:字典、列表、Pydantic 模型、数据库模型等 默认情况下,FastAPI 会使用 jsonable_encoder 自动将该返回值转换为...将使用 JSONResponse 返回响应 但是可以直接从路径操作函数中返回自定义的 JSONResponse 返回响应数据的常见方式(基础版) https://www.cnblogs.com/poloyy.../p/15364635.html 最简单的栗子 路径操作函数返回一个 Pydantic Model #!...Model 类 但最终返回给客户端的是一个 JSON 数据 等价写法 @app.post("/item") async def get_item(item: Item): return item...__name__} ' TypeError: Object of type Item is not JSON serializable 类型错误:项目类型的对象不是 JSON 可序列化的 因为它无法转换为

    1.3K10

    FastAPI 学习之路(十四)响应模型

    这次我们来看下响应模型。我们之前看的都是请求模型,请求参数,这次呢,我们看下响应相关的。 正文 我们可以在我们不同的请求路径的返回参数使用响应模型。我们看一个简单的demo。...=One) def create_item(item: One): return item 我们可以看下,接口的正常返回 response_model是「装饰器」方法(get...它接收的类型与你将为 Pydantic 模型属性所声明的类型相同,因此它可以是一个 Pydantic 模型,但也可以是一个由 Pydantic 模型组成的 list,例如 List[Item]。...FastAPI 将使用此 response_model 来: 将输出数据转换为其声明的类型。 校验数据。 在 OpenAPI 的路径操作中为响应添加一个 JSON Schema。...我们在接口的请求中,如果不传递,我不想要返回带默认值的, 我们看下代码如何实现的 from typing import Optional from fastapi

    1K30

    全面拥抱 FastApi — 响应模型

    ,使用response_model 参数指明该路径的响应模型 其具有以下特点: 转换为类型声明的输出数据 响应数据的校验 在 OpenAPI 路径操作中,为响应添加 JSON Schema 生成 API...而且,response_model 接收的类型与声明 Pydantic 模型属性的类型,语法完全相同 使用响应模型 先来看下简单的用法,定义一个响应模型 User from pydantic import...response_model_include 如果只有一个 Pydantic 模型, 但是在不同的接口中,因为某些需求不同,返回的 body 又不一样。...[name_id] 可以看到, response_model_exclude_unset 参数为 True 的时候,未修改的默认参数不会返回 反之,给默认值字段赋予了新的内容,则新的值会包含在返回的响应中...[name_id] 返回结果如下: 虽然 FastAPI 能够识别出 description、tax 和 tags 的值与默认值相同,这些值也会显式设置(而不是取自默认值)

    90030

    FastAPI(8)- 请求体 Request Body

    ,而且 Swagger API 并不会显示 GET 请求的请求体 不使用 Pydantic的栗子 from fastapi import FastAPI import uvicorn app = FastAPI...JSON 字符串转换为 dict 这种场景下,虽然查询参数叫 item,但请求体的字段名可以随意取,字段数量也可以任意个 错误传参的请求结果 选了 text 之后,因为不是 JSON 字符串,FastAPI...JSON 字符串 将字段值转换相应的类型(若有需要) 验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息 item 会接收到完整的请求体数据,拥有所有属性及其类型,IDE 也会给予对应的智能提示...查看 Swagger API 文档 Schema 部分 model 的 JSON Schema 会成为 Swagger APi 文档的一部分 示例值部分 IDE 智能提示 因为知道 name 属性的类型是...可以识别出它们中的每一个,并从正确的位置获取到数据 实际代码 from typing import Optional from fastapi import FastAPI from pydantic

    4.1K20

    fastapi 用户指南(路径参数、查询参数、请求体)

    @my_app.get("/") 告诉 FastAPI 在它下方的函数负责处理如下访问请求: 请求路径为 / 使用 get 操作 函数可以返回一个 dict、list,像 str、int 一样的单个值,...还可以返回 Pydantic 模型 1.1 小结 导入 FastAPI 创建一个 app 实例 编写一个路径操作装饰器(如 @app.get("/")) 编写一个路径操作函数(如上面的 def root...your_enum_member.value 来获取实际的值 2.3 包含路径的路径参数 参数 { } 内 参数名:path :前后均没有空格,不加 :path 无法识别 带有/ 的路径参数...请求体 请求体是客户端发送给 API 的数据 响应体是 API 发送给客户端的数据 使用 Pydantic 模型来声明请求体 from typing import Optional from Pinyin2Hanzi...import Item from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): name

    1.8K30

    使用FastAPI重写Django官网Polls教程

    {"item":"apple","q":"delicious"} 这太好了,我们已经创建了API有两个终点: http://127.0.0.1:8000/不接收任何参数,它只是返回一个JSON响应。...好的,到目前为止还不错,我们现在将使用pydantic库来创建数据接口schema,它的主要作用是做类型强制检查,有点类似DRF的序列化器。...,并且将类型作为参数传递为此类=Column question_text = Column(String) 而Pydantic风格声明使用: 和小写的str。...question_text: str Pyndatic 模型/模组将映射到传入数据(POST、PUT 中的请求数据)和从 API 返回的响应数据。...= Depends(get_db)): return crud.get_all_questions(db=db) 注意在,返回对象列表,而不仅仅是一个对象,所以我们应该让我们的框架知道。

    1.5K20

    FastAPI 学习之路(二十一)请求体 - 更新数据

    FastAPI 学习之路(十一) FastAPI 学习之路(十二)额外数据类型 FastAPI 学习之路(十三)Cookie 参数,Header参数 FastAPI 学习之路(十四)响应模型...FastAPI 学习之路(十五)响应状态码 FastAPI 学习之路(十六)Form表单 FastAPI 学习之路(十七)上传文件 FastAPI 学习之路(十八)表单与文件 FastAPI 学习之路...PUT 也可以使用PATCH; 提取存储的数据; 把数据放入 Pydantic 模型; 生成不含输入模型默认值的 dict (使用 exclude_unset 参数); 只更新用户设置过的值,不用模型中的默认值覆盖已存储过的值...这种方式与 Pydantic 模型的 .dict() 方法类似,但能确保把值转换为适配 JSON 的数据类型,例如, 把 datetime 转换为 str 。...把数据保存至数据库; 返回更新后的模型。 后记 发现问题,解决问题。遇到问题,慢慢解决问题即可。

    90850

    FastAPI(14)- 路径操作函数参数的类型是一个嵌套 Pydantic Model 的使用场景

    带有类型参数的字段 Python 有一种特定的方法来声明具有内部类型或类型参数的列表 其实前面都见过,就是 List[str] Set[str] Tuple[str] Dict[str, int] List...Pydantic Model 中使用 typing 提供的类型 from typing import List, Optional, Set, Dict, Tuple from pydantic import...: "string", "name": "string" } ] } 重点 tags 虽然声明为 Set(),但在接口层面并没有集合这个概念,所以还是传数组 [ ] 格式哦,并不是传...集合的特性仍然会保留:去重 FastAPI 给嵌套模型提供的功能 和前面讲的没什么区别 IDE 智能代码提示,甚至对于嵌套模型也支持 数据转换 数据验证 OpenAPI 文档 正确传参的请求结果 校验失败的请求结果...from pydantic import BaseModel app = FastAPI() # 模型一 class Image(BaseModel): url: str name

    73920
    领券