Atualizado: 12/01/2025

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 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.

Atributo required em formulários de Django

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.

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