A criação dos formulários de uma aplicação pode se tornar um processo demorado e cansativo, caso tenhamos diversas entidades com vários atributos. Por exemplo, imagine criar os formulários de uma aplicação que possui 20 cadastros com 50 campos cada… É muito HTML, certo!?
Com o Django, podemos simplificar todo este processo criando formulários automaticamente a partir de como os models estão definidos. E é isso que veremos neste artigo :D
Curso Django - Fundamentos
Conhecer o cursoEntendendo a aplicação
Vamos partir de uma aplicação pronta que possui apenas uma entidade definida em nosso arquivo models.py
, como pode-se ver abaixo:
class Usuario(models.Model):
SEXO_CHOICES = [
["F", "Feminino"],
["M", "Masculino"],
["N", "Nenhuma das opções"]
]
nome = models.CharField(max_length=20, null=False)
email = models.EmailField(null=False)
sexo = models.CharField(max_length=1, choices=SEXO_CHOICES)
Além disso, a aplicação inicial possui um método no arquivo views.py
que renderiza o template form.html
, o qual nós usaremos para carregar o formulário automático:
from django.shortcuts import render
def cadastrar_usuario(request):
return render(request, "form.html")
Já o arquivo form.html
possui a seguinte estrutura:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Cadastro</title>
</head>
<body>
Aqui será renderizado o formulário de cadastro
</body>
</html>
Criando forms.py
Agora, para gerar nosso formulário de cadastro com base nos campos que definimos no arquivo models.py
, precisamos criar o arquivo forms.py
. É ele quem é o responsável por determinar quais campos possuirá nosso formulário de cadastro de usuários.
Para criar nosso formulário, utilizaremos como base os tipos e regras de validação que definimos no arquivo models.py
. Sendo assim, o arquivo forms.py
terá o seguinte conteúdo:
from django import forms
from .models import *
class UsuarioForm(forms.ModelForm):
class Meta:
model = Usuario
fields = ["nome", "email", "sexo"]
Gerando formulário automaticamente
Após criar o arquivo forms.py
, podemos utilizá-lo para renderizar nosso formulário sem escrever uma única linha de HTML. Para isso, alteramos o método cadastrar_cliente
do arquivo views.py da seguinte forma:
from django.shortcuts import render
from .forms import *
def cadastrar_usuario(request):
form = UsuarioForm()
return render(request, "form.html", {'form':form})
Com isso, estamos criando uma instância nova da nossa classe UsuarioForm
e a enviando até o arquivo form.html
. É lá que renderizamos nosso formulário de cadastro, como podemos ver abaixo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Cadastro</title>
</head>
<body>
{{ form.as_p }}
</body>
</html>
Apenas utilizando o {{form.as_p}}
conseguimos renderizar nosso formulário de cadastro completo. Isso se dá porque o Django converte o código definido no arquivo models.py
e cria, para cada atributo da classe Usuario, um input HTML. No final, o resultado da página HTML é o seguinte:
Além disso, cada input gerado possui as regras de validação que determinamos no arquivo models.py
, ou seja, todos eles são required
e o input de e-mail só irá aceitar um e-mail válido como valor.
Concluindo
Uma das tarefas mais cansativas quando estamos criando aplicações web é a criação dos formulários de cadastro. Com o Django, conseguimos renderizar um formulário automaticamente, poupando tempo no desenvolvimento. Há também formas de estilizar este formulário automaticamente, mas veremos em um artigo futuro. Até lá! :D