Introdução às vistas

Concluído

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

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

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

Vamos começar nossa exploração discutindo a criação manual de visualizações e a configuração dos URLconfs apropriados. Um 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 parte do código que escrevemos à mão.

Criar uma vista

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

  • Execute a tarefa que o usuário solicitou.
  • Retornar um modelo com os dados apropriados para exibir ao 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ê irá registrá-los ao criar a rota, sobre a qual falaremos mais adiante na unidade.

Carregar dados

Você pode usar o Django ORM para carregar todos os dados que você precisa do banco de dados registrado.

O projeto que estamos construindo 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, usaríamos Shelter.objects.all(). Podemos carregar um abrigo individual usando Shelter.objects.get(pk=1).

Nota

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

404 erros

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

O Django fornece atalhos para tentar carregar dados:

  • get_object_or_404 e get_list_or_404: Carrega um objeto por uma chave primária ou retorna um 404 para o usuário se um objeto não for encontrado.
  • get_list_or_404: Executa a mesma operação que o outro atalho, exceto que aceita um parâmetro de filtro.

Vamos usar get_object_or_404 no nosso exercício.

Renderizando o modelo

O mecanismo de modelagem do Django pegará o modelo HTML que construímos, combiná-lo-á com quaisquer dados que fornecermos e emitirá o HTML para o navegador. A função auxiliar para executar esta tarefa é render.

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

Para passar dados para o modelo, forneça render um context objeto de dicionário. O context objeto contém um conjunto de pares chave/valor, onde cada chave se torna uma variável no modelo.

Exemplo

Para criar uma exibição para exibir todos os abrigos, você pode 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 todos os frameworks da Web usam caminhos para processar solicitações de usuários. Os caminhos convertem a parte da URL após o nome do domínio e antes da cadeia de caracteres de consulta (que vem após o ponto de interrogação) em uma chamada de função.

Uma chamada para 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 um ID de 1. Você registra caminhos no Django criando um URLconf.

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

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

Também podemos criar pastas virtuais para pedidos específicos. Por exemplo, se quiséssemos listar todos os abrigos se alguém solicitar /abrigos, poderíamos usar o seguinte comando:

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

Parâmetros de URL

É uma prática comum passar parâmetros para um aplicativo como parte da URL, como um ID ou um nome. Como esses valores mudarão, não queremos codificá-los em nosso caminho. No Django, você pode especificar um parâmetro usando uma sintaxe especial. Nessa sintaxe, você pode indicar o tipo de dados esperados, como um inteiro e um nome.

Por exemplo, para criar um caminho para alguém solicitar um abrigo específico por um ID, gostaríamos de um parâmetro do tipo integer. (A razão é que nossa chave primária é um inteiro.) Podemos então fornecer o nome que queremos usar para a variável, que será então passado como um parâmetro para a função view. A sintaxe para identificar esse parâmetro seria <int:pk>. Observe a declaração de tipo, os dois pontos e, em seguida, o nome da variável.

O caminho completo pode ter esta aparência:

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

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

def shelter_detail(request, pk):
    # code

A pk parte da assinatura do caminho é passada como shelter_detail um parâmetro, como se estivéssemos chamando-a como uma função Python normal.