TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.1K subscribers
Post #2216 354
🔆 معجزه Pydantic برای اعتبارسنجی و تبدیل تمیز داده‌ها

🔹 دیگه با دست دیتای ورودی رو چک نکن! (اعتبارسنجی مدرن در پایتون با Pydantic)


🔹 خیلی وقتا دیتایی از ورودی، کاربر یا API به دستمون میرسه (مثلاً JSON) و کلی خط کد می‌نویسیم تا چک کنیم سن حتماً عدد باشه، ایمیل فرمت درست داشته باشه و فیلدها خالی نباشن.

🔹 کتابخونه Pydantic این کار رو با تایپ هینت‌های خود پایتون فوق‌العاده ساده و تمیز کرده:

🔹 نمونه کد عملی:

from datetime import datetime
from pydantic import BaseModel, EmailStr, Field, field_validator

class UserRegisterSchema(BaseModel):
name: str = Field(..., min_length=3, max_length=50)
email: EmailStr
age: int = Field(..., ge=18, le=100) # سن باید بین ۱۸ تا ۱۰۰ باشه
joined_at: datetime = Field(default_factory=datetime.now)

@field_validator("name")
def name_must_not_contain_numbers(cls, value):
if any(char.isdigit() for char in value):
raise ValueError("نام نباید شامل عدد باشد")
return value

# تست با دیتای خام:
raw_data = {
"name": "Ali Dolati",
"email": "ali@example.com",
"age": "25" # خود پایتون استرینگ رو تبدیل به عدد می‌کنه!
}

try:
user = UserRegisterSchema(**raw_data)
print("دیتای تمیز و معتبر:", user.model_dump())
except Exception as e:
print("خطای ولیدیشن:", e)


🔹 چرا کاربردیه؟ هسته اصلی ابزارهایی مثل FastAPI و لانگ‌چین همین Pydantic هست و تبدیل داده‌ها (Data Parsing) رو به‌شدت امن و سریع می‌کنه.

🐍 @python_rd
More from @python_rd
  1. Oct 13, 2026کوییز پایتون 🔆 خروجی اجرای کد زیر چیست؟ t = (1, 2, [3, 4]) try: t[2] += [5] except TypeEr…
  2. Oct 13, 2026🔆 راز مکانیزم پیاده‌سازی و تغییر جهت NaN در الگوریتم مرتب‌سازی پایتون (Timsort) 🔹 باگ ری…
  3. Oct 13, 2026🔆 حذف تاریخی GIL از پایتون (Free-threaded Python) 🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL)…
  4. Oct 11, 2026🔆 مدیریت تمیز منابع با Context Managerهای سفارشی (contextlib) 🔹 ساخت Context Managerها م…
  5. Oct 10, 2026🔆 چرا برای داده‌های حجیم نباید از return استفاده کنی؟ 🔹 وقتی یک تابع لیست بزرگی از داده‌…
  6. Oct 10, 2026🔆 خروجی این تکه کد چیه؟ def add_item(item, lst=[]): lst.append(item) return lst print(add…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →