Validando Dados de Formulários no 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
ao HTML gerado. Se um formulário for enviado sem preencher os campos obrigatórios, o navegador exibirá uma mensagem de erro, solicitando o preenchimento.
Quando um campo pode ser opcional, o atributo required
pode ser desativado. O exemplo abaixo demonstra como configurar campos opcionais:
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
ou EmailField
, os parâmetros min_length
e max_length
permitem definir limites para o tamanho do texto inserido. Isso ajuda a garantir que os dados estejam dentro do intervalo esperado.
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
e FloatField
permitem a definição de valores mínimos e máximos com os parâmetros min_value
e max_value
. O DecimalField
também aceita o parâmetro decimal_places
, que define o número máximo de casas decimais permitidas.
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
ao formulário. Para garantir a integridade dos dados, a validação também deve ser realizada no servidor.
O método is_valid()
verifica se os dados enviados atendem aos critérios definidos no formulário. Ele retorna True
para dados válidos e False
para dados inválidos.
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
pode ser adicionado ao elemento <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.
Documentação oficial: