Introdução às exibições

Concluído

Em programação, uma exibição é normalmente um componente que exibe informações para o usuário. As tarefas que uma exibição executa podem variar dependendo da estrutura e das convenções, incluindo a responsabilidade de carregar dados.

No Django, uma exibição normalmente é responsável por:

  • Validar a solicitação de um usuário.
  • Carregar ou modificar os dados apropriados.
  • Retornar um modelo HTML com as informações para o usuário.

Vamos começar nossa exploração discutindo como criar exibições manualmente e configurar as URLconfs apropriadas. Uma URLconf é uma lista de caminhos que indicam o padrão a ser correspondido, a função a ser chamada e, opcionalmente, um nome. Em uma unidade posterior, veremos como o Django pode lidar automaticamente com alguns dos códigos que escrevemos manualmente.

Criar uma exibição

Para criar uma exibição do zero no Django, você normalmente cria uma função. Em geral, a função contém o código apropriado para:

  • Executar a tarefa solicitada pelo usuário.
  • Retornar um modelo com os dados apropriados a serem exibidos para o usuário.

As funções de exibição sempre usam, pelo menos, um parâmetro chamado request, que representa a solicitação do usuário. Você pode fornecer mais parâmetros conforme necessário se estiver esperando mais informações do usuário na URL, como o nome ou a ID de um item. Você os registrará quando criar a rota, sobre a qual falaremos mais adiante na unidade.

Carregar dados

Você pode usar o ORM do Django para carregar todos os dados necessários do banco de dados registrado.

O projeto que estamos criando tem dois modelos, Shelter e Dog. Podemos carregar todos os objetos ou executar outras consultas usando os modelos que criamos. Para carregar todos os abrigos, por exemplo, usaremos Shelter.objects.all(). Podemos carregar um abrigo individual usando Shelter.objects.get(pk=1).

Observação

pk é um atalho para a chave primária. Você poderá usar id e ter o mesmo resultado, mas o uso de pk garantirá que o comando funcionará se você tiver alterado a propriedade que representa a chave primária para outro nome.

Erros 404

Um erro 404 em aplicativos Web significa "não encontrado". Como melhor prática, você deverá retornar um 404 sempre que uma solicitação for feita para um objeto que não existe.

O Django fornece atalhos para tentar carregar os dados:

  • get_object_or_404 e get_list_or_404: carrega um objeto por uma chave primária ou retorna um erro 404 para o usuário se um objeto não é encontrado.
  • get_list_or_404: executa a mesma operação do outro atalho, com a exceção de que ele aceita um parâmetro de filtro.

Usaremos get_object_or_404 em nosso exercício.

Como renderizar o modelo

O mecanismo de modelagem do Django usará o modelo HTML que criamos, combinará o modelo com todos os dados fornecidos e emitirá o HTML para o navegador. A função auxiliar para executar essa tarefa é render.

A função render precisa do objeto que representa a solicitação, que é o parâmetro request que realçamos anteriormente. O nome do modelo também é transmitido, normalmente um arquivo HTML que residirá em uma pasta chamada templates.

Para transmitir dados para o modelo, você fornece a render um objeto de dicionário context. O objeto context contém um conjunto de pares chave/valor, o local em que cada chave se torna uma variável no modelo.

Exemplo

Para criar uma exibição para ver todos os abrigos, você poderá usar o seguinte código:

def shelter_list(request):
    shelters = Shelter.objects.all()
    context = { 'shelters': shelters }
    return render(request, 'shelter_list.html', context)

Registrar um caminho

Quase todas as estruturas da Web usam caminhos para processar as solicitações do usuário. Os caminhos convertem a parte da URL após o nome do domínio e antes da cadeia de consulta (que vem após o ponto de interrogação) em uma chamada de função.

Uma chamada a www.contoso.com/shelters pode chamar uma função para listar todos os abrigos, enquanto www.contoso.com/shelters/1 pode chamar uma função para exibir um abrigo com a ID 1. Os caminhos no Django são registrados pela criação de uma URLconf.

Digamos que tenhamos um módulo chamado views, que é uma convenção do Django. Podemos rotear o tráfego de índice em que um caminho não é especificado (como www.contoso.com) para uma função em views chamada index e dar a ele um nome chamado index, usando o seguinte caminho:

path('', views.index, 'index')

Também podemos criar pastas virtuais para solicitações específicas. Por exemplo, se quisermos listar todos os abrigos quando alguém solicitar /abrigos, poderemos usar o seguinte comando:

path('shelters', views.shelter_list, 'shelter_list')

Parâmetros de URL

É uma prática comum transmitir parâmetros para um aplicativo como parte da URL, como uma ID ou um nome. Como esses valores serão alterados, não queremos embuti-los em código no caminho. No Django, você pode especificar um parâmetro usando uma sintaxe especial. Nessa sintaxe, você pode indicar o tipo de dados que está esperando, como um inteiro, e um nome.

Por exemplo, para criar um caminho para alguém solicitar um abrigo específico por uma ID, o ideal é usar um parâmetro do tipo integer. (O motivo é que a chave primária é um inteiro.) Em seguida, podemos fornecer o nome que queremos usar para a variável, que será transmitida como um parâmetro para a função de exibição. A sintaxe para identificar esse parâmetro será <int:pk>. Observe a declaração de tipo, os dois-pontos e o nome da variável.

O caminho completo pode ter a seguinte aparência:

path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')

A função de exibição associada terá a seguinte assinatura:

def shelter_detail(request, pk):
    # code

A parte pk da assinatura de caminho é transmitida para shelter_detail como um parâmetro, da mesma forma como se tivéssemos chamando-a como uma função normal do Python.