> ## 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.

# Como validar dados com pydantic

> Aprenda a validar dados com pydantic.

## Introdução

* Este artigo orienta você sobre validação de dados com pydantic. Pydantic é uma biblioteca Python escrita em Rust.
* Antes de começarmos, certifique-se de que o Python e a biblioteca pydantic estejam instalados no seu ambiente. Verifique o comando de instalação do pydantic abaixo.

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

## Criando um modelo

* Primeiro, precisamos importar a classe e criar uma classe que herda de `pydantic.BaseModel` para começar a validar. No nosso exemplo, criaremos a classe `Person` que terá os **atributos**
  name, age e um email.

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

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

* Com essa classe, quando instanciar ela, o pydantic irá validar se os parametros `name` e `email` são strings e `age` é inteiro.

## Usando o modelo

* Agora que a criamos, vamos instanciá-la. Vamos criar um dicionário com os dados e desempacotar eles para a classe.

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

* O exemplo acima não mostrará nenhum erro pois todos os **parâmetros** são do tipo correto. Agora vamos fazer o teste com dados do tipo errado para confirmar se a validação funciona.

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

* O exemplo acima mostrará erro `ValidationError` pois `age` é necessário ser **inteiro** mas foi passado como **string**.

## Criando Dataclass

* Você também pode criar **dataclasses** que funcionam de maneira similar às **dataclasses** padrões do Python porém com a validação como o `BaseModel`.

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

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

* Se passarmos `string` para `age`, ela será convertida para `int`.

<Info>
  O Pydantic suporta validação recursiva, isso significa que ele quando valida modelos aninhados, ele também valida os modelos internos.

  Se em uma classe houver uma lista de `Person`, `people: list[Person]`, ele verificará cada item e transformará em `Person`.
</Info>

## Extras

* O Pydantic tem pacotes extras para validar **e-mail** e fallback de **timezone**. Para instalar eles, utilize os comandos abaixo:

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

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

* Você pode instalar ambos de uma vez ao usar o seguinte comando.

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

* pydantic\[email] trás uma classe para lidar com emails, normalizando e validando no formato `user@domain.tld`. Para isso, o pydantic trás a classe `EmailStr` para fazer a validação.

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

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

## Gostou desse artigo?

* Criamos este conteúdo com o máximo de cuidado para oferecer a melhor ajuda possível.
  Se o artigo contribuiu de alguma forma, valorize nosso trabalho! Deixe sua avaliação e ajude-nos a entender o que é mais importante para você.

<CardGroup cols={2}>
  <Card title="Google Reviews" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Deixe sua avaliação no Google Reviews.
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Deixe sua avaliação no Trustpilot.
  </Card>
</CardGroup>
