Classes de Formulário - Django
O Django fornece ferramentas avançadas para trabalhar com formulários, como a possibilidade de defini-los em classes reutilizáveis. Essas classes centralizam a lógica dos formulários, simplificam a validação de dados, permitem o vínculo com modelos e oferecem outros benefícios que tornam o desenvolvimento mais organizado.
Criando Classes de Formulário
No Django, os formulários podem ser definidos como classes que herdam de forms.Form
forms.py
views.py
models.py
PROGRAMICIO hello/ |-- migrations/ |-- templates/ |-- index.html |-- __init__.py |-- admin.py |-- apps.py |-- forms.py |-- models.py |-- tests.py |-- views.py programicio/ |-- __init__.py |-- asgi.py |-- settings.py |-- urls.py |-- wsgi.py
Um exemplo básico de definição de formulário em forms.py
from django import forms
class UserForm(forms.Form):
name = forms.CharField()
age = forms.IntegerField()
Nesta classe:
O campo
utilizaname
, que gera um campo de entrada do tipoforms.CharField
.text
O campo
utilizaage
, que gera um campo de entrada do tipo numberforms.IntegerField
Renderizando o Formulário no Template
No arquivo views.py
from django.shortcuts import render
from .forms import UserForm
def index(request):
userform = UserForm()
return render(request, "index.html", {"form": userform})
No arquivo urls.py
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
]
No template index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Formulário de Usuário</title>
</head>
<body>
<table>
{{ form }}
</table>
</body>
</html>
Quando renderizado, o formulário gera o seguinte HTML:
<tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" required id="id_name" /></td></tr>
<tr><th><label for="id_age">Age:</label></th><td><input type="number" name="age" required id="id_age" /></td></tr>

Enviando e Processando Dados com o Formulário
Para permitir o envio de dados, ajustamos o template index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Formulário de Usuário</title>
</head>
<body>
<form method="POST">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Enviar">
</form>
</body>
</html>
O elemento <form>
method="POST"
No arquivo views.py
from django.shortcuts import render
from django.http import HttpResponse
from .forms import UserForm
def index(request):
if request.method == "POST":
name = request.POST.get("name")
age = request.POST.get("age")
return HttpResponse(f"<h2>Olá, {name}. Sua idade é: {age}</h2>")
else:
userform = UserForm()
return render(request, "index.html", {"form": userform})
Aqui, a view trata tanto requisições GET quanto POST:
Se o método for POST, os dados enviados pelo formulário são acessados através de
e processados.request.POST
Se o método for GET, o formulário vazio é renderizado na página.
Após preencher e enviar o formulário, a resposta exibirá os dados processados pelo servidor.
