Django – Validations – MySQL – Python

Publicado: 16 de janeiro de 2015 em Python

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:

Django - Formulário

Django – Formulário

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:

Django - Validações

Django – Validações

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

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s