Parte 5: Criando views#
Uma view é um “tipo” de página Web em sua aplicação Django que em geral serve a uma função específica e tem um template específico. Por exemplo, em nossa aplicação de notas, nós teremos as seguintes views:
- página de “índice” de notas - exibe todos as notas cadastradas.
- página de detalhes da nota - apresenta o título e o texto da nota.
No Django, web pages e outros conteúdos são entregues através de views. Cada view é definida por uma função em Python (ou método, no caso de class-based views). O Django vai escolher a view ao examinar a URL que foi requisitada - para ser mais preciso, a parte da URL depois do nome do domínio.
Alterando as views e adicionando os paths#
Até o momento, o único comportamento codificado no arquivo notes/views.py
é este:
from django.http import HttpResponse
def index(request):
return HttpResponse("Olá mundo! Este é o app notes de DevLife do Insper.")
Alterando o arquivo de views
Vamos alterar o arquivo notes/views.py
adicionando uma função para a página de índice e outra
para a página de detalhes?
Adicione as funções abaixo no arquivo notes/views.py
:
from django.http import HttpResponse
from notes.models import Note
from .models import Note
def index(request):
notes_list = Note.objects.order_by('id')
output = '<br> '.join([str(q) for q in notes_list])
return HttpResponse(output)
def detail(request, note_id):
return HttpResponse("Você está vendo a nota %s." % note_id)
Alterando o arquivo de rotas
Também não esqueça de adicionar as rotas em notes/urls.py
:
Quando alguém requisita uma página do seu site Web, por exemplo “/notes/34/”, o Django irá carregar o módulo Python mysite.urls para o qual ele aponta devido a configuração em ROOT_URLCONF. Ele encontra a variável nominada urlpatterns e passa pelas descrições na mesma ordem. Depois de encontrar a combinação 'notes/', ele reparte o texto encontrado ("notes/") e envia o restante – "34/" – para o URLconf notes.urls’ para processamento posterior. Lá ele encontra '
Cada view é responsável por fazer uma das duas coisas: devolver um objeto HttpResponse contendo o conteúdo para a página requisitada ou levantar uma exceção como Http404. O resto é com você.
Sua view pode ler registros do banco de dados, ou não. Ela pode usar um sistema de templates como o do Django ou outro sistema de templates Python de terceiros. A view pode gerar um arquivo PDF, saída em um XML, criar um arquivo ZIP sob demanda, qualquer coisa que você quiser,usando qualquer biblioteca Python que você quiser.
Importante
Tudo que o Django espera é que a view devolva um HttpResponse ou uma exceção.
O que temos até agora?#
A figura abaixo ilustra bem o que temos até o momento:
Só que esta estrutura tem um problema! A lógica da página está codificada na view. Se você quiser mudar a forma de apresentação de sua página, você terá de editar este código diretamente em Python. Para resolver isto temos que usar o sistema de templates do Django para separar a lógica da função da apresentação da página.
Siga para a próxima parte do handout para entender como trabalhar com templates.