Validando Dados de Formulários - Django
No Django, os usuários podem inserir qualquer tipo de dado em um formulário e enviá-lo. Contudo, nem todos os dados inseridos são apropriados ou válidos. Por exemplo, em um campo destinado à idade, um número negativo não seria considerado um valor aceitável. Para lidar com essas situações, o Django implementa um mecanismo de validação, garantindo que os dados atendam aos critérios definidos.
Regras de Validação
As regras de validação definem os critérios que os dados devem cumprir. Por padrão, todos os campos são obrigatórios, e o Django adiciona automaticamente o atributo required

Quando um campo pode ser opcional, o atributo required
from django import forms
class UserForm(forms.Form):
name = forms.CharField()
age = forms.IntegerField(required=False)
email = forms.EmailField(required=False)
Tamanho de Texto
Para campos como CharField
EmailField
min_length
max_length
from django import forms
class UserForm(forms.Form):
name = forms.CharField(min_length=2, max_length=20)
email = forms.EmailField(required=False, min_length=7)
Valores Mínimos e Máximos para Números
Campos numéricos como IntegerField
DecimalField
FloatField
min_value
max_value
DecimalField
decimal_places
from django import forms
class UserForm(forms.Form):
name = forms.CharField()
age = forms.IntegerField(min_value=1, max_value=100)
weight = forms.DecimalField(min_value=3, max_value=200, decimal_places=2)
Validação no Servidor com is_valid
Embora as validações no cliente sejam úteis, usuários com conhecimento técnico podem desativá-las, por exemplo, adicionando o atributo novalidate
O método is_valid()
True
False
O exemplo abaixo ilustra o uso do método is_valid() 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":
userform = UserForm(request.POST)
if userform.is_valid():
name = userform.cleaned_data["name"]
return HttpResponse(f"<h2>Hello, {name}</h2>")
else:
return HttpResponse("Invalid data")
else:
userform = UserForm()
return render(request, "index.html", {"form": userform})
Quando uma requisição POST é recebida, os dados enviados são passados para o formulário:
userform = UserForm(request.POST)
A validade dos dados é verificada com:
if userform.is_valid():
Se os dados forem válidos, eles podem ser acessados pelo atributo cleaned_data
name = userform.cleaned_data["name"]
Caso os dados sejam inválidos, uma resposta alternativa pode ser retornada:
return HttpResponse("Invalid data")
Testando o Formulário com novalidate
Para simular cenários em que a validação no cliente está desativada, o atributo novalidate
<form>
Conclusão
O Django combina validações no cliente e no servidor para garantir que os dados enviados atendam aos critérios definidos. A validação no servidor é essencial para proteger a aplicação contra dados maliciosos ou inválidos enviados por usuários mal-intencionados.