Buscar

Formulários com Django

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 13 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PROGRAMAÇÃO 
BACK END I 
Fabiano Berlinck Neumann
Formulários com Django
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Reconhecer a criação de formulários.
 � Implementar o arquivo forms.py.
 � Gerar um formulário automaticamente.
Introdução
Python é considerada uma linguagem de programação de fácil entendi-
mento e sintaxe simples, sendo utilizada em diversas áreas na criação de 
pequenas aplicações. Quando a linguagem é utilizada em um framework 
Web como o Django, é possível criar aplicações completas, com a proposta 
de tornar o desenvolvimento mais ágil, da concepção à conclusão, assim 
como promover cuidados em relação à segurança e à escalabilidade. 
Além disso, o Django é considerado um dos mais populares entre os 
frameworks existentes.
Por conta de sua arquitetura, para que seja possível criar aplicações 
no Django, é necessário que o desenvolvedor siga algumas orientações 
e convenções. Conhecer padrões como o model-view-controller e para-
digmas como a programação orientada a objetos pode acelerar a curva 
de aprendizado e tornar mais simples a manipulação da estrutura de 
arquivos e pastas do projeto, bem como a ordem do código em cada 
um destes arquivos.
Neste capítulo, você vai aprender sobre a criação de páginas com 
formulários, desde a base para todos os tipos de página até a estrutura 
específica do formulário. Além disso, você vai saber como implementar o 
arquivo que contém o modelo que representa os objetos do formulário 
e como gerar um formulário automaticamente.
Criação de formulários
Na programação de páginas com formulários no Django, assim como em 
outros frameworks Web, os desenvolvedores devem escrever o código em 
HTML e CSS para criar, estruturar e estilizar as páginas e seus componentes. 
Entretanto, de acordo com Pinheiro (2019), neste framework é possível diminuir 
boa parte da escrita em HTML e CSS com a geração de formulários de forma 
automatizada a partir de códigos escritos em Python.
Os exemplos de código deste capítulo são modificações do projeto exem-
plificado no tutorial Django Girls e abordam trechos de uma aplicação que 
gerencia uma lista de tarefas do usuário, especificamente, a tela com formulário 
de criação e edição de uma das tarefas. O trecho de código a seguir repre-
senta o código do arquivo base das telas, chamado base.html, que contém 
os componentes que, com o uso do Django, não precisam ser repetidos na 
apresentação do formulário de criação e edição da tarefa, da lista de tarefas 
e de seus detalhes.
{% load static %}<!-- código Python para carregar arquivos 
estáticos -->
<html>
 <head>
 <title>Minha Lista de Tarefas</title>
 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/
bootstrap/3.2.0/css/bootstrap.min.css" />
 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/
bootstrap/3.2.0/css/bootstrap-theme.min.css" />
 <link href='//fonts.googleapis.com/css?family=Lobster&subs
et=latin,latin-ext' rel='stylesheet' type='text/css' />
 <link rel="stylesheet" href="{% static css/style.css %}">
 </head>
 <body>
 <div class="page-header">
 <a href="{% url 'task _ new' %}" class="top-menu"><span 
class="glyphicon glyphicon-plus"></span></a>
 <h1><a href="/">Minha Lista de Tarefas</a></h1>
 </div>
 <div class="content container">
Formulários com Django2
 <div class="row">
 <div class="col-md-8">
 {% block content %}
 {% endblock %}
<!-- conteúdo do formulário e das demais páginas que 
utilizam o mesmo arquivo base por meio de código 
Python -->
 </div>
 </div>
 </div>
 </body>
</html>
Como é possível observar no código HTML, o título da aba do navegador 
é definido como Minha Lista de Tarefas na tag <title>; as duas 
primeiras tags <link> são utilizadas para adicionar o Bootstrap; a terceira 
tag <link> para adicionar a fonte Lobster e; a quarta, para adicionar a 
referência ao arquivo CSS de estilos, que terá seu valor convertido para um 
código Python exigido pelo Django para referenciar arquivos estáticos como 
o de estilos. Também serão adicionados códigos Python para carregar a área 
de conteúdo.
Dentro do corpo da página existem dois grandes blocos <div>, um com 
a classe page-header e outro com a classe content container, que 
representam o cabeçalho da página e a área de conteúdo, respectivamente. 
No cabeçalho existem dois links: o primeiro envolve o ícone com o sinal de 
adição e possui referência em Python para a rota que carrega o formulário 
de nova tarefa para a área de conteúdo. O segundo está dentro da tag <h1>, 
o que permite ao usuário clicar no título para carregar a lista de tarefas.
Saiba mais sobre o Bootstrap e conheça os componentes que podem ser aplicados 
por meio das classes das tags no link a seguir.
https://qrgo.page.link/1iKcS
3Formulários com Django
Tanto no arquivo base quanto no arquivo do formulário, apresentado a 
seguir e nomeado como task_edit.html, o formulário escrito em HTML 
não exige o conhecimento da linguagem Python ou do framework Django para 
ser compreendido, apesar de já conter algumas linhas em Python.
<h2>Nova Tarefa</h2>
<form method="POST" class="task-form">
<button type="submit" class="save btn btn-default">Criar</
button>
</form>
A tag <form> é utilizada com o método POST e possui um botão com 
estilos do Bootstrap para criar a nova tarefa. O código dos campos da tarefa 
não precisa ser escrito, já que os componentes serão criados automaticamente 
com o auxílio do framework Django e do código Python, que será adicionado 
a este arquivo nos tópicos a seguir.
Além disso, é necessário criar uma função no arquivo views.py, que 
recebe uma requisição como parâmetro para renderizar os templates dos 
arquivos HTML, conforme apresentado a seguir.
Arquivo views.py:
from .forms import TaskForm
def task _ new(request):
 form = TaskForm()
 return render(request, 'task _ edit.html', {'form': form})
A classe TaskForm() é atribuída à variável form para criar um novo 
formulário de tarefas e, assim, passá-lo para o template.
Implementação do arquivo forms.py
Para que o formulário seja criado automaticamente, além dos arquivos HTML 
é necessário implementar os formulários e os modelos da aplicação, ambos em 
Python, nos arquivos forms.py e models.py, respectivamente. Além disso, 
é necessário adicionar as novas rotas no arquivo urls.py para que o Django 
reconheça quais arquivos deve carregar e apresentar na área de conteúdo do 
arquivo base. Os três arquivos são apresentados a seguir.
Formulários com Django4
Arquivo models.py:
from django.db import models
class Task(models.Model):
 title = models.CharField(max _ length=20, null=False)
 description = models.TextField()
A classe tarefa (Task) possui duas propriedades, uma para o título e outra 
para o texto da descrição. A primeira é configurada como um campo obrigatório 
de texto, de no máximo 20 caracteres, e a segunda, como um campo de texto 
não obrigatório, sem limite fixo.
 Arquivo forms.py:
from django import forms
from .models import Task
class TaskForm(forms.ModelForm):
 class Meta:
 model = Task
 fields = ('title', 'description',)
Seria possível criar o formulário inteiro desde o seu princípio, mas neste 
exemplo utiliza-se o ModelForm, que usa o modelo para salvar o resultado do 
formulário, como o título e a descrição de cada tarefa. Observe que os valores 
da variável fields possuem o mesmo nome dos parâmetros do modelo Task.
Arquivo urls.py:
from django.urls import path 
from . import views
urlpatterns = [
 path('', views.task _ list, name='task _ list'),
 path('task/<int:pk>/', views.task _ detail, name='task _ detail'),
 path('task/new/', views.task _ new, name='task _ new'),
]
5Formulários com Django
Neste arquivo foram configuradas as rotas possíveis para o usuário navegar 
na aplicação por meio do vetor urlpatterns e dos seus dois caminhos 
(path). A primeira rotapossui o caminho vazio e representa a rota padrão 
da aplicação, que também pode ser substituída por uma barra (/). A segunda 
rota diz respeito ao endereço que apresenta ao detalhe de uma tarefa, em que 
são apresentadas as informações de uma delas sem o formulário. Já a terceira 
se trata da rota do formulário que é criado automaticamente neste capítulo.
Geração automática do formulário
Quando uma aplicação possui muitos formulários e a maioria deles é padrão, 
programar as telas pode ser demorado, cansativo e, de certa forma, repetitivo, 
especialmente se cada formulário possuir múltiplos campos. Como apresentado 
anteriormente, no Django os formulários podem ser criados automaticamente 
a partir das classes modelo e suas definições, sem haver necessidade de se 
escrever todo o HTML.
De acordo com a documentação oficial do projeto Django, se a aplicação 
precisar de banco de dados, possivelmente ela terá formulários que mapeiam 
esses modelos e suas propriedades, que definem os campos do modelo para 
automatizar o processo por meio da criação das classes de formulário a partir 
dos modelos Django.
O controle da classe de formulário e a renderização dos componentes são 
feitos pela camada view do Django (neste caso, com o arquivo views.py), 
suas propriedades e seus métodos, conforme apresentado a seguir.
from .forms import TaskForm
def task _ new(request):
 form = TaskForm()
 return render(request, 'task _ edit.html', {'form': form})
Com o TaskForm() é possível instanciar um novo formulário de tarefas 
na variável form e passá-lo para o template como terceiro parâmetro do 
método render(). 
Formulários com Django6
Além disso, para o Django gerenciar o que será renderizado e seu local, é 
necessário adicionar o código Python no arquivo task_edit.html para 
informar qual é o arquivo base com {% extends 'base.html' %} e 
qual é o bloco de conteúdo com início em {% block content %} e fim 
em {% endblock %}, conforme apresentado a seguir.
{% extends 'base.html' %}
{% block content %}
 <h2>Nova Tarefa</h2>
 <form method="POST" class="task-form">{% csrf _ token %}
 {{ form.as _ p }}
<button type="submit" class="save btn btn-default">Save</
button>
 </form>
{% endblock %}
Para exibir o formulário, utiliza-se o {{ form.as_p }} e, para a 
segurança, o {% csrf_token %}. Entretanto, desta forma os dados não 
persistem, ou seja, não são armazenados no banco de dados. Para isso é 
necessário verificar se o formulário é válido com o método is_valid() 
e salvá-lo com o método form.save() na classe de controle views.py, 
conforme apresentado a seguir. 
from django.shortcuts import redirect
def task _ new(request):
 if request.method == "POST":
 form = TaskForm(request.POST)
 if form.is _ valid():
 task = form.save(commit=False)
 task.save()
 return redirect('task _ detail', pk=task.pk)
 else:
 form = TaskForm()
 return render(request, 'task _ edit.html', {'form': form})
7Formulários com Django
Com o código anterior é possível guardar os dados digitados pelo usuário, 
quando se trata de uma tarefa nova, além de redirecionar para a página de 
detalhe da tarefa com o objeto tarefa criado por conta do redirect('task_
detail', pk=task.pk, caso o método da requisição seja POST, de 
forma que o identificador do objeto criado é passado para o atributo pk, que 
representa o campo de chave primária (primary key).
Para que seja possível editar uma tarefa no formulário, é necessário adicio-
nar o método task_edit, bastante parecido com o método de nova tarefa, 
também na classe views.py. Observe o código apresentado a seguir.
def task _ edit(request, pk):
 task = get _ object _ or _ 404(Task, pk=pk) 
 if request.method == "POST":
 form = TaskForm(request.POST, instance=task) 
 if form.is _ valid():
 task = form.save(commit=False)
 task.save()
 return redirect('task _ detail', pk=task.pk)
 else:
 form = TaskForm(instance=task) 
 return render(request, 'task _ edit.html', {'form': form})
Neste método, a variável task recebe o resultado do método get_ob-
ject_or_404(), que recebe Task como primeiro parâmetro e pk como 
segundo, que é a chave primária do objeto. Esse resultado pode ser o objeto 
em questão ou o erro 404, caso não encontre. Em seguida, a variável task é 
utilizada na criação do formulário de edição como referência para a instância 
do objeto do formulário.
Caso seja necessário verificar se o usuário está autenticado, é possível 
utilizar o comando a seguir entre as tags que devem aparecer se o usuário 
tiver permissão para visualizar.
{% if user.is _ authenticated %} ... {% endif %}
Formulários com Django8
Caso o desenvolvedor também queira armazenar quem foi o usuário que 
criou a tarefa, é necessário adicionar a propriedade a seguir no arquivo mo-
dels.py, especificamente, na classe Task.
author = models.ForeignKey(settings.AUTH _ USER _ MODEL, on _
delete=models.CASCADE)
Além disso, para salvar o usuário na submissão do formulário, é necessário 
adicionar a linha de código a seguir, que recupera o usuário que fez a requi-
sição nos métodos task_new() e task_edit() do arquivo views.py, 
dentro do bloco do condicional form.is_valid(),característica comum 
tanto à criação de uma nova tarefa quanto à edição de uma tarefa existente.
if form.is _ valid():
task = form.save(commit=False)
task.author = request.user
task.save()
return redirect('task _ detail', pk=task.pk)
Desta forma, é possível criar a parte do projeto que gera formulários au-
tomaticamente para os primeiros cadastros na base de dados, populando o 
banco antecipadamente, como no caso de colaboradores cadastrando produtos e 
serviços enquanto as outras partes do sistema ainda estão em desenvolvimento, 
possibilitando que tanto o framework quanto os processos de desenvolvimento 
do negócio em que o aplicativo está inserido sejam ágeis.
Neste capítulo foi apresentada a criação de um formulário automático com o Django. 
No entanto, é possível que você queira criar um aplicativo em React ou React Native e 
precise conectar o servidor ao projeto mobile. Você pode utilizar o Django Rest para 
criar a API, como é possível observar nos links a seguir. 
https://qrgo.page.link/AZMfX
https://qrgo.page.link/QFaFZ
9Formulários com Django
PINHEIRO, F. Criando formulários automaticamente com Django. TreinaWeb, São Paulo, 
16 jan. 2019. Disponível em: https://www.treinaweb.com.br/blog/criando-formularios-
-automaticamente-com-django/. Acesso em: 17 nov. 2019.
Leituras recomendadas
CREATING forms from models. Django Software Foundation, [S. l.], 2019. Disponível 
em: https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/. Acesso em: 
17 nov. 2019.
DJANGO Web Framework (Python). MDN Web Docs, Mountain View, 2019. Disponível 
em: https://developer.mozilla.org/pt-BR/docs/Learn/Server-side/Django. Acesso em: 
17 nov. 2019.
FORMS. Bootstrap Team, [S. l.], [2019]. Disponível em: https://getbootstrap.com/docs/4.0/
components/forms/. Acesso em: 17 nov. 2019.
FORMULÁRIOS do Django. Django Girls Foundation, London, [2019]. Disponível em: 
https://tutorial.djangogirls.org/pt/django_forms/. Acesso em: 17 nov. 2019.
FULL Stack React & Django [1] - Basic REST API. [S. l.: S. n.], 2019. 1 vídeo (22 min 41 s). 
Publicado pelo canal Traversy Media. Disponível em: https://youtu.be/Uyei2iDA4Hs. 
Acesso em: 17 nov. 2019.
GUIA de Python com Django. DevMedia, Rio de Janeiro, 2019. Disponível em: https://
www.devmedia.com.br/guia/programador-python-com-django/38791. Acesso em: 
17 nov. 2019.
TUTORIAL Django Girls. Django Girls Foundation, London, [2019]. Disponível em: https://
tutorial.djangogirls.org/pt/. Acesso em: 17 nov. 2019.
TUTORIAL: Django REST with React (Django 2.0 and a sprinkle of testing). Valentino 
Gagliardi, [S. l.], 12 Mar. 2018. Disponível em: https://www.valentinog.com/blog/drf/. 
Acesso em: 17 nov. 2019.
ReferênciaOs links para sites da Web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a 
rede é extremamente dinâmica; suas páginas estão constantemente mudando de 
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade 
sobre qualidade, precisão ou integralidade das informações referidas em tais links.
Formulários com Django10

Continue navegando