Um formulário HTML é uma seção de um documento que tenha elementos especiais chamados controles (caixas de seleção, botões de rádio, menus, etc.) ou seja estas tags são responsáveis por criar as entradas de dados em paginas da web. O Django oferece uma gama de ferramentas e bibliotecas para ajudar a construir Forms para aceitar a entrada de dados dos visitantes do site, e em seguida, processar e responder à esta entrada. Os Forms do Django criam automaticamente os formulário HTML à partir de campos únicos a sua escolha ou de um modelo de dados, esta funcionalidade pode poupar muito tempo já que isenta o desenvolvedor de escrever manualmente widgets em uma página.
Django Forms API: https://docs.djangoproject.com/en/1.7/ref/forms/api/
Criando um Form de um Modelo
Para utilizar este walkthrough você deve criar um projeto e uma aplicação Django, configurar o banco de dados MySQL e configurar a aplicação para que seja funcional utilizando um modelo, uma visão e um Template. Você pode consultar como fazer estes procedimentos nos posts anteriores sobre o Django.
1 – Após configurar sua aplicação adequadamente para que rode e exiba uma pagina HTML quando executada, crie um novo arquivo chamado forms.py:
2 – Utilize os códigos abaixo para criar seus respectivos arquivos, você pode usar a imagem como referencia para analisar a estrutura do seu projeto e de sua aplicação:
3 – Rode sua aplicação e preencha os dados no formulário e clique em enviar:
4 – Abra o site Admin para verificar a tabela caso tenha configurado seu arquivo admin.py para o modelo, caso contrario utilize uma ferramenta SQL como o MySQL Workbench para visualizar os dados:
Exemplo:
Neste exemplo criamos um formulário de um modelo de dados usando as APIs de Forms do Django para obter uma entrada de dados do usuário.
Python
Model.py
from django.db import models # Cria modelo class DevAberto (models.Model): usuario = models.CharField(max_length=30) linguagem = models.CharField(max_length=50) email = models.EmailField() # Define unicode para o Django Admin def __unicode__(self): return self.usuario
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> </header> <nav> <p> <a href="/">Home</a> </p> </nav> <div> <p> Meu Formulário </p> <form method="post" action=""> {% csrf_token %} {{ form.as_p }} <input type="submit" /> </form> </div> <footer> <p> Copyright by Desenvolvimento aberto </p> </footer> </div> </body> </html>
Forms.py
from django import forms # Importa modelo from meusite.models import DevAberto # Cria classe do form para o modelo class MeuForm(forms.ModelForm): class Meta: model = DevAberto