تا حالا شده یه فرم ثبت‌نام رو تو یه سایت پر کنید و مثلاً تو فیلد سن، به جای عدد بنویسید «بیست»؟ اگر برنامه‌نویس بک‌اند حواسش به این سوتی ‌ها نباشه، همین دیتای اشتباه وارد سیستم میشه، میره تو دیتابیس و یهو کل سرور رو با ارورهای عجیب و غریب به فنا میده!

تو دنیای برنامه ‌نویسی، دیتایی که از سمت کاربر (یا هر کلاینت دیگه‌ای) میاد، دقیقاً مثل یه هندونه دربسته‌ ست؛ اصلاً نمیشه بهش اعتماد کرد. اینجاست که پای Pydantic به ماجرا باز میشه؛ ابزاری که مثل یه بادیگارد سخت‌گیر (یا همون بیمه‌نامه دیتای شما) جلوی در بک‌اند می‌ایسته و اجازه نمیده هیچ دیتای خرابی وارد سیستم بشه.

Pydantic دقیقاً چه کار میکنه؟

به زبون ساده، Pydantic یک کتابخونه تو پایتونه که کارش اعتبارسنجی داده‌ها (Data Validation) و تجزیه کردنشون (Parsing) است. پایدانتیک از همون قابلیت‌ های استاندارد خود پایتون (یعنی Type Hints) استفاده میکنه تا ساختار دیتای شما رو تعریف کنه.

وقتی شما به Pydantic میگید که «سن کاربر باید یه عدد صحیح (integer) باشه»، اون دیگه شوخی نداره. اگر کاربر چیزی غیر از عدد بفرسته، Pydantic همونجا مچش رو میگیره و یک خطای تر و تمیز برمیگردونه.

بیایید با یه مثال ببینیمش!

فرض کنید میخوایم دیتای یک کاربر جدید رو بگیریم. بدون پایدانتیک، مجبور بودیم کلی شرط if/else بنویسیم تا چک کنیم آیا اسم رشته هست؟ آیا سن عدد هست؟ و هزار تا دردسر دیگه. اما با Pydantic همه‌چیز این شکلی میشه:

from pydantic import BaseModel, EmailStr, ValidationError

# اینجا داریم قوانین رو برای بادیگاردمون (Pydantic) تعریف می‌کنیم
class User(BaseModel):
    name: str
    age: int
    email: EmailStr  # تازه چک می‌کنه که فرمت ایمیل هم حتماً درست باشه!

# حالا فرض کنید کاربر این دیتای خراب رو فرستاده:
bad_data = {
    "name": "Ali",
    "age": "بیست",  # اینجا به جای عدد، حروف نوشته شده
    "email": "not-an-email" # فرمت ایمیل غلطه
}

try:
    user = User(**bad_data)
except ValidationError as e:
    print(e.json())

وقتی این کد اجرا بشه چه اتفاقی می‌افته؟ پایدانتیک بلافاصله جلوی اجرای برنامه رو میگیره و یک ارور (ValidationError) پرتاب میکنه. تازه ارورش هم گنگ نیست؛ دقیقاً بهتون میگه:

  • «آهای! فیلد age باید یه عدد معتبر باشه!»

  • «فیلد email اصلاً شبیه آدرس ایمیل نیست!»

چرا برنامه‌نویس‌ها عاشق Pydantic هستن؟

غیر از اینکه جلوی ارورها رو میگیره، چند تا ویژگی خفن دیگه هم داره که باعث شده تو دنیای پایتون (مخصوصاً تو فریمورک‌هایی مثل FastAPI) حسابی بترکونه:

  • تبدیل خودکار (Type Coercion): پایدانتیک فقط گیر نمیده، اگه بتونه خودش دیتا رو اصلاح میکنه! مثلاً اگر کاربر سن رو به شکل رشته "25" بفرسته، Pydantic میفهمه که این میتونه به عدد تبدیل بشه، پس خودش اون رو به integer تبدیل می‌کنه و بعد تحویل بک‌اند میده.

  • سرعت فوق‌العاده بالا: تو نسخه‌ی دوم Pydantic (V2)، هسته اصلی با زبان Rust بازنویسی شده. این یعنی سرعت اعتبارسنجی دیتاها به طرز وحشتناکی بالا رفته و اصلاً باعث کندی سرور شما نمیشه.

  • پیام‌های خطای دقیق و به‌دردبخور: وقتی دیتایی خراب باشه، دقیقاً میگه کدوم فیلد، تو کدوم لایه از دیتا دچار مشکل شده. این برای برگردوندن جواب به فرانت‌اند عالیه.

  • پشتیبانی از ساختارهای تو در تو (Nested Models): اگر دیتای شما خیلی پیچیده ست (مثلاً یک سبد خرید که توش لیستی از محصولات داره)، Pydantic به راحتی میتونه مدل ‌های تو در تو رو اعتبارسنجی کنه.

جمع‌بندی

دیگه گذشت اون زمانی که مینشستیم با ده‌ها خط کد، چک میکردیم که دیتای ورودی کاربر درسته یا نه. Pydantic مثل یه بیمه‌نامه معتبر عمل میکنه؛ شما یک بار قرارداد (ساختار دیتا) رو براش تعریف میکنید و بعد از اون، با خیال راحت میرید سراغ توسعه منطق اصلی برنامه‌تون. خیالتون هم جمع جمعه که هیچ دیتای کثیف و خرابی نمیتونه از گیت امنیتی Pydantic رد بشه و دیتابیس یا سرورتون رو به هم بریزه!