Skip to content

Commit af8b093

Browse files
committed
Adicionando Field do pydantic na aula 07 e nos códigos posteriores
1 parent 3a12c1a commit af8b093

File tree

8 files changed

+39
-25
lines changed

8 files changed

+39
-25
lines changed

aulas/07.md

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -535,15 +535,29 @@ Dessa forma, temos um modelo padrão de filtro e qualquer endpoint que precisar
535535
Uma das grandes vantagens de usar o pydantic para as querystrings é poder restringir de algumas formas os dados que podem ser passados pelo cliente. Por exemplo, embora `#!python offset: int = 0` pareça bastante confiável, temos um problema claro com o tipo `#!python int`. E se for passado um valor negativo?
536536

537537
```python title="fast_zero/schemas.py"
538-
from pydantic import ..., Field # TODO
538+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
539539

540+
# ...
540541

541542
class FilterPage(BaseModel):
542-
offset: int = Field(default=0, ge=0)
543-
limit: int = Field(default=100, ge=1)
543+
offset: int = Field(0, ge=0)
544+
limit: int = Field(100, ge=1)
544545
```
545546

546-
> Explicar as implicações do Field
547+
Os [`Field`s](https://docs.pydantic.dev/latest/concepts/fields/) do pydantic podem aplicar diversas validações adicionais, além dos tipos. Neste caso, `ge` significa *greater than* [maior que]. O que significa, no caso de `offset`, que o valor deve ser do tipo `#!python int` e maior ou igual a `#!python 0`.
548+
549+
??? tip "Annotated e Pydantic"
550+
Embora tenhamos usado a notação completa das anotações de tipo, como:
551+
```python
552+
class FilterPage(BaseModel):
553+
offset: int = Field(0, ge=0)
554+
```
555+
556+
O tipo `Annotated` também poderia ser usado aqui:
557+
```python
558+
class FilterPage(BaseModel):
559+
offset: Annotated[int, Field(0, ge=0)]
560+
```
547561

548562
### Implementação de querystrings via Pydantic
549563

codigo_das_aulas/07/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33

44
class Message(BaseModel):
@@ -28,5 +28,5 @@ class Token(BaseModel):
2828

2929

3030
class FilterPage(BaseModel):
31-
offset: int = 0
32-
limit: int = 100
31+
offset: int = Field(0, ge=0)
32+
limit: int = Field(100, ge=1)

codigo_das_aulas/08/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33

44
class Message(BaseModel):
@@ -28,5 +28,5 @@ class Token(BaseModel):
2828

2929

3030
class FilterPage(BaseModel):
31-
offset: int = 0
32-
limit: int = 100
31+
offset: int = Field(0, ge=0)
32+
limit: int = Field(100, ge=1)

codigo_das_aulas/09/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33

44
class Message(BaseModel):
@@ -28,5 +28,5 @@ class Token(BaseModel):
2828

2929

3030
class FilterPage(BaseModel):
31-
offset: int = 0
32-
limit: int = 100
31+
offset: int = Field(0, ge=0)
32+
limit: int = Field(100, ge=1)

codigo_das_aulas/10/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33
from fast_zero.models import TodoState
44

@@ -30,8 +30,8 @@ class Token(BaseModel):
3030

3131

3232
class FilterPage(BaseModel):
33-
offset: int = 0
34-
limit: int = 100
33+
offset: int = Field(0, ge=0)
34+
limit: int = Field(100, ge=1)
3535

3636

3737
class TodoSchema(BaseModel):

codigo_das_aulas/11/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33
from fast_zero.models import TodoState
44

@@ -30,8 +30,8 @@ class Token(BaseModel):
3030

3131

3232
class FilterPage(BaseModel):
33-
offset: int = 0
34-
limit: int = 100
33+
offset: int = Field(0, ge=0)
34+
limit: int = Field(100, ge=1)
3535

3636

3737
class TodoSchema(BaseModel):

codigo_das_aulas/12/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33
from fast_zero.models import TodoState
44

@@ -30,8 +30,8 @@ class Token(BaseModel):
3030

3131

3232
class FilterPage(BaseModel):
33-
offset: int = 0
34-
limit: int = 100
33+
offset: int = Field(0, ge=0)
34+
limit: int = Field(100, ge=1)
3535

3636

3737
class TodoSchema(BaseModel):

codigo_das_aulas/13/fast_zero/schemas.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, ConfigDict, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
22

33
from fast_zero.models import TodoState
44

@@ -30,8 +30,8 @@ class Token(BaseModel):
3030

3131

3232
class FilterPage(BaseModel):
33-
offset: int = 0
34-
limit: int = 100
33+
offset: int = Field(0, ge=0)
34+
limit: int = Field(100, ge=1)
3535

3636

3737
class TodoSchema(BaseModel):

0 commit comments

Comments
 (0)