首页
学习
活动
专区
圈层
工具
发布

Python - pydantic 入门介绍与 Models 的简单使用

介绍 使用 python 类型注释来进行数据校验和 settings 管理 pydantic 可以在代码运行时强制执行类型提示,并在数据校验无效时提供友好的错误提示 定义数据应该如何在规范的 python...的数据类型本质上都是一个 BaseModel 类 可以将模型视为强类型语言中的类型(比如 Java) 不受信任的数据可以传递给模型,经过解析和验证后,pydantic 保证生成的模型实例的字段将符合定义的字段类型...') user 是 User 模型的一个实例对象,就叫模型实例对象吧 对象的初始化会执行所有解析和验证,如果没有抛出 ValidationError,证明生成的模型实例是有效的 访问模型实例对象的属性...BaseModels 属性 其实就是 BaseModels 有什么自带的方法、属性 dict() 返回模型字段和值,字典格式 user = User(id='123', name="test") print...(user.dict(), type(user.dict())) # 输出结果 {'id': 123, 'name': 'test'} dict'> json() 返回模型字段和值,

3K30

FastAPI(8)- 请求体 Request Body

前言 接口传参方式之一:通过发送请求体(Request Body)来传递请求数据 在 FastAPI,提倡使用 Pydantic 模型来定义请求体 这篇文章会详细讲不使用 Pydantic 和 使用 Pydantic...typing import Dict from fastapi import FastAPI app = FastAPI() @app.post("/Dict/") # 键为 str,值为 float...模型(建议使用) 实际栗子 from fastapi import FastAPI from typing import Optional from pydantic import BaseModel...将字段值转换相应的类型(若有需要) 验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息 item 会接收到完整的请求体数据,拥有所有属性及其类型,IDE 也会给予对应的智能提示...({"name": name}) return result FastAPI 识别参数的逻辑 如果参数也在路径中声明,它将解释为路径参数【item_id】 如果参数是单数类型(如int、float

4.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    FastAPI学习-6.POST请求 JSON 格式 body

    前言 post请求接收json格式请求body 创建数据模型 从 pydantic 中导入 BaseModel, 将你的数据模型声明为继承自 BaseModel 的类。...", "price": 45.2, "tax": 3.5 } 由于 description 和 tax 是可选的(它们的默认值为 None),下面的 JSON「object」也将是有效的...由于你已经在函数中将它声明为 Item 类型,你还将获得对于所有属性及其类型的一切编辑器支持(代码补全等)。 为你的模型生成 JSON 模式 定义,你还可以在其他任何对你的项目有意义的地方使用它们。...FastAPI 将识别出与路径参数匹配的函数参数应从路径中获取,而声明为 Pydantic 模型的函数参数应从请求体中获取。...如果参数的类型被声明为一个 Pydantic 模型,它将被解释为请求体。

    12.4K30

    fastapi 请求体 - 多个参数 字段Field 嵌套模型

    混合使用 Path、Query 和请求体参数 2. 多个请求体参数 3. 请求体中的单一值 4. 多个请求体参数和查询参数 5. 嵌入单个请求体参数 6. 字段 7....多个请求体参数和查询参数 由于默认情况下单一值被解释为查询参数,因此你不必显式地添加 Query,你可以仅执行操作:q: str = None 5....字段 可以使用 Pydantic 的 Field 在 Pydantic 模型内部声明校验和元数据 from fastapi import FastAPI, Path, Body from typing...嵌套模型 7.1 List 字段 将一个属性定义为拥有子元素的类型,如 list class Item(BaseModel): name: str price: float = Field...(weights: Dict[int, float]): # key 为 int, value 为浮点 return weights 请记住 JSON 仅支持将 str 作为键

    2.3K20

    pydantic学习与使用-1.pydantic简介与基础入门

    前言 版本文档:v1.9.0 使用 python 类型注释的数据验证和设置管理。 pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。...定义数据应该如何在纯粹的、规范的 python 中;并使用 pydantic 对其进行验证。 pydantic 简介 pydantic 主要是一个解析库,而不是验证库。...验证是达到目的的一种手段:建立一个符合所提供的类型和约束的模型。 换句话说,pydantic 保证输出模型的类型和约束,而不是输入数据。 这听起来像是一个深奥的区别,但事实并非如此。...friends等属性.在pydantic中定义对象的主要方法是通过模型(模型继承自 BaseModel 的类)。...pydantic会将表示unix时间戳(例如1496498400)的 int 类型或表示时间和日期的字符串处理成 datetime 类型。

    3.8K30

    FastAPI从入门到实战(2)——Pydantic模型

    前面了解了一下python的类型提示,这里就接着记录一下Pydantic这个用来执行数据校验的库。而且FastAPI就是基于python的类型提示和Padantic实现的数据验证。...使用Python的类型提示来进行数据校验和settings管理; 可以在代码运行的时候提供类型提示,数据校验失败的时候提供友好的错误提示; 定义数据应该如何在纯规范的Python代码中保存...", 2 ], "msg": "value is not a valid integer", "type": "type_error.integer" } ] 模型类的属性和方法...解析和转换 print(user.dict()) # 转换为字典 print(user.json()) # 转换为json print(user.copy()) # 浅copy print(User.parse_obj...1,5,'dsd']) # 直接给属性赋值 except ValidationError as e: print(e.json()) # 错误json格式化 print("====="*6,'模型类的属性和方法

    2.2K20

    FastAPI(28)- JSON Compatible Encoder 利器之 jsonable_encoder

    jsonable_encoder 在实际应用场景中,可能需要将数据类型(如:Pydantic 模型)转换为与 JSON 兼容的类型(如:字典、列表) 比如:需要将数据存储在数据库中 为此,FastAPI...模型(具有属性的对象),只会接收 dict 使用 jsonable_encoder 将数据转换成 dict 实际代码 #!...app = FastAPI() @app.put("/items/{id}") def update_item(id: str, item: Item): # 1、打印刚传进来的数据和类型...json_compatible_item_data # 4、打印转换后的数据和类型 print(f"encoder_data is {json_compatible_item_data...模型转换为 dict,并将日期时间转换为 str 它将返回一个 Python 标准数据结构(比如:dict),其中的值和子值都可以和 JSON 兼容 访问 /items/123 接口,查看控制台输出

    1.3K20

    python进阶(22)pydantic–数据类型校验

    pydantic安装 pip install pydantic 用法详解 模型 在pydantic中定义对象的主要方法是通过模型(模型是继承自 BaseModel 的类)。...将模型看作严格类型语言中的类型(例如Java),或者看作API中单个端点的需求。 不受信任的数据可以传递给模型,在解析和验证之后,pydantic保证结果模型实例的字段将符合模型上定义的字段类型。...这是一个有两个字段的模型 id是一个整型,必填项 name是一个有默认值的字符串,不是必填项 为什么name字段不需要声明类型 name 的类型是从其默认值推断来的,因此,类型注解不是必需的 有些字段没有指定类型...对象的初始化会执行所有解析和验证,如果没有引发 ValidationError 异常,则表明结果模型实例是有效的。...这里我们传入了的id是一个字符串,但实际打印出来却是整型,是因为pydantic在数据传输时会直接进行数据转换 模型属性 模型有多个属性和方法,我们依次介绍 dict() 返回模型的字段和值的字典

    1.8K30

    FastAPI从入门到实战(6)——请求体与嵌套模型

    return animal.dict() 首先定义一个基本模型,是基于Pydantic的,然后将接口的animal参数声明为Animal类型的参数,接口接收请求体后返回给客户端接收的请求体内容...如果参数的类型被声明为一个 Pydantic 模型,它将被解释为请求体。...请求体中嵌套多个参数 # 创建一个数据模型 # 使用 Pydantic 的 Field 在 Pydantic 模型内部声明校验和元数据。...; 处理和不处理的区别就是请求体中是否会有参数名作为键,描述抽象的话,看下面的对比就好; 使用方法就是将Body的embed参数设为True即可; # 设置过的 { "param": {...# 使用 Pydantic 的 Field 在 Pydantic 模型内部声明校验和元数据。

    99320

    pydantic学习与使用-2.基本模型(BaseModel)使用

    前言 在 pydantic 中定义对象的主要方法是通过模型(模型继承 BaseModel )。 pydantic主要是一个解析库,而不是验证库。...验证是达到目的的一种手段:建立一个符合所提供的类型和约束的模型。 换句话说,pydantic保证输出模型的类型和约束,而不是输入数据。...基本模型使用 User这是一个模型,它有两个字段id,一个是整数,是必需的,name一个是字符串,不是必需的(它有一个默认值) from pydantic import BaseModel class...对象的初始化将执行所有解析和验证,如果没有ValidationError引发,说明生成的模型实例是有效的。...模型具有以下方法和属性: dict() 返回模型字段和值的字典;参看。导出模型 json() 返回一个 JSON 字符串表示dict();参看。

    7.6K30

    FastAPI(19)- Response Model 响应模型

    uvicorn.run(app="16_Header:app", host="127.0.0.1", port=8080, reload=True, debug=True) 上面代码栗子,请求模型和响应模型都是同一个...因为路径函数的返回值并不是固定的,可能是 dict、数据库对象,或其他模型 但是使用响应模型可以对响应数据进行字段限制和序列化 区分请求模型和响应模型的栗子 需求 假设一个注册功能 输入账号、密码、昵称...password,所以最终返回的响应数据也不会包含 password FastAPI 通过 Pydantic 过滤掉所有未在响应模型中声明的数据 正确传参的请求结果 查看 Swagger API 文档...五个字段都有设置值,所有都包含在响应数据中了 即使 description、tax、tags 设置的值和默认值是一样的,FastAPI 仍然能识别出它们是明确设置的值,所以会包含在响应数据中 response_model_include...类型,键类型可以是 int、str,值类型可以是任意类型 DictIntStrAny = Dict[Union[int, str], Any] 官方建议 不推荐使用这两个参数,而推荐使用上面讲到的思想

    1.6K40

    FastAPI(15)- 声明请求示例数据

    前言 FastAPI 可以给 Pydantic Model 或者路径函数声明需要接收的请求示例,而且可以显示在 OpenAPI 文档上 有几种方式,接下来会详细介绍 Pydantic 的 schema_extra...可以使用 Config cass 和 schema_extra 为 Pydantic Model 声明一个示例值 from typing import Optional import uvicorn...Field 是没有 example 参数的,而 **extra 就是关键字参数,表示可以添加其他任意参数,和常见的 **kwargs 是一个作用哦 关键字参数教程 Field 教程 添加额外的参数: example...使用 Body() ,添加 examples 参数 examples 本身是一个 dict,每个键标识一个具体的示例,而键对应的值也是一个 dict 每个示例 dict 可以包含 summary:简短描述...description:可以包含 markdown 文本的长描述 value:显示的示例值 externalValue:替代值,指向示例的 URL(不怎么用) 实际代码 #!

    1.1K30

    软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库,用于数据验证和解析,特别是用于处理 JSON 数据。它的主要目标是使数据验证和解析变得简单、直观和可维护。...: list 在这个示例中,我们定义了一个名为 Person 的模型,它有三个字段:name 和 age以及hobby,分别具有字符串、整数以及列表类型。...Pydantic 将使用这些字段定义来验证输入数据。 使用 Pydantic 模型 一旦定义了 Pydantic 模型,我们就可以使用它来验证和解析数据。...我们可以像访问普通类属性一样访问模型字段的值: data = {"name": "Muller", "age": 30, "hobby": ['football', 'reading', 'running...= person.dict() print(person_dict) 处理验证错误 当验证失败时,Pydantic 提供了详细的错误信息,以便我们处理错误。

    1.2K20

    pydantic接口定义检查(一)

    数据类集成,除了BaseModel,pydantic还提供了一个dataclass装饰器,它创建带有输入数据解析和验证的普通 Python 数据类。...字典类型 set 允许list,tuple,set,frozenset,deque, 或生成器和转换为集合; frozenset 允许list,tuple,set,frozenset,deque, 或生成器和强制转换为冻结集...() 模型字段和值的字典 json() JSON 字符串表示dict() copy() 模型的副本(默认为浅表副本) parse_obj() 使用dict解析数据 parse_raw 将str或bytes...() 允许在没有验证的情况下创建模型 fields_set 初始化模型实例时设置的字段名称集 fields 模型字段的字典 config 模型的配置类 1.2 基本属性验证用法代码案例 先来个比较简单的版本...是字符型,同时设定了一个默认值 定义了一个User模型,继承自BaseModel,有2个字段,id是一个整数并且是必需的,name是一个带有默认值的字符串并且不是必需的 实例化使用: # 情况一:因为定义了

    90410

    FastAPI 学习之路(二十九)使用密码和 Bearer 的简单 OAuth2

    前言 我们之前分享如何获取当前用户,本次我们分享使用密码和Bearer 正文 OAuth2 规定在使用(我们打算用的)「password 流程」时,客户端/用户必须将 username...和 password 字段作为表单数据发送。...我们写一个登录接口,默认返回token和token_type from fastapi import FastAPI, Depends,status,HTTPException from pydantic...# 让我们首先将这些数据放入 Pydantic UserInDB 模型中。 # 永远不要保存明文密码,因此,我们将使用(伪)哈希密码系统。 # 如果密码不匹配,我们将返回同一个错误。...代码中的: UserInDB(**user_dict) 表示: 直接将 user_dict 的键和值作为关键字参数传递,等同于: UserInDB( username

    93340

    【FastAPI】请求体

    如果数据无效,将返回一条清晰易读的错误信息,指出不正确数据的确切位置和内容。 将接收的数据赋值到参数 item 中。...由于你已经在函数中将它声明为 Item 类型,你还将获得对于所有属性及其类型的一切编辑器支持(代码补全等)。...为你的模型生成 JSON 模式 定义,你还可以在其他任何对你的项目有意义的地方使用它们。 这些模式将成为生成的 OpenAPI 模式的一部分,并且被自动化文档 UI 所使用。...请求体 + 路径参数 + 查询参数 同时声明请求体、路径参数和查询参数。 FastAPI 会识别它们中的每一个,并从正确的位置获取数据。...update_item(item_id: int, item: Item, q: Union[str, None] = None): result = {"item_id": item_id, **item.dict

    32610
    领券