Atualizado: 12/01/2025

Enviando Dados de Formulários - Django

Uma maneira comum de enviar dados para o servidor é utilizando formulários HTML, geralmente em requisições do tipo POST. No Django, existem dois métodos principais para lidar com formulários:

  • Trabalhar diretamente com formulários HTML padrão.

  • Utilizar o suporte especializado do Django para formulários, que pode simplificar o trabalho com dados em algumas situações.

Este artigo aborda o primeiro método, mostrando como receber dados enviados por formulários HTML padrão.

Os dados de formulários são frequentemente enviados para o servidor em requisições POST. Para acessar esses dados, o Django disponibiliza o atributo POST na classe HttpRequest. Por exemplo, considere o seguinte template index.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Formulário de Usuário</title>
</head>
<body>
    <h2>Formulário de Usuário</h2>
    <form method="post" action="postuser/">
        {% csrf_token %}
        <p>Nome:<br> <input name="name" /></p>
        <p>Idade:<br> <input name="age" type="number" /></p>
        <input type="submit" value="Enviar" />
    </form>
</body>
</html>

Aqui, um formulário foi definido para entrada de dados do usuário, enviando informações em uma requisição POST para o endpoint xq, especificado no atributo xq. O formulário inclui dois campos de entrada: o primeiro para o nome do usuário e o segundo para a idade.

A tag {% csrf_token %} adiciona um token CSRF ao formulário para proteger a aplicação contra ataques CSRF. O Django exige a presença desse token em requisições POST para validar a origem dos dados enviados.

No arquivo views.py, as funções para processar o envio e receber os dados do formulário podem ser definidas da seguinte maneira:

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return render(request, "index.html")

def postuser(request):
    name = request.POST.get("name", "Indefinido")
    age = request.POST.get("age", 1)
    return HttpResponse(f"

Nome: {name} | Idade: {age}

")

A função index retorna o template contendo o formulário. Já a função postuser processa os dados enviados. O dicionário request.POST contém os dados submetidos, permitindo o acesso a cada campo pelo nome especificado no atributo name no formulário. Caso um campo não esteja presente, valores padrão são retornados.

Por exemplo, no código:

<input name="age" type="number" />

O nome do campo é "age". Assim, o valor submetido pode ser acessado com request.POST.get("age", 1). Se o valor estiver ausente, o retorno será o valor padrão especificado (neste caso, 1).

No arquivo urls.py, as funções podem ser vinculadas às rotas como segue:

from django.urls import path
from hello import views

urlpatterns = [
    path("", views.index),
    path("postuser/", views.postuser),
]

Após o envio do formulário, os dados processados são retornados ao cliente.

Formulário HTML para envio de dados com Django
Exemplo de formulário HTML para envio de dados.
Navegador exibindo dados após envio do formulário
Dados exibidos no navegador após envio do formulário.

Manipulação de Arrays

Para enviar arrays de dados em um formulário HTML, consideramos o seguinte exemplo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Formulário de Usuário</title>
</head>
<body>
    <h2>Formulário de Usuário</h2>
    <form method="post" action="postuser/">
        {% csrf_token %}
        <p>Nome:<br> <input name="name" /></p>
        <p>Idade:<br> <input name="age" type="number" /></p>
        <p>Linguagens:<br>
            <input name="languages" /><br>
            <input name="languages" /><br>
            <input name="languages" /><br>
        </p>
        <input type="submit" value="Enviar" />
    </form>
</body>
</html>

Neste caso, foram adicionados três campos de entrada para linguagens de programação. O atributo name é o mesmo para todos os campos, permitindo que os valores sejam acessados como um array no lado do servidor.

A função postuser pode ser ajustada para processar arrays:

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return render(request, "index.html")

def postuser(request):
    name = request.POST.get("name", "Indefinido")
    age = request.POST.get("age", 1)
    langs = request.POST.getlist("languages", ["python"])

    return HttpResponse(f"""
        <div>Nome: {name} | Idade: {age}</div>
        <div>Linguagens: {langs}</div>
    """)

A função getlist() permite acessar listas de valores associados a um mesmo nome no formulário. Caso não haja dados para a chave especificada, é retornado um valor padrão (neste caso, ["python"]).

Exemplo de formulário HTML para envio de arrays de dados com Django
Formulário HTML para envio de arrays de dados
Navegador exibindo dados após envio do formulário com array de dados
Dados exibidos no navegador após envio do formulário com array de dados

O mesmo conceito pode ser aplicado a campos como select, que suportam seleção múltipla:

<select multiple name="languages">
    <option>Python</option>
    <option>JavaScript</option>
    <option>C++</option>
    <option>Java</option>
</select>
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