A validação de dados é uma parte essencial no desenvolvimento de aplicações web, garantindo a integridade e a consistência das informações armazenadas no banco de dados. No Django, podemos realizar validações em diferentes camadas da aplicação, sendo as principais a camada de modelo e a camada de formulários.
Validação na camada de modelo
A camada de modelo do Django utiliza o ORM (Object-Relational Mapping) para definir as estruturas do banco de dados. Nesta camada, podemos definir validações através de atributos dos campos e de métodos personalizados.
Validações padrão
O Django possui uma série de validações padrão que podem ser aplicadas aos campos do modelo. Por exemplo, podemos definir um campo email
como único, garantindo que não existam registros duplicados no banco de dados.
from django.db import models
class Usuario(models.Model):
email = models.EmailField(unique=True)
Além disso, temos validações específicas para campos numéricos, datas, textos, entre outros. Para mais informações, consulte a documentação oficial.
Validações personalizadas
Curso Django - Fundamentos
Conhecer o cursoCaso as validações padrão não atendam às necessidades do projeto, podemos criar validações personalizadas através de métodos no modelo. Para isso, podemos utilizar o atributo validators
dos campos do modelo.
Nele, definimos uma função ou uma classe que realiza a validação dos dados. Por exemplo, caso queiramos validar se um campo idade
é maior que 18, podemos criar a seguinte função:
from django.core.exceptions import ValidationError
def valida_idade_maior_que_18(value):
if value <= 18:
raise ValidationError('A idade deve ser maior que 18 anos.')
class Usuario(models.Model):
idade = models.IntegerField(validators=[valida_idade_maior_que_18])
Dessa forma, ao tentar salvar um objeto Usuario
com idade menor ou igual a 18, uma exceção ValidationError
será lançada. Podemos obter o mesmo resultado utilizando uma classe para a validação e o próprio Django fornece algumas classes prontas para isso, como MinValueValidator
e MaxValueValidator
.
from django.core.validators import MinValueValidator
class Usuario(models.Model):
idade = models.IntegerField(validators=[MinValueValidator(18)])
Validação na camada de formulários
Além da validação na camada de modelo, o Django também oferece suporte à validação na camada de formulários. Os formulários são responsáveis por receber os dados do usuário e enviá-los para o servidor, sendo essencial garantir que esses dados sejam válidos.
Validações padrão
O forms.ModelForm
herda as validações do modelo associado, garantindo que os dados inseridos no formulário sejam válidos de acordo com as regras definidas no modelo.
# models.py
from django.db import models
class Usuario(models.Model):
email = models.EmailField(unique=True)
# forms.py
from django import forms
from .models import Usuario
class UsuarioForm(forms.ModelForm):
class Meta:
model = Usuario
fields = '__all__'
Desse modo, ao tentar salvar um formulário com um email duplicado, o Django irá lançar uma exceção ValidationError
.
Curso Django - Banco de dados com Django ORM
Conhecer o cursoValidações personalizadas
Assim como na camada de modelo, podemos criar validações personalizadas na camada de formulários. Para isso, basta definir um método clean_<campo>
no formulário, onde <campo>
é o nome do campo a ser validado.
from django import forms
from .models import Usuario
class UsuarioForm(forms.ModelForm):
class Meta:
model = Usuario
fields = '__all__'
def clean_idade(self):
idade = self.cleaned_data.get('idade')
if idade <= 18:
raise forms.ValidationError('A idade deve ser maior que 18 anos.')
return idade
Dessa forma, ao tentar salvar um formulário com idade menor ou igual a 18, uma mensagem de erro será exibida ao usuário.
Comparando as abordagens
A principal diferença entre a validação na camada de modelo e na camada de formulários é o momento em que ela é realizada. Na camada de modelo, a validação ocorre antes de salvar os dados no banco, garantindo a integridade dos mesmos. Já na camada de formulários, a validação ocorre após o envio dos dados pelo usuário, permitindo uma interação mais rápida e amigável.
Critério | Validação no Modelo | Validação no Formulário |
---|---|---|
Onde ocorre | No ORM antes de salvar no banco de dados | No Django Forms antes da submissão |
Aplicabilidade | Independentemente da interface utilizada (API, Admin, Formulários) | Específico para formulários |
Facilidade de Teste | Médias, exigindo testes de modelo | Mais fácil de testar em formulários |
Reuso | Reutilizável em qualquer lugar da aplicação | Restrito aos formulários |
Vantagens e Desvantagens
Validação no Modelo:
- ✅ Centraliza as regras de negócio
- ✅ Garante a consistência dos dados em toda a aplicação
- ❌ Pode ser mais difícil de testar e depurar
Validação no Formulário:
- ✅ Permite mensagens de erro personalizadas para os usuários
- ✅ Mais flexível para casos específicos de interface
- ❌ Não impede inserção de dados inconsistentes via outros meios (API, Admin, etc.)
Curso Django - Módulo administrativo Django Admin
Conhecer o cursoConclusão
O Django oferece mecanismos robustos para validação de dados tanto na camada de modelos quanto na camada de formulários. A escolha entre um ou outro depende do caso de uso. Para garantir a integridade dos dados, a validação na camada de modelo é indispensável. No entanto, para melhorar a experiência do usuário e personalizar mensagens de erro, a validação na camada de formulários é uma excelente escolha. O ideal é combinar ambas as abordagens para obter o melhor dos dois mundos.
Caso queira aprender mais sobre o Django, saiba que aqui na TreinaWeb nós temos a formação Especialista Django que possui 47h05 de vídeos e um total de 114 exercícios.
Veja alguns dos os cursos que fazem parte desta formação:
- Django - Fundamentos
- Django - Banco de dados com Django ORM
- Django - Mapeando de banco de dados legado
- Django - Trabalhando com validações
- Django - Autenticação e Autorização
- Django - Trabalhando com class-based views
- Django - Módulo administrativo Django Admin
- Django - Sistema de gerenciamento de clínicas PET
- Docker - Configurando um ambiente Python e Django
- Django - Instalação do ambiente de produção e deploy em uma VPS
- Django - Desenvolvimento de APIs REST
- Django - Autenticação e Autorização com JWT
- Django - API de gerenciamento de professores e aulas particulares
- Django e OpenAI - Entrevistador usando a inteligência artificial GPT