Atualizado: 14/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Enviando Dados de Formulários no 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.

Exemplo de formulário HTML para envio de dados: Formulário HTML para envio de dados com Django

Dados exibidos no navegador após envio do formulário: Navegador exibindo dados 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 dados: Exemplo de formulário HTML para envio de arrays de dados com Django

Dados exibidos no navegador após envio do formulário: Navegador exibindo dados 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>

Documentação oficial:

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