Trabalhando com Formulários - FastAPI

No FastAPI, o processamento de dados de formulários HTML é diferente do tratamento de dados enviados no corpo da requisição. Para manipular formulários, é necessário instalar o módulo python-multipart, que lida com os dados enviados no formato multipart/form-data. Você pode instalá-lo usando o comando:

pip install python-multipart

O FastAPI fornece o objeto Form para acessar os dados enviados por formulários. Vamos criar um exemplo para entender como isso funciona.

Vamos criar a seguinte estrutura de diretórios:

.
├── public
│   └── index.html
├── main.py

No diretório public, crie um arquivo chamado index.html com o seguinte conteúdo:

<!DOCTYPE html>
<html>
<head>
    <title>Exemplo de Formulário</title>
    <meta charset="utf-8" />
</head>
<body>
    <h2>Formulário de Entrada</h2>
    <form action="postdata" method="post">
        <p>
            Nome:<br>
            <input name="username" />
        </p>
        <p>
            Idade:<br>
            <input name="userage" type="number" />
        </p>
        <input type="submit" value="Enviar" />
    </form>
</body>
</html>

Esse formulário possui dois campos: nome e idade. Ao clicar no botão "Enviar", os dados serão enviados via requisição POST para o endpoint /postdata.

Agora, vamos criar o arquivo main.py com o seguinte código:

from fastapi import FastAPI, Form
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html")

@app.post("/postdata")
def postdata(username: str = Form(), userage: int = Form()):
    return {"name": username, "age": userage}

Nesse código, importamos a classe Form do FastAPI e a utilizamos como tipo dos parâmetros da função postdata. Dessa forma, o FastAPI irá automaticamente extrair os dados enviados pelo formulário e passá-los como argumentos para a função.

Enviando Dados do Formulário com JavaScript
Recebendo Dados do Formulário Usando a Classe Form do FastAPI

Validação de Dados

O FastAPI permite validar os valores do formulário usando argumentos no construtor do Form. Estes são os principais parâmetros disponíveis:

  • min_length: Define o número mínimo de caracteres para strings.

  • max_length: Define o número máximo de caracteres para strings.

  • pattern: Aplica uma expressão regular para validação.

  • lt, le: Valida que o valor seja menor ou menor ou igual a um número.

  • gt, ge: Valida que o valor seja maior ou maior ou igual a um número.

Vamos criar um exemplo para validar os dados do formulário:

from fastapi import FastAPI, Form
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html")

@app.post("/postdata")
def postdata(
    username: str = Form(min_length=2, max_length=20),
    userage: int = Form(ge=18, lt=111)
):
    return {"name": username, "age": userage}

Nesse exemplo, definimos que o campo username deve ter entre 2 e 20 caracteres, e o campo userage deve ser maior ou igual a 18 e menor que 111 (exclusivo)

Caso os dados do formulário não atendam a essas restrições, o FastAPI retornará automaticamente um erro detalhado.

Valores Padrão

Você pode definir valores padrão para os campos do formulário usando o argumento default do Form. Esses valores serão usados caso o campo correspondente esteja ausente na requisição.

Vamos criar um exemplo com valores padrão para os campos do formulário:

from fastapi import FastAPI, Form
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html")

@app.post("/postdata")
def postdata(
    username: str = Form(default="Undefined", min_length=2, max_length=20),
    userage: int = Form(default=18, ge=18, lt=111)
):
    return {"name": username, "age": userage}

Nesse exemplo, se o campo username não estiver presente na requisição, ele será definido como "Undefined". Já o campo userage terá o valor padrão de 18.

Enviando Listas

Formulários podem conter múltiplos campos com o mesmo nome, permitindo o envio de listas de valores. Por exemplo, editamos o arquivo index.html para o seguinte conteúdo:

<!DOCTYPE html>
<html>
<head>
    <title>Exemplo de Formulário</title>
    <meta charset="utf-8" />
</head>
<body>
    <h2>Formulário de Entrada</h2>
    <form action="postdata" method="post">
        <p>
            Nome:<br>
            <input name="username" />
        </p>
        <p>
            Linguagens de Programação:<br>
            <input name="languages" /><br>
            <input name="languages" /><br>
            <input name="languages" /><br>
        </p>
        <input type="submit" value="Enviar" />
    </form>
</body>
</html>

Neste exemplo, vários campos de entrada compartilham o mesmo atributo name: languages. Isso cria um conjunto de valores quando o formulário é enviado.

Agora editamos o arquivo main.py:

from fastapi import FastAPI, Form
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html")

@app.post("/postdata")
def postdata(
    username: str = Form(),
    languages: list = Form()
):
    return {"name": username, "languages": languages}

Neste exemplo, o parâmetro languages é definido como uma lista usando o tipo list. Isso permite capturar múltiplos valores enviados no formulário. Vale ressaltar que mesmo que alguns campos estejam vazios, eles serão incluídos como strings vazias na lista.

Enviando Lista do Formulário com JavaScript
Recebendo Lista do Formulário com FastAPI
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com