python中的 Pydantic 框架介紹

?Pydantic 框架介紹

Pydantic 是一個用于數據驗證和設置管理的 Python 庫。它主要通過數據模型類的定義來處理 JSON 數據、解析請求和響應數據,并提供自動化的驗證和轉換。Pydantic 主要用于處理 Python 類型的安全性和驗證,尤其在 FastAPI 等現代 Python Web 框架中得到廣泛應用。

Pydantic 提供了一個強大的功能,允許你定義模型并自動進行類型檢查、數據驗證和錯誤處理。它的設計理念是 數據校驗與數據結構化,使得開發者能夠輕松實現 API 輸入數據的驗證,同時提高代碼的可維護性和可讀性。

?Pydantic 的核心特性

1. 基于 Python 類型提示(Type Hints)
? ?- Pydantic 使用 Python 類型提示來定義數據模型。你可以直接通過 Python 的類型注解(如 str, int, float, List[Type] 等)來指定字段的類型。
? ?- 類型提示會自動與輸入數據進行匹配,并進行轉換和驗證。

2. 數據驗證
? ?- Pydantic 會自動驗證輸入的數據類型是否與模型中定義的類型匹配。例如,str 類型的字段如果傳入了非字符串的數據,Pydantic 會拋出驗證錯誤。
? ?- 還支持更復雜的驗證,如字符串長度、數字范圍等。

3. 自動轉換
? ?- Pydantic 支持自動類型轉換,例如,如果你傳入一個字符串 "123" 給 int 類型字段,它會自動將字符串轉換為整數 123。

4. 支持嵌套模型
? ?- Pydantic 允許你定義嵌套模型。例如,你可以在一個模型中引用另一個模型作為字段,這樣可以方便地進行復雜的數據結構化。

5. 支持數據導出
? ?- Pydantic 模型不僅支持數據驗證,還支持模型的序列化與反序列化,自動將模型轉為字典格式或者 JSON 格式,這對于 Web 開發尤其重要。

6. 性能優越
? ?- Pydantic 是基于 Python 的 dataclasses 和 typing 庫構建的,它的性能非常優越,能夠高效處理數據驗證工作。

7. 錯誤處理
? ?- 當數據驗證失敗時,Pydantic 會提供詳細的錯誤信息,幫助開發者定位問題,錯誤信息通常包括字段名、錯誤類型以及錯誤描述。

?示例

以下是一個使用 Pydantic 定義簡單數據模型的示例:

python
from pydantic import BaseModel, Field
from typing import Optional

?定義 Pydantic 模型
class User(BaseModel):
? ? username: str
? ? email: str
? ? age: Optional[int] = Field(None, ge=18) ? 可選字段,且年齡必須大于等于18

?創建模型實例
user_data = {
? ? "username": "alice",
? ? "email": "alice@example.com",
? ? "age": 25
}

?校驗數據并創建模型實例
user = User(user_data)

?訪問模型字段
print(user.username) ? 輸出: alice
print(user.dict()) ? 輸出: {'username': 'alice', 'email': 'alice@example.com', 'age': 25}


?關鍵組件

1. BaseModel
? ?- BaseModel 是 Pydantic 中所有模型的基類。通過繼承 BaseModel,你可以創建自定義的 Pydantic 數據模型。
? ?
2. Field
? ?- Field 是用來定義字段的額外參數的。你可以通過它設置字段的默認值、描述、驗證規則等。Field 是一個非常有用的工具,可以用來實現如最小/最大值、長度限制、正則表達式驗證等功能。

3. Optional
? ?- Optional 是一個類型提示,用于指定一個字段可以是 None,也可以是某種類型。這使得該字段成為可選項。

4. 模型的序列化與反序列化
? ?- model.dict() 可以將模型實例轉化為 Python 字典,方便進行 JSON 序列化。
? ?- model.json() 可以將模型轉化為 JSON 字符串。

?使用場景

1. Web 開發:
? ?- Pydantic 與 FastAPI 配合使用,在 API 的請求體(如 JSON 數據)和響應體中進行自動驗證、轉換和文檔生成。
? ?
2. 數據處理:
? ?- 用于處理外部 API 返回的數據,確保數據符合預期格式,并進行必要的轉換。

3. 配置文件:
? ?- Pydantic 也可以用于配置文件的讀取與校驗,例如從 .env 文件讀取配置并驗證其格式。

?示例:FastAPI 使用 Pydantic

FastAPI 是基于 Pydantic 的 Web 框架,Pydantic 的模型被用來驗證請求和響應數據。以下是 FastAPI 中使用 Pydantic 模型的示例:

python
from fastapi import FastAPI
from pydantic import BaseModel

?定義 Pydantic 數據模型
class User(BaseModel):
? ? username: str
? ? email: str
? ? age: int

?創建 FastAPI 實例
app = FastAPI()

?定義 POST 請求路由
@app.post("/create-user/")
async def create_user(user: User):
? ? return {"username": user.username, "email": user.email, "age": user.age}


在這個示例中,User 模型用于驗證來自客戶端的 JSON 請求體數據。如果數據不符合模型定義的要求,FastAPI 會自動返回 422 錯誤和詳細的驗證錯誤信息。

?總結

Pydantic 是一個功能強大的數據驗證和管理工具,能夠簡化 Python 應用中數據的驗證、轉換和序列化過程。它的核心優勢包括:
- 基于 Python 類型提示
- 高效的性能
- 自動驗證和轉換
- 易于與 FastAPI 等 Web 框架集成

通過使用 Pydantic,開發者可以確保數據的有效性,減少手動驗證的工作,并提高代碼的可維護性和可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62258.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

橋接模式和組合模式的區別

橋接模式(Bridge Pattern)和組合模式(Composite Pattern)都是結構型設計模式,旨在解決對象結構的復雜性問題,但它們的應用場景和目的有所不同。以下是它們的區別: 1. 定義與目的 橋接模式&…

Qt 小項目 學生管理信息系統

主要是對數據庫的增刪查改的操作 登錄/注冊界面: 主頁面: 添加信息: 刪除信息: 刪除第一行(支持多行刪除) 需求分析: 用QT實現一個學生管理信息系統,數據庫為MySQL 要求&#xf…

14.數據容器-set集合

特點 無序的,元素不重復,自帶去重功能。 可以容納不同類型的元素數據。 # 定義一個空set my_set {} your_set set() my_set {aa, bb, bb, aa} # {aa, bb} print(my_set) 因為set集合是無序的,所以集合不支持下標索引訪問。所以set集合…

“量子躍遷與數據織網:深入探索K最近鄰算法在高維空間中的優化路徑、神經網絡融合技術及未來機器學習生態系統的構建“

🎼個人主頁:【Y小夜】 😎作者簡介:一位雙非學校的大二學生,編程愛好者, 專注于基礎和實戰分享,歡迎私信咨詢! 🎆入門專欄:🎇【MySQL&#xff0…

硬件選型規則

光源選型: 先用型號中帶H的,沒有的選標準的. 光源和光源控制器的搭配需要確保接口一致。 根據型號表中的最佳工作距離和相機的尺寸。 光源控制器選型: 首先選擇海康風格系列光源控制器考慮與光源的接口匹配。功率應該滿足接近光源功率。檢查是否退市…

【QNX+Android虛擬化方案】135 - QNX側如何Dump 88Q5152 MIBS報文計數

【QNX+Android虛擬化方案】135 - QNX側如何Dump 88Q5152 MIBS報文計數 一、讀取 88Q5152 MIBS 計數二、讀取 88Q5152 WDT 相關寄存器基于原生純凈代碼,自學總結 純技術分享,不會也不敢涉項目、不泄密、不傳播代碼文檔!!! 本文禁止轉載分享 !!! 匯總鏈接:《【QNX+Andro…

C#核心(15)繼承中的構造函數

前言 我們之前學過構造函數是什么東西,今天的內容也和構造函數緊密相關,一個繼承了父親的子類里面構造函數的規則是什么樣的,今天內容很簡單,請聽我慢慢講來。 基本概念 特點:當申明一個子類時,先執行父…

TVbox源貢獻指南

歡迎各路大佬踴躍提PR,分享爬蟲代碼。 源碼倉庫地址 https://github.com/lushunming/AndroidCatVodSpider 快速開始 本工程是一個完整的AndroidStudio工程,請你用AS打開編輯。 工程調試完畢后要需要導出生成jar文件配合軟件使用,執行根目…

FastAPI快速入門

文章目錄 了解FastAPI程序結構第一步,導入FastAPI第二步,創建一個app實例第三步,編寫一個 路徑操作裝飾器第五步、運行開發服務器uvicorn main:app --reload即可訪問api鏈接。符案例 聲明路徑參數聲明路徑參數的類型get請求查詢參數請求體如何…

云計算.運維.面試題

1、計算機能直接識別的語言( C )。 A、匯編語言 B、自然語言 C、機器語言 D、高級語言 2、應用軟件是指( D )。 A、所有能夠使用的軟件 B、能被各應用單位共同使用的某種軟件 C、所有計算機上都應使用的基本軟件D、專門為某一應用目的而編制的軟件 3、計算機的顯示器是一…

如何優雅地實現單例模式?內部靜態類還是雙重檢查鎖定?

在最近的一個項目中,我需要為一個核心配置類實現單例模式。在設計過程中,我發現要同時滿足延遲加載和線程安全這兩個要求,常見的實現方式有兩種:內部靜態類和雙重檢查鎖定(Double-Checked Locking, DCL)。 …

【計算機網絡】 —— 數據鏈路層(壹)

文章目錄 前言 一、概述 1. 基本概念 2. 數據鏈路層的三個主要問題 二、封裝成幀 1. 概念 2. 幀頭、幀尾的作用 3. 透明傳輸 4. 提高效率 三、差錯檢測 1. 概念 2. 奇偶校驗 3. 循環冗余校驗CRC 1. 步驟 2. 生成多項式 3. 例題 4. 總結 四、可靠傳輸 1. 基本…

golang實現簡單的redis服務

golang 手搓redis服務器倉庫地址:實現思路: golang 手搓redis服務器 倉庫地址: 倉庫: https://github.com/dengjiayue/my-redis.git 實現思路: ● 協議: tcp通信 ● 數據包: 長度(4byte)方法(1byte)數據json ● 數據處理: 單線程map讀寫 ○ 依次處理待處理隊列的請求(chan)…

智慧銀行反欺詐大數據管控平臺方案(八)

智慧銀行反欺詐大數據管控平臺的核心理念,在于通過整合先進的大數據技術、算法模型和人工智能技術,構建一個全面、智能、動態的反欺詐管理框架,以實現對金融交易的全方位監控、欺詐行為的精準識別和高效處理。這一理念強調數據驅動決策&#…

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼 文章目錄 0 論文工作1 論文方法2 實驗結果 0 論文工作 人類利用自然語言描述物理世界,根據各種特性(視覺外觀、語義、抽象關聯)尋找具體的3D位置。在這項工作中,作者提出了語言嵌…

如何選擇合適的期刊投稿?從課題組經驗到在線工具的使用全解析

~~~本文是作者個人的經驗分享,建立在導師讓自己選刊的情況下~~~ 投稿選刊是科研過程中至關重要的一步,選刊過程可能讓許多初投稿的研究者感到迷茫和困惑:期刊那么多,如何找到最合適的? 本文將從多個角度介紹如何選擇投…

024、Docker與SSH在分布式系統中的實踐指南

1. Docker SSH配置最佳實踐 Docker容器通常不需要SSH服務來運行,因為它們設計為輕量級、無狀態的,并且通常通過Docker命令行界面與宿主機進行交互。但是,在某些情況下,您可能需要通過SSH訪問Docker容器進行調試、維護或其他操作。…

【kafka】消息隊列的認識,Kafka與RabbitMQ的簡單對比

什么是消息隊列? 消息隊列(Message Queue,簡稱 MQ)是一個在不同應用程序、系統或服務之間傳遞數據的機制。 它允許系統間異步地交換信息,而無需直接交互,確保消息的可靠傳輸。 想象一下,你正在…

.NET MAUI與.NET for Android/IOS的關系

2024年11月13日微軟發布了.Net9.0,我打算體驗一下。安裝好.Net9.0 SDK后發現Visual Studio識別不到9.0,但是通過命令行dotnet --info查看是正常的,后面看到了VS有版本可以升級,把VS升級到17.12.0就可以了。更新完打開以后看到如下界面 這里…

SqlDataAdapter

SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一個數據適配器類,屬于 System.Data.SqlClient 命名空間(或在 .NET 6 中屬于 Microsoft.Data.SqlClient 命名空間)。它的作用是充當數據源(如 SQL Server 數據庫&#xff…