در Pydantic دو مفهوم مهم وجود دارد که نحوه اعتبارسنجی دادهها را مشخص میکند: Correction Mode و Strict Mode. این دو تعیین میکنند که هنگام دریافت ورودی، Pydantic چهقدر سختگیر باشد و آیا دادهها را اصلاح (convert) کند یا خیر.
۱. Correction Mode (حالت اصلاح یا تبدیل خودکار)
در حالت پیشفرض، Pydantic رفتار جهانواقعی دارد؛ یعنی تلاش میکند دادهها را تا حد امکان اصلاح و تبدیل کند تا مدل معتبر ساخته شود.
نمونه رفتار Correction Mode:
- رشته
"123"را به عدد123تبدیل میکند. - عدد
1را بهTrueتبدیل میکند. - عدد
0را بهFalseتبدیل میکند. - رشته تاریخ مانند
"2024-01-01"را بهdatetimeتبدیل میکند.
from pydantic import BaseModel
class User(BaseModel):
age: int
active: bool
User(age="25", active="true") # ورودی اصلاح میشود
در مثال بالا، با اینکه دادهها رشته هستند، Pydantic آنها را به نوع صحیح تبدیل میکند. این موضوع کار با ورودیهایی مثل JSON، فرمها و APIها را آسانتر میکند.
۲. Strict Mode (حالت سختگیر)
در حالت strict، Pydantic هیچگونه تبدیل نوعی (type coercion) انجام نمیدهد. یعنی داده باید دقیقاً همان نوع تعریفشده باشد، در غیر این صورت خطا صادر میشود.
رفتار Strict Mode:
"123"بهintتبدیل نمیشود → خطا"true"بهboolتبدیل نمیشود → خطا"2024-01-01"بهdatetimeتبدیل نمیشود → خطا
from pydantic import BaseModel, StrictInt, StrictBool
class User(BaseModel):
age: StrictInt
active: StrictBool
User(age="25", active="true") # ❌ خطا
در Pydantic v2 امکان فعالسازی سختگیری برای کل مدل نیز وجود دارد:
class User(BaseModel, strict=True):
age: int
active: bool
User(age="25") # ❌ خطا
جدول مقایسه Correction Mode و Strict Mode
| ویژگی | Correction Mode | Strict Mode |
|---|---|---|
| تبدیل رشته به عدد | بله | خیر |
| تبدیل رشته به بولین | بله | خیر |
| تبدیل خودکار تاریخ | انجام میشود | خطا |
| مناسب برای ورودیهای API غیرقابلاعتماد | بله | بله، با کنترل بیشتر |
| سختگیری بالا | کم | زیاد |
نتیجهگیری:
به طور کلی:
- Correction Mode مناسب زمانی است که ورودیها ممکن است دقیق نباشند و نیاز به تبدیل داشته باشند.
- Strict Mode زمانی مفید است که میخواهید ورودی دقیقاً مطابق نوع تعریفشده باشد و حتی کوچکترین عدم تطابق را رد کنید.