committed by
GitHub
1 changed files with 134 additions and 0 deletions
@ -0,0 +1,134 @@ |
|||
# Modelos de Formulários |
|||
|
|||
Você pode utilizar **Modelos Pydantic** para declarar **campos de formulários** no FastAPI. |
|||
|
|||
/// info | "Informação" |
|||
|
|||
Para utilizar formulários, instale primeiramente o <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a>. |
|||
|
|||
Certifique-se de criar um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, ativá-lo, e então instalar. Por exemplo: |
|||
|
|||
```console |
|||
$ pip install python-multipart |
|||
``` |
|||
|
|||
/// |
|||
|
|||
/// note | "Nota" |
|||
|
|||
Isto é suportado desde a versão `0.113.0` do FastAPI. 🤓 |
|||
|
|||
/// |
|||
|
|||
## Modelos Pydantic para Formulários |
|||
|
|||
Você precisa apenas declarar um **modelo Pydantic** com os campos que deseja receber como **campos de formulários**, e então declarar o parâmetro como um `Form`: |
|||
|
|||
//// tab | Python 3.9+ |
|||
|
|||
```Python hl_lines="9-11 15" |
|||
{!> ../../../docs_src/request_form_models/tutorial001_an_py39.py!} |
|||
``` |
|||
|
|||
//// |
|||
|
|||
//// tab | Python 3.8+ |
|||
|
|||
```Python hl_lines="8-10 14" |
|||
{!> ../../../docs_src/request_form_models/tutorial001_an.py!} |
|||
``` |
|||
|
|||
//// |
|||
|
|||
//// tab | Python 3.8+ non-Annotated |
|||
|
|||
/// tip | "Dica" |
|||
|
|||
Prefira utilizar a versão `Annotated` se possível. |
|||
|
|||
/// |
|||
|
|||
```Python hl_lines="7-9 13" |
|||
{!> ../../../docs_src/request_form_models/tutorial001.py!} |
|||
``` |
|||
|
|||
//// |
|||
|
|||
O **FastAPI** irá **extrair** as informações para **cada campo** dos **dados do formulário** na requisição e dar para você o modelo Pydantic que você definiu. |
|||
|
|||
## Confira os Documentos |
|||
|
|||
Você pode verificar na UI de documentação em `/docs`: |
|||
|
|||
<div class="screenshot"> |
|||
<img src="/img/tutorial/request-form-models/image01.png"> |
|||
</div> |
|||
|
|||
## Proibir Campos Extras de Formulários |
|||
|
|||
Em alguns casos de uso especiais (provavelmente não muito comum), você pode desejar **restringir** os campos do formulário para aceitar apenas os declarados no modelo Pydantic. E **proibir** qualquer campo **extra**. |
|||
|
|||
/// note | "Nota" |
|||
|
|||
Isso é suportado deste a versão `0.114.0` do FastAPI. 🤓 |
|||
|
|||
/// |
|||
|
|||
Você pode utilizar a configuração de modelo do Pydantic para `proibir` qualquer campo `extra`: |
|||
|
|||
//// tab | Python 3.9+ |
|||
|
|||
```Python hl_lines="12" |
|||
{!> ../../../docs_src/request_form_models/tutorial002_an_py39.py!} |
|||
``` |
|||
|
|||
//// |
|||
|
|||
//// tab | Python 3.8+ |
|||
|
|||
```Python hl_lines="11" |
|||
{!> ../../../docs_src/request_form_models/tutorial002_an.py!} |
|||
``` |
|||
|
|||
//// |
|||
|
|||
//// tab | Python 3.8+ non-Annotated |
|||
|
|||
/// tip |
|||
|
|||
Prefira utilizar a versão `Annotated` se possível. |
|||
|
|||
/// |
|||
|
|||
```Python hl_lines="10" |
|||
{!> ../../../docs_src/request_form_models/tutorial002.py!} |
|||
``` |
|||
|
|||
//// |
|||
|
|||
Caso um cliente tente enviar informações adicionais, ele receberá um retorno de **erro**. |
|||
|
|||
Por exemplo, se o cliente tentar enviar os campos de formulário: |
|||
|
|||
* `username`: `Rick` |
|||
* `password`: `Portal Gun` |
|||
* `extra`: `Mr. Poopybutthole` |
|||
|
|||
Ele receberá um retorno de erro informando-o que o campo `extra` não é permitido: |
|||
|
|||
```json |
|||
{ |
|||
"detail": [ |
|||
{ |
|||
"type": "extra_forbidden", |
|||
"loc": ["body", "extra"], |
|||
"msg": "Extra inputs are not permitted", |
|||
"input": "Mr. Poopybutthole" |
|||
} |
|||
] |
|||
} |
|||
``` |
|||
|
|||
## Resumo |
|||
|
|||
Você pode utilizar modelos Pydantic para declarar campos de formulários no FastAPI. 😎 |
Loading…
Reference in new issue