亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 後端開發(fā) Python教學(xué) Pydantic:手動驗(yàn)證的終點(diǎn)! ?

Pydantic:手動驗(yàn)證的終點(diǎn)! ?

Nov 26, 2024 am 12:07 AM

Pydantic 是一個(gè) Python 資料驗(yàn)證和設(shè)定管理庫。它使用 Python 類型提示來驗(yàn)證和解析數(shù)據(jù),確保您的程式碼能夠處理正確結(jié)構(gòu)化和類型化的數(shù)據(jù)。透過利用 Python 的類似資料類別的模型結(jié)構(gòu),Pydantic 可以輕鬆定義複雜資料的模式,並以乾淨(jìng)的 Python 方式自動驗(yàn)證和序列化/反序列化資料。讓我們來探討一下主要功能:

數(shù)據(jù)驗(yàn)證

使用 Python 的類型提示會根據(jù)模式自動驗(yàn)證輸入資料。

from pydantic import BaseModel, ValidationError

class User(BaseModel):
    id: int
    name: str
    email: str

# Valid input
user = User(id=1, name="John Doe", email="john@example.com")
print(user)

# Invalid input
try:
    user = User(id="not-an-integer", name="Jane", email="jane@example.com")
except ValidationError as err:
    print(err)

每當(dāng)你想定義資料模型時(shí),請使用 pydantic.BaseModel!

功能驗(yàn)證

Pydantic 提供了強(qiáng)大的工具,不僅可以驗(yàn)證資料模型,還可以驗(yàn)證函數(shù)的輸入和輸出。這是使用 @validate_call 裝飾器實(shí)現(xiàn)的,可讓您對函數(shù)參數(shù)和傳回值強(qiáng)制執(zhí)行嚴(yán)格的資料驗(yàn)證。如果提供的參數(shù)或傳回類型與預(yù)期類型不匹配,則會引發(fā) ValidationError。

from pydantic import validate_call

@validate_call
def greet(name: str, age: int) -> str:
    return f"Hello {name}, you are {age} years old."

# Valid input
print(greet("Alice", 30))  # Output: Hello Alice, you are 30 years old.

# Invalid input
try:
    greet("Bob", "not-a-number")
except Exception as e:
    print(e)

透過在 @validate_call 中啟用 validate_return 標(biāo)誌,Pydantic 也會根據(jù)其註解的回傳類型驗(yàn)證函數(shù)的傳回值。這可確保函數(shù)遵循預(yù)期的輸出模式。

from pydantic import validate_call

@validate_call(validate_return=True)
def calculate_square(number: int) -> int:
    return number ** 2  # Correct return type

# Valid input and return
print(calculate_square(4))  # Output: 16

# Invalid return value
@validate_call(validate_return=True)
def broken_square(number: int) -> int:
    return str(number ** 2)  # Incorrect return type

try:
    broken_square(4)
except Exception as e:
    print(e)

解析

Pydantic 可以將複雜的巢狀結(jié)構(gòu)(包括 JSON 資料)解析為模型物件。

from pydantic import BaseModel
from typing import List

class Item(BaseModel):
    name: str
    price: float

class Order(BaseModel):
    items: List[Item]
    total: float

# JSON-like data
data = {
    "items": [
        {"name": "Apple", "price": 1.2},
        {"name": "Banana", "price": 0.8}
    ],
    "total": 2.0
}

order = Order(**data) 
print(order) # items=[Item(name='Apple', price=1.2), Item(name='Banana', price=0.8)] total=2.0

序列化和反序列化

Pydantic 模型可以序列化為 JSON 或字典並重構(gòu)回來。

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    email: str

# Create a model instance
user = User(id=1, name="Alice", email="alice@example.com")

# Serialize to dictionary and JSON
user_dict = user.model_dump()
user_json = user.model_dump(mode='json')

print("Dictionary:", user_dict)
print("JSON:", user_json)

# Deserialize back to the model
new_user = User.model_validate(user_json)
print("Parsed User:", new_user)

靈活的驗(yàn)證

資料驗(yàn)證不是強(qiáng)制型別驗(yàn)證。例如,如果您定義一個(gè)模型,其中 id、due_date 和優(yōu)先權(quán)欄位分別為 int、bool 和 datetime 類型,則可以傳遞:

  • 數(shù)字字串作為id
  • ISO-8601、UTC 或其他日期格式的字串作為 due_date
  • 'yes'/'no'、'on'/'off'、'true'/'false'、1/0 等為優(yōu)先級
from sensei import APIModel
from datetime import datetime


class Task(APIModel):
    id: int
    due_date: datetime
    priority: bool


task = Task(due_date='2024-10-15T15:30:00',>



<p>The result will be<br>
</p>

<pre class="brush:php;toolbar:false">Task(id=1, due_date=datetime.datetime(2024, 10, 15, 15, 30), priority=True)

自訂驗(yàn)證

您也可以使用驗(yàn)證器在模型中定義自訂驗(yàn)證邏輯。它們允許您套用更複雜的驗(yàn)證規(guī)則,這些規(guī)則無法使用內(nèi)建類型或欄位約束輕鬆表達(dá)。驗(yàn)證器是透過 field_validator 裝飾器或 Field 物件定義的。您可以將一個(gè)或多個(gè)欄位名稱傳遞給 field_validator,以確定哪些欄位將使用此驗(yàn)證器,或透過「*」為每個(gè)欄位套用驗(yàn)證器。

輸入 import Any
從 pydantic 匯入 Field、field_validator、EmailStr、BaseModel

使用者類別(基礎(chǔ)模型):
    id:整數(shù)
    使用者名稱:str = Field(pattern=r'^w $')
    電子郵件:EmailStr
    年齡:int = Field(18,ge=14)
    is_active: 布爾 = True
    角色:列表[str]

    # 定義驗(yàn)證器在內(nèi)部解析「之前」執(zhí)行
    @field_validator('角色', mode='之前')
    def _validate_roles(cls,值:任意):
        返回 value.split(',') if isinstance(value, str) else value

user = User(id=1, 使用者名稱='john', email='john@example.com', 角色='學(xué)生,歌手')
列印(使用者)#>



<h2>
  
  
  開源專案
</h2>

<p>有許多由 Pydantic 支援的開源專案。讓我們來探索其中最好的:</p>

<h3>
  
  
  快速API
</h3>

<p>Pydantic 最突出的用例之一是 FastAPI,這是一個(gè)使用 Python 建立 API 的現(xiàn)代 Web 框架。 FastAPI 廣泛使用 Pydantic 模型進(jìn)行請求正文驗(yàn)證、查詢參數(shù)和回應(yīng)模式。 </p>

  • 資料來源:https://github.com/fastapi/fastapi
  • 文件:https://fastapi.tiangolo.com

Pydantic: The end of manual validations! ?

老師

FastAPI 是為建立 API 而設(shè)計(jì)的,而 Sensei 則是為快速、輕鬆地包裝這些 API 而設(shè)計(jì)的。由 Sensei 提供支援的 API 用戶端可確保使用者獲得相關(guān)的資料模型,並且不會出現(xiàn)令人困惑的錯(cuò)誤。

  • 資料來源:https://github.com/CrocoFactory/sensei
  • 文件:https://sensei.crocofactory.dev

Pydantic: The end of manual validations! ?

SQLModel 和 Typer

SQLModelTyper 是 FastAPI 的創(chuàng)建者 Sebastián Ramírez 開發(fā)的兩個(gè)出色的專案。

SQLModel 是一個(gè)旨在簡化 Python 應(yīng)用程式中的資料庫互動的函式庫。 SQLModel 建構(gòu)於 SQLAlchemyPydantic 之上,將 ORM 的強(qiáng)大功能與資料驗(yàn)證和序列化的便利性結(jié)合在一起。

  • 來源:https://github.com/fastapi/sqlmodel
  • 文件:https://sqlmodel.tiangolo.com

Typer 是一個(gè)使用 Python 建立命令列介面 (CLI) 應(yīng)用程式的框架。它透過使用 Python 的類型提示自動產(chǎn)生使用者友好的 CLI 命令和幫助文字來簡化流程。

  • 來源:https://github.com/fastapi/typer
  • 文件:https://typer.tiangolo.com

以上是Pydantic:手動驗(yàn)證的終點(diǎn)! ?的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍?,指“一種接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類型的對象。 1.多態(tài)通過方法重寫實(shí)現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實(shí)現(xiàn)。 2.多態(tài)的實(shí)際用途包括簡化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪製程序中統(tǒng)一調(diào)用draw()方法,或遊戲開發(fā)中處理不同角色的共同行為。 3.Python實(shí)現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對象實(shí)現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項(xiàng)包括保持方

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時(shí)的佔(zhàn)位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。 1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重複代碼,但應(yīng)避免使用可變對像作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用於通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實(shí)現(xiàn)__iter__()和__next__()方法的對象,生成器是簡化版的迭代器,通過yield關(guān)鍵字自動實(shí)現(xiàn)這些方法。 1.迭代器每次調(diào)用next()返回一個(gè)元素,無更多元素時(shí)拋出StopIteration異常。 2.生成器通過函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無限序列。 3.處理已有集合時(shí)用迭代器,動態(tài)生成大數(shù)據(jù)或需惰性求值時(shí)用生成器,如讀取大文件時(shí)逐行加載。注意:列表等可迭代對像不是迭代器,迭代器到盡頭後需重新創(chuàng)建,生成器只能遍歷一次。

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類方法是Python中通過@classmethod裝飾器定義的方法,其第一個(gè)參數(shù)為類本身(cls),用於訪問或修改類狀態(tài)。它可通過類或?qū)嵗{(diào)用,影響的是整個(gè)類而非特定實(shí)例;例如在Person類中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對像數(shù)量;定義類方法時(shí)需使用@classmethod裝飾器並將首參命名為cls,如change_var(new_value)方法可修改類變量;類方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無自動參數(shù))不同,適用於工廠方法、替代構(gòu)造函數(shù)及管理類變量等場景;常見用途包括從

如何處理Python中的API身份驗(yàn)證 如何處理Python中的API身份驗(yàn)證 Jul 13, 2025 am 02:22 AM

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

什麼是python魔法方法或dunder方法? 什麼是python魔法方法或dunder方法? Jul 04, 2025 am 03:20 AM

Python的magicmethods(或稱dunder方法)是用於定義對象行為的特殊方法,它們以雙下劃線開頭和結(jié)尾。 1.它們使對象能夠響應(yīng)內(nèi)置操作,如加法、比較、字符串表示等;2.常見用例包括對像初始化與表示(__init__、__repr__、__str__)、算術(shù)運(yùn)算(__add__、__sub__、__mul__)及比較運(yùn)算(__eq__、__lt__);3.使用時(shí)應(yīng)確保其行為符合預(yù)期,例如__repr__應(yīng)返回可重構(gòu)對象的表達(dá)式,算術(shù)方法應(yīng)返回新實(shí)例;4.應(yīng)避免過度使用或以令人困惑的方

Python內(nèi)存管理如何工作? Python內(nèi)存管理如何工作? Jul 04, 2025 am 03:26 AM

Pythonmanagesmemoryautomaticallyusingreferencecountingandagarbagecollector.Referencecountingtrackshowmanyvariablesrefertoanobject,andwhenthecountreacheszero,thememoryisfreed.However,itcannothandlecircularreferences,wheretwoobjectsrefertoeachotherbuta

python`@property`裝飾師 python`@property`裝飾師 Jul 04, 2025 am 03:28 AM

@property是Python中用於將方法偽裝成屬性的裝飾器,允許在訪問屬性時(shí)執(zhí)行邏輯判斷或動態(tài)計(jì)算值。 1.它通過@property裝飾器定義getter方法,使外部像訪問屬性一樣調(diào)用方法;2.搭配.setter可控制賦值行為,如校驗(yàn)值合法性,不定義.setter則為只讀屬性;3.適用於屬性賦值校驗(yàn)、動態(tài)生成屬性值、隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié)等場景;4.使用時(shí)注意屬性名與私有變量名不同名,避免死循環(huán),適合輕量級操作;5.示例中Circle類限制radius非負(fù),Person類動態(tài)生成full_name屬

See all articles