- Use `BaseModel` subclasses for data validation — define fields with type annotations and Pydantic validates on instantiation.
- Use `Field()` for constraints: `Field(min_length=1, max_length=100)` for strings, `Field(ge=0)` for numbers — validation errors are automatic.
- Use `model_validate()` for dict/JSON parsing and `model_dump()` for serialization — prefer these over manual dict manipulation.
- Use `Field()` for validation constraints: `Field(min_length=1, max_length=100, ge=0)`.
- Use `@field_validator` for custom validation logic on individual fields.
- Use `model_config = ConfigDict(strict=True)` to reject type coercion when needed.
- Use `Optional[T]` and `Field(default=None)` for nullable fields. Use `Field(default_factory=list)` for mutable defaults.