国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開発 Python チュートリアル Pydantic: 手動(dòng)検証の終わり! ?

Pydantic: 手動(dòng)検証の終わり! ?

Nov 26, 2024 am 12:07 AM

Pydantic は、Python 用のデータ検証および設(shè)定管理ライブラリです。 Python の型ヒントを使用してデータを検証および解析し、コードが適切に構(gòu)造化され型指定されたデータを処理できるようにします。 Pydantic では、Python のデータクラスに似たモデル構(gòu)造を活用することで、複雑なデータのスキーマを簡(jiǎn)単に定義し、きれいな Python 的な方法でデータを自動(dòng)的に検証し、シリアル化/逆シリアル化することができます。主な機(jī)能を見てみましょう:

データの検証

Python の型ヒントを使用して、スキーマに対して入力データを自動(dòng)的に検証します。

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)

データ モデルを定義したい場(chǎng)合は、pydantic.BaseModel を使用してください!

機(jī)能の検証

Pydantic は、データ モデルだけでなく、関數(shù)の入出力も検証するための強(qiáng)力なツールを提供します。これは @validate_call デコレーターを使用して実現(xiàn)され、関數(shù)の引數(shù)と戻り値に対して厳密なデータ検証を強(qiáng)制できるようになります。指定された引數(shù)または戻り値の型が予期される型と一致しない場(chǎng)合、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 フラグを有効にすることにより、Pydantic は注釈付きの戻り値の型に対して関數(shù)の戻り値も検証します。これにより、関數(shù)が期待される出力スキーマに準(zhǔn)拠することが保証されます。

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 は、JSON データを含む複雑な入れ子構(gòu)造をモデル オブジェクトに解析できます。

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)

柔軟な検証

データ検証は強(qiáng)制型検証ではありません。たとえば、それぞれ int、bool、datetime 型の id、due_date、priority フィールドを使用してモデルを定義する場(chǎng)合、次のように渡すことができます。

  • IDとして數(shù)値文字列
  • ISO-8601、UTC、または due_date としての他の日付形式の文字列
  • 優(yōu)先度として「はい」/「いいえ」、「オン」/「オフ」、「true」/「false」、1/0 など
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)

カスタム検証

バリデーターを使用してモデル內(nèi)にカスタム検証ロジックを定義することもできます。これらを使用すると、組み込み型やフィールド制約を使用して簡(jiǎn)単に表現(xiàn)できない、より複雑な検証ルールを適用できます。バリデータは、field_validator デコレータまたは Field オブジェクトを通じて定義されます。 1 つ以上のフィールド名を field_validator に渡して、どのフィールドがこのバリデータを使用するかを決定するか、「*」を渡してすべてのフィールドにバリデータを適用できます。

import Any と入力してから
pydantic import フィールド、field_validator、EmailStr、BaseModel から

クラス ユーザー(ベースモデル):
    ID: 整數(shù)
    ユーザー名: str = フィールド(パターン=r'^w $')
    電子メール: EmailStr
    年齢: int = フィールド(18, ge=14)
    is_active: bool = True
    役割: リスト[str]

    # 內(nèi)部解析の「前」に実行されるバリデータを定義します
    @field_validator('役割', モード='前')
    def _validate_roles(cls、値: 任意):
        戻り値.split(',') if isinstance(value, str) else value

ユーザー = ユーザー(id=1、ユーザー名='john'、電子メール='john@example.com'、役割='學(xué)生、歌手')
プリント(ユーザー) #>



<h2>
  
  
  オープンソース プロジェクト
</h2>

<p>Pydantic を利用したオープンソース プロジェクトが多數(shù)あります。それらの最高のものを探ってみましょう:</p>

<h3>
  
  
  ファストAPI
</h3>

<p>Pydantic の最も顕著な使用例の 1 つは、Python で API を構(gòu)築するための最新の Web フレームワークである FastAPI です。 FastAPI は、リクエスト本文の検証、クエリ パラメータ、レスポンス スキーマに Pydantic モデルを広範(fàn)囲に使用します。</p>

  • 出典: https://github.com/fastapi/fastapi
  • ドキュメント: https://fastapi.tiangolo.com

Pydantic: The end of manual validations! ?

先生

FastAPI は API を構(gòu)築するように設(shè)計(jì)されていますが、Sensei はこれらの API を迅速かつ簡(jiǎn)単にラップするように設(shè)計(jì)されています。 Teacher を活用した API クライアントにより、ユーザーは関連性の高いデータ モデルを確実に取得でき、混亂を招くエラーが発生しません。

  • 出典: https://github.com/CrocoFactory/先生
  • ドキュメント: https://Sensei.crocofactory.dev

Pydantic: The end of manual validations! ?

SQLModel とタイパー

SQLModelTyper は、FastAPI の作成者である Sebastián Ramírez によって開発された 2 つの注目すべきプロジェクトです。

SQLModel は、Python アプリケーションでのデータベース対話を合理化するために設(shè)計(jì)されたライブラリです。 SQLAlchemyPydantic の上に構(gòu)築された SQLModel は、ORM の能力とデータ検証とシリアル化の利便性を組み合わせています。

  • 出典: https://github.com/fastapi/sqlmodel
  • ドキュメント: https://sqlmodel.tiangolo.com

Typer は、Python を使用してコマンドライン インターフェイス (CLI) アプリケーションを作成するためのフレームワークです。 Python のタイプヒントを使用して、ユーザーフレンドリーな CLI コマンドとヘルプ テキストを自動(dòng)的に生成することで、プロセスを簡(jiǎn)素化します。

  • 出典: https://github.com/fastapi/typer
  • ドキュメント: https://typer.tiangolo.com

以上がPydantic: 手動(dòng)検証の終わり! ?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python Webアプリケーション(XSS、SQLインジェクションなど)の一般的なセキュリティの脆弱性は何ですか?また、どのように緩和できますか? Python Webアプリケーション(XSS、SQLインジェクションなど)の一般的なセキュリティの脆弱性は何ですか?また、どのように緩和できますか? Jun 10, 2025 am 12:13 AM

Webアプリケーションのセキュリティに注意する必要があります。 Python Webサイトの一般的な脆弱性には、XSS、SQLインジェクション、CSRF、およびファイルアップロードリスクが含まれます。 XSSの場(chǎng)合、テンプレートエンジンを使用して、自動(dòng)的にエスケープし、豊富なテキストHTMLをフィルタリングし、CSPポリシーを設(shè)定する必要があります。 SQLインジェクション、パラメーター化されたクエリまたはORMフレームワークを防ぎ、ユーザー入力を検証するため。 CSRFを防ぐには、CSRFTTOKENメカニズムを有効にし、機(jī)密操作を2回確認(rèn)する必要があります。ファイルアップロード脆弱性を使用して、タイプを制限し、ファイルの名前を変更し、実行権限を禁止する必要があります。規(guī)範(fàn)に従って、成熟したツールを使用すると、リスクが効果的に減少し、安全性が継続的に注意とテストを必要とします。

Pythonの不適格またはPytestフレームワークは、自動(dòng)テストをどのように促進(jìn)しますか? Pythonの不適格またはPytestフレームワークは、自動(dòng)テストをどのように促進(jìn)しますか? Jun 19, 2025 am 01:10 AM

Pythonの不適格でPytestは、自動(dòng)テストの書き込み、整理、および実行を簡(jiǎn)素化する2つの広く使用されているテストフレームワークです。 1.両方とも、テストケースの自動(dòng)発見をサポートし、明確なテスト構(gòu)造を提供します。 pytestはより簡(jiǎn)潔で、テスト\ _から始まる関數(shù)が必要です。 2。それらはすべて組み込みのアサーションサポートを持っています:Unittestはアサートエクイアル、アサートトルー、およびその他の方法を提供しますが、Pytestは拡張されたアサートステートメントを使用して障害の詳細(xì)を自動(dòng)的に表示します。 3.すべてがテストの準(zhǔn)備とクリーニングを処理するためのメカニズムを持っています:un

Pythonは関數(shù)の可変デフォルト引數(shù)をどのように処理しますか、そしてなぜこれが問題になるのでしょうか? Pythonは関數(shù)の可変デフォルト引數(shù)をどのように処理しますか、そしてなぜこれが問題になるのでしょうか? Jun 14, 2025 am 12:27 AM

Pythonのデフォルトパラメーターは、定義されたときに1回のみ初期化されます??蓧浈芝弗Д龋ē辚攻趣滢o書など)がデフォルトのパラメーターとして使用される場(chǎng)合、予期しない動(dòng)作が引き起こされる可能性があります。たとえば、空のリストをデフォルトのパラメーターとして使用する場(chǎng)合、関數(shù)への複數(shù)の呼び出しは、毎回新しいリストを生成する代わりに同じリストを再利用します。この動(dòng)作によって引き起こされる問題には、次のものが含まれます。1。関數(shù)呼び出し間のデータの予期しない共有。 2。その後の呼び出しの結(jié)果は、以前の呼び出しの影響を受け、デバッグの難しさを増加させます。 3.論理エラーを引き起こし、検出が困難です。 4.初心者と経験豊富な開発者の両方を混亂させるのは簡(jiǎn)単です。問題を回避するために、ベストプラクティスは、デフォルト値をNONEに設(shè)定し、関數(shù)內(nèi)に新しいオブジェクトを作成することです。

Pythonアプリケーションを生産環(huán)境に展開するための考慮事項(xiàng)は何ですか? Pythonアプリケーションを生産環(huán)境に展開するための考慮事項(xiàng)は何ですか? Jun 10, 2025 am 12:14 AM

Pythonアプリケーションを生産環(huán)境に展開するには、安定性、セキュリティ、メンテナンスに注意が必要です。まず、GunicornまたはUWSGIを使用して開発サーバーを置き換えて、同時(shí)処理をサポートします。第二に、パフォーマンスを改善するための逆プロキシとしてNginxと協(xié)力します。第三に、リソースを最適化するためにCPUコアの數(shù)に従ってプロセスの數(shù)を構(gòu)成します。第4に、仮想環(huán)境を使用して依存関係を分離し、バージョンをフリーズして一貫性を確保します。第5に、詳細(xì)なログを有効にし、監(jiān)視システムを統(tǒng)合し、操作とメンテナンスを容易にするアラームメカニズムを設(shè)定します。第六に、アプリケーションを?qū)g行するためのルートアクセス許可を避け、デバッグ情報(bào)を閉じ、HTTPSを構(gòu)成してセキュリティを確保します。最後に、自動(dòng)展開はCI/CDツールを通じて達(dá)成され、人的エラーを減らします。

PythonをMicroservicesアーキテクチャ內(nèi)の他の言語やシステムとどのように統(tǒng)合できますか? PythonをMicroservicesアーキテクチャ內(nèi)の他の言語やシステムとどのように統(tǒng)合できますか? Jun 14, 2025 am 12:25 AM

Pythonは、マイクロサービスアーキテクチャの他の言語やシステムとうまく機(jī)能します。キーは、各サービスが獨(dú)立して実行され、効果的に通信する方法です。 1.標(biāo)準(zhǔn)のAPIおよび通信プロトコル(HTTP、REST、GRPCなど)を使用して、PythonはFlaskやFastapiなどのフレームワークを介してAPIを構(gòu)築し、リクエストまたはHTTPXを使用して他の言語サービスを呼び出します。 2。メッセージブローカー(Kafka、Rabbitmq、Redisなど)を使用して非同期コミュニケーションを?qū)g現(xiàn)するために、Python Servicesは他の言語消費(fèi)者向けのメッセージを公開して、システム分離、スケーラビリティ、フォールトトレランスを改善します。 3.実裝を?qū)g現(xiàn)するために、他の言語のランタイム(Jythonなど)をC/Cから拡張または埋め込んだ

Pythonは、NumpyやPandasなどのライブラリとのデータ分析と操作にどのように使用できますか? Pythonは、NumpyやPandasなどのライブラリとのデータ分析と操作にどのように使用できますか? Jun 19, 2025 am 01:04 AM

pythonisidealfordataanalysisduetonumpyandpandas.1)numpyexcelsatnumericalcompitations withfast、多次元路面およびベクトル化された分離likenp.sqrt()

__iter__と__next__を使用してPythonにカスタムイテレーターを?qū)g裝するにはどうすればよいですか? __iter__と__next__を使用してPythonにカスタムイテレーターを?qū)g裝するにはどうすればよいですか? Jun 19, 2025 am 01:12 AM

カスタムイテレーターを?qū)g裝するには、クラス內(nèi)の__iter__および__next__メソッドを定義する必要があります。 __iter__メソッドは、ループなどの反復(fù)環(huán)境と互換性があるように、通常は自己の反復(fù)オブジェクト自體を返します。 __next__メソッドは、各反復(fù)の値を制御し、シーケンスの次の要素を返し、アイテムがもうない場(chǎng)合、停止例外をスローする必要があります。 statusステータスを正しく追跡する必要があり、無限のループを避けるために終了條件を設(shè)定する必要があります。 fileファイルラインフィルタリングなどの複雑なロジック、およびリソースクリーニングとメモリ管理に注意を払ってください。 simple単純なロジックについては、代わりにジェネレーター関數(shù)の収率を使用することを検討できますが、特定のシナリオに基づいて適切な方法を選択する必要があります。

リスト、辭書、および設(shè)定された包括的設(shè)定は、Pythonのコードの読みやすさと簡(jiǎn)潔さをどのように改善しますか? リスト、辭書、および設(shè)定された包括的設(shè)定は、Pythonのコードの読みやすさと簡(jiǎn)潔さをどのように改善しますか? Jun 14, 2025 am 12:31 AM

Pythonのリスト、辭書、コレクションの派生は、簡(jiǎn)潔な構(gòu)文を通じてコードの読みやすさと書き込み効率を向上させます。これらは、マルチラインループをシングルラインコードに置き換えて要素変換またはフィルタリングを?qū)g裝するなど、イテレーションおよび変換操作を簡(jiǎn)素化するのに適しています。 1. [x2forxinrange(10)]などの包括的リストは、正方形シーケンスを直接生成できます。 2。{x:x2forxinrange(5)}などの辭書の包括的な辭書は、キー値マッピングを明確に表現(xiàn)しています。 3。[XForxinNumberSifx%2 == 0]などの條件フィルタリングにより、フィルタリングロジックがより直感的になります。 4。複雑な條件を埋め込むこともできます。たとえば、マルチコンディションフィルタリングや三元式の組み合わせなど。しかし、保守性の低下を避けるために、過度のネスティングまたは副作用操作を避ける必要があります。派生の合理的な使用は減少する可能性があります

See all articles