Fale com a gente no WhatsApp Fale com a gente no WhatsApp
Fale com a gente no WhatsApp

Desenvolvimento Back-end Django

Validação de dados em aplicações Django

Aprenda como trabalhar com validação de dados em aplicações Django, utilizando validações padrões e customizadas.

4 dias atrás

Formação Full-stack: Desenvolvedor Django
Conheça a formação em detalhes

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

Django - Fundamentos
Curso Django - Fundamentos
Conhecer o curso

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

Django - Banco de dados com Django ORM
Curso Django - Banco de dados com Django ORM
Conhecer o curso

Validaçõ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.)

Django - Módulo administrativo Django Admin
Curso Django - Módulo administrativo Django Admin
Conhecer o curso

Conclusã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

Autor(a) do artigo

Cleyson Lima
Cleyson Lima

Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python.

Todos os artigos

Artigos relacionados Ver todos