O Django possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. Por padrão o Django já executa alguma validações de campos requeridos para os formulários que utilizam a classe Form ou os formulários associados ao modelo com a classe ModelForm. Entretanto você pode modificar a validação padrão, as desabilitando ou criando validações customizadas para os campo de seu formulário.
A validação do formulário acontece quando os dados são limpos (Cleaned). Se você quer personalizar este processo, há vários lugares que você pode mudar, cada um servindo a um propósito diferente. A maioria da validações podem ser feitas usando os validadores que são ajudantes simples que podem ser reutilizados facilmente. Validadores são funções simples (ou Callables) que levam um único argumento e chamam o ValidationError para a entrada inválida.
Django Validation: https://docs.djangoproject.com/en/1.7/ref/forms/validation/
Validando Campos Obrigatórios
Neste walkthrough utilizamos um projeto e uma aplicação Django básica, utilizando um modelo, uma visão e um template para exibir o formulário, caso queira saber mais sobre como chegar a está configuração utilize os posts anteriores sobre o Django.
1 – Após configurar seu projeto e sua aplicação, utilize os códigos abaixo para seus respectivos arquivos e rode sua aplicação. Você pode preencher os campos do formulários e salvar o registro no banco de dados:
2 – Uma vez que a entrada não satisfaça as validações do Django que por padrão requer todos os campos do modelo já que os mesmo não permitem campos nulos, uma mensagem de erro avisará para que você preencha corretamente o campo. No formulário abaixo também criamos uma validação customizada que previne que o usuário não insira qualquer coisa no campo, verificando o tamanho do campo:
Exemplo:
Neste exemplo utilizamos as validações padrões do Django para campos requeridos e também criamos uma validação customizada para o campo sobrenome.
Model – models.py
from django.db import models # Cria modelo class Funcionario (models.Model): nome = models.CharField(max_length=30) sobrenome = models.CharField(max_length=50) cargo = models.CharField(max_length=50) salario = models.DecimalField(max_digits=19, decimal_places=10) # Define unicode para o Django Admin def __unicode__(self): return self.nome
View – view.py
from django.shortcuts import render, render_to_response, RequestContext from django.http import HttpResponse # Importa form from meusite.forms import MeuForm # Exibe View def home(request): # Cria form form = MeuForm(request.POST or None) # Valida e salva if form.is_valid(): salvar = form.save(commit=False) salvar.save() return HttpResponse("Dados inseridos com sucesso!") # Chama Template return render_to_response("devaberto.html", locals(), context_instance = RequestContext(request))
Template – devaberto.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> <div> <header> <h1>Desenvolvimento Aberto</h1> <h2>Django - Validations </h2> </header> <div> <p> Meu Formulário </p> <form method="post" action=""> {% csrf_token %} {{ form.as_p }} <input type="submit" /> </form> </div> </div> </body> </html>
Form- forms.py
from django import forms # Importa modelo from models import Funcionario # Cria classe do form para o modelo class MeuForm(forms.ModelForm): nome = forms.CharField() sobrenome = forms.CharField() cargo = forms.CharField() salario = forms.DecimalField() # Associa formulario ao modelo class Meta: model = Funcionario # Django Validations - customizado def clean_sobrenome(self): snome = self.cleaned_data['sobrenome'] if len(snome) <= 3: raise forms.ValidationError("Sobrenome precisa conter mais de 3 caracteres.") return snome