Ir para o conteúdo

Modelos de Formulários

🌐 Tradução por IA e humanos

Esta tradução foi feita por IA orientada por humanos. 🤝

Ela pode conter erros de interpretação do significado original ou soar pouco natural, etc. 🤖

Você pode melhorar esta tradução ajudando-nos a orientar melhor o LLM de IA.

Versão em inglês

Você pode utilizar Modelos Pydantic para declarar campos de formulários no FastAPI.

Informação

Para utilizar formulários, instale primeiramente o python-multipart.

Certifique-se de criar um ambiente virtual, ativá-lo, e então instalar. Por exemplo:

$ pip install python-multipart

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:

from typing import Annotated

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str


@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
    return data
🤓 Other versions and variants
from typing import Annotated

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str


@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
    return data

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str


@app.post("/login/")
async def login(data: FormData = Form()):
    return data

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str


@app.post("/login/")
async def login(data: FormData = Form()):
    return data

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:

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.

Nota

Isso é suportado desde a versão 0.114.0 do FastAPI. 🤓

Você pode utilizar a configuração de modelo do Pydantic para proibir qualquer campo extra:

from typing import Annotated

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str
    model_config = {"extra": "forbid"}


@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
    return data
🤓 Other versions and variants
from typing import Annotated

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str
    model_config = {"extra": "forbid"}


@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
    return data

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str
    model_config = {"extra": "forbid"}


@app.post("/login/")
async def login(data: FormData = Form()):
    return data

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form
from pydantic import BaseModel

app = FastAPI()


class FormData(BaseModel):
    username: str
    password: str
    model_config = {"extra": "forbid"}


@app.post("/login/")
async def login(data: FormData = Form()):
    return data

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:

{
    "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. 😎