Python Pydantic示例
Pydantic 是一個基於類型註解的Python 庫,用於數據驗證和模型定義。 1. 可通過繼承BaseModel 定義模型,字段支持類型檢查與默認值;2. 自動驗證數據類型,錯誤時拋出ValidationError;3. 使用@validator 裝飾器實現自定義驗證邏輯,如範圍檢查、格式校驗;4. 支持從字典、JSON 字符串解析數據,使用parse_obj 或parse_raw 方法;5. 可嵌套模型處理複雜結構,如列表中的對象;6. 推薦使用model_dump() 和model_dump_json() 輸出數據,支持Config 配置如extra="ignore" 忽略多餘字段,廣泛用於FastAPI 等場景,使數據處理安全且簡潔。
Pydantic 是一個非常流行的Python 庫,用於數據解析、驗證和類型提示。它基於Python 的類型註解(type hints),可以自動驗證數據結構,非常適合處理API 請求、配置文件、數據模型等場景。

下面是一個實用的Pydantic 示例,展示如何定義模型、進行數據驗證、處理錯誤以及一些常用功能。
✅ 基本模型定義與數據驗證
from pydantic import BaseModel, ValidationError from typing import Optional class User(BaseModel): name: str age: int email: str is_active: bool = True # 默認值nickname: Optional[str] = None # 可選字段# 正常數據try: user = User( name="Alice", age=30, email="alice@example.com", nickname="Al" ) print(user) # 輸出: name='Alice' age=30 email='alice@example.com' is_active=True nickname='Al' except ValidationError as e: print(e)
⚠️ 數據驗證失敗示例
# 錯誤數據:age 是字符串,不符合int 類型try: user = User( name="Bob", age="not_a_number", # 錯誤類型email="bob@example.com" ) except ValidationError as e: print(e) # 輸出詳細錯誤信息,比如: # 1 validation error for User # age # value is not a valid integer (type=type_error.integer)
?️ 自定義驗證邏輯(使用@validator
)
from pydantic import validator import re class User(BaseModel): name: str age: int email: str website: Optional[str] = None @validator('age') def check_age(cls, v): if v < 0 or v > 150: raise ValueError('Age must be between 0 and 150') return v @validator('email') def validate_email(cls, v): if not re.match(r'^[^@] @[^@] \.[^@] $', v): raise ValueError('Invalid email format') return v @validator('website', pre=True) # pre=True 表示在類型轉換前處理def validate_website(cls, v): if v and not v.startswith(('http://', 'https://')): v = 'https://' v return v # 測試try: user = User( name="Charlie", age=25, email="charlie@example.com", website="example.com" ) print(user.website) # 輸出: https://example.com except ValidationError as e: print(e)
? 從JSON 或字典加載數據
data = { "name": "Diana", "age": 28, "email": "diana@example.com" } user = User(**data) print(user.json(indent=2)) # 輸出格式化JSON
或者使用.parse_obj()
:

user = User.parse_obj(data)
也可以從JSON 字符串解析:
import json json_str = '{"name": "Eve", "age": 35, "email": "eve@example.com"}' user = User.parse_raw(json_str)
? 模型嵌套(複雜結構)
from typing import List class Address(BaseModel): city: str zipcode: str class Person(BaseModel): name: str addresses: List[Address] # 使用示例data = { "name": "Frank", "addresses": [ {"city": "Beijing", "zipcode": "100001"}, {"city": "Shanghai", "zipcode": "200001"} ] } person = Person(**data) print(person.json(indent=2))
? 小貼士
- 使用
model_dump()
替代舊版的dict()
(Pydantic v2 推薦) - 使用
model_dump_json()
輸出JSON 字符串 - 支持默認工廠(
default_factory
) - 可設置
Config
控制行為,比如忽略未知字段:
class User(BaseModel): name: str class Config: extra = "ignore" # 忽略多餘字段
基本上就這些。 Pydantic 讓數據驗證變得簡單、清晰,尤其在FastAPI 中被廣泛使用。不復雜,但非常實用。

以上是Python Pydantic示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

處理API認證的關鍵在於理解並正確使用認證方式。 1.APIKey是最簡單的認證方式,通常放在請求頭或URL參數中;2.BasicAuth使用用戶名和密碼進行Base64編碼傳輸,適合內部系統;3.OAuth2需先通過client_id和client_secret獲取Token,再在請求頭中帶上BearerToken;4.為應對Token過期,可封裝Token管理類自動刷新Token;總之,根據文檔選擇合適方式,並安全存儲密鑰信息是關鍵。

在Python中,函數內部定義的變量是局部變量,僅在函數內有效;外部定義的是全局變量,可在任何地方讀取。 1.局部變量隨函數執行結束被銷毀;2.函數可訪問全局變量但不能直接修改,需用global關鍵字;3.嵌套函數中若要修改外層函數變量,需使用nonlocal關鍵字;4.同名變量在不同作用域互不影響;5.修改全局變量時必須聲明global,否則會引發UnboundLocalError錯誤。理解這些規則有助於避免bug並寫出更可靠的函數。

要使用Python創建現代高效的API,推薦使用FastAPI;其基於標準Python類型提示,可自動生成文檔,性能優越。安裝FastAPI和ASGI服務器uvicorn後,即可編寫接口代碼。通過定義路由、編寫處理函數並返回數據,可以快速構建API。 FastAPI支持多種HTTP方法,並提供自動生成的SwaggerUI和ReDoc文檔系統。 URL參數可通過路徑定義捕獲,查詢參數則通過函數參數設置默認值實現。合理使用Pydantic模型有助於提升開發效率和準確性。

要測試API需使用Python的Requests庫,步驟為安裝庫、發送請求、驗證響應、設置超時與重試。首先通過pipinstallrequests安裝庫;接著用requests.get()或requests.post()等方法發送GET或POST請求;然後檢查response.status_code和response.json()確保返回結果符合預期;最後可添加timeout參數設置超時時間,並結合retrying庫實現自動重試以增強穩定性。

如何在Python中高效處理大型JSON文件? 1.使用ijson庫流式處理,通過逐項解析避免內存溢出;2.若為JSONLines格式,可逐行讀取並用json.loads()處理;3.或先將大文件拆分為小塊再分別處理。這些方法有效解決內存限制問題,適用於不同場景。

在Python中,用for循環遍曆元組的方法包括直接迭代元素、同時獲取索引和元素、以及處理嵌套元組。 1.直接使用for循環可依次訪問每個元素,無需管理索引;2.使用enumerate()可同時獲取索引和值,默認索引起始為0,也可指定start參數;3.對嵌套元組可在循環中解包,但需確保子元組結構一致,否則會引發解包錯誤;此外,元組不可變,循環中不能修改內容,可用\_忽略不需要的值,且建議遍歷前檢查元組是否為空以避免錯誤。

Yes,aPythonclasscanhavemultipleconstructorsthroughalternativetechniques.1.Usedefaultargumentsinthe__init__methodtoallowflexibleinitializationwithvaryingnumbersofparameters.2.Defineclassmethodsasalternativeconstructorsforclearerandscalableobjectcreati

在Python中,使用for循環配合range()函數是控制循環次數的常見方式。 1.當明確知道循環次數或需按索引訪問元素時使用;2.range(stop)從0到stop-1,range(start,stop)從start到stop-1,range(start,stop,step)加入步長;3.注意range不包含結束值,且在Python3返回可迭代對象而非列表;4.可通過list(range())轉換為列表,倒序時用負步長。
