> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Come validare i dati con pydantic

> Impara a validare i dati con pydantic.

## Introduzione

* Questo articolo ti guida attraverso la validazione dei dati con pydantic. Pydantic è una libreria Python costruita in Rust.
* Prima di iniziare, assicurati di avere Python e la libreria Pydantic installati nel tuo ambiente. Controlla il comando di installazione di pydantic qui sotto.

```bash theme={null}
pip install pydantic
```

## Creare un modello

* Per prima cosa, dovremo importare e far ereditare la nostra classe da `pydantic.BaseModel` per iniziare a validare. Nel nostro esempio creeremo una classe chiamata
  `Person` che avrà un nome, un'età e un'e-mail.

```python theme={null}
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    email: str
```

* Con questa classe, quando la istanziamo, pydantic validerà se i parametri `name` ed `email` sono stringhe e se `age` è un intero.

### Usare il modello

* Ora che l'abbiamo creata, istanzieremo la classe. Creeremo un dict contenente i dati e lo spacchetteremo nella nostra classe.

```python theme={null}
data = {
    "name": "John",
    "age": 19,
    "email": "john@gmail.com"
}
person = Person(**data)
```

* L'esempio qui sopra non solleverà alcun errore poiché tutti i **parametri** sono del tipo corretto. Ora creeremo dei dati errati per verificare se la nostra validazione
  funziona.

```python theme={null}
data = {
    "name": "John",
    "age": "19",
    "email": "john@gmail.com"
}
person = Person(**data)
```

* Nell'esempio qui sopra verrà sollevato l'errore `ValidationError` perché `age` deve essere un **intero** e non può essere fornito come **stringa**.

## Creare una dataclass

* Puoi anche creare delle **dataclass** con pydantic, che saranno simili alle **dataclass** standard di Python ma avranno validazioni come BaseModel.

```python theme={null}
from pydantic import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str
```

* Se inviamo una `string` ad `age`, verrà convertita in `int`.

<Info>
  Pydantic supporta la validazione ricorsiva, il che significa che quando valida modelli annidati, valida anche i
  modelli interni.

  Se una classe ha una lista di `Person`, `people: list[Person]`, controllerà ogni elemento della lista e lo convertirà in un `Person`.
</Info>

## Extra

* Pydantic ha alcuni extra come la validazione delle **e-mail** e un pacchetto **timezone** di fallback. Per installarli, devi eseguire i seguenti comandi:

```bash theme={null}
pip install pydantic[email]
```

```bash theme={null}
pip install pydantic[timezone]
```

* Puoi installarli entrambi insieme eseguendo il seguente comando.

```bash theme={null}
pip install pydantic[email,timezone]
```

* Pydantic\[email] fornisce una classe per gestire le email, normalizzandole e validandone il formato `user@domain.tld`. Per questo, pydantic fornisce la classe `EmailStr` per eseguire questa validazione.

```python theme={null}
from pydantic import dataclass, EmailStr

@dataclass
class Person:
    name: str
    age: int
    email: EmailStr
```

## Ti è piaciuto questo articolo?

* Abbiamo creato questo contenuto con grande cura per offrirti il miglior aiuto possibile.
  Se questo articolo ti è stato utile in qualche modo, sostieni il nostro lavoro! Lascia la tua recensione! ci aiuta a capire cosa conta di più per te.

<CardGroup cols={2}>
  <Card title="Google Reviews" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Lascia la tua recensione su Google Reviews.
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Lascia la tua recensione su Trustpilot.
  </Card>
</CardGroup>
