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
HttpRequest
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 %}
No arquivo views.py
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
request.POST
name
Por exemplo, no código:
<input name="age" type="number" />
O nome do campo é "age"
request.POST.get("age", 1)
1
No arquivo urls.py
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.


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
A função postuser
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()
["python"]


O mesmo conceito pode ser aplicado a campos como select
<select multiple name="languages">
<option>Python</option>
<option>JavaScript</option>
<option>C++</option>
<option>Java</option>
</select>