Compartilhar via


Gerar um aplicativo Django e PostgreSQL e implantar no Azure

Este artigo orienta você sobre como interagir com o GitHub Copilot para gerar um aplicativo Web Django local que executa operações CRUD em um banco de dados PostgreSQL. Em seguida, ele orienta como interagir com o GitHub Copilot para Azure para implantar o aplicativo Web e o banco de dados no Serviço de Aplicativo do Azure e no Servidor Flexível do PostgreSQL do Azure (juntamente com vários serviços do Azure com suporte).

O aplicativo específico que você cria é um aplicativo trivial de gerenciamento de contatos que apresenta operações CRUD com uma arquitetura de estilo de lista de detalhes.

Observação

Usar um LLM (Modelo de Linguagem Grande) para gerar um aplicativo pode produzir resultados inconsistentes. Seus resultados dependem do modelo llm, suas instruções e muito mais. O foco deste guia é ajudá-lo a entender como obter melhores resultados. No entanto, cada vez que você passa por este exemplo, você obtém (potencialmente) resultados dramaticamente diferentes.

Pré-requisitos

Importante

O GitHub Copilot é uma assinatura separada gerenciada pelo GitHub. Para obter perguntas sobre assinaturas e suporte do GitHub Copilot, consulte Introdução a um plano do GitHub Copilot.

Preparar a sessão de chat

  1. No Visual Studio Code, use o botão Alternar Chat na barra de título ou selecione Ctrl+Alt+i para abrir a Janela de Chat. Use o ícone Novo Chat para criar uma nova sessão de chat.

  2. Na área de chat, selecione Agent o modo. No momento desta escrita, Claude Sonnet 4 produz os melhores resultados. Use o melhor modelo disponível para geração de código.

Validar sua configuração

Verifique se as ferramentas da CLI e o Visual Studio Code estão atualizados, configurados corretamente e funcionando corretamente para melhorar seus resultados.

  1. Em um novo chat, insira o seguinte prompt:

    
    I want to create a new Django website that stores data in PostgreSQL. Then, I'll want
    to deploy that new website to Azure. Do I have everything installed on my local 
    computer that you will need to perform these tasks?
    
    

    O GitHub Copilot pedirá permissão para executar uma série de verificações de linha de comando para garantir que você tenha as ferramentas, bem como as versões mais atualizadas dessas ferramentas, instaladas.

  2. No terminal, atualize a CLI do Azure com o comando az --upgrade.

  3. No terminal, instale a extensão sem senha do conector de serviço para a CLI do Azure com o comando az extension add --name serviceconnector-passwordless --upgrade

  4. No Visual Studio Code, defina o terminal padrão como Git Bash. Vá para Configurações de Preferências > de Arquivo > e, em seguida, em "Configurações de pesquisa", digite "Perfil Padrão: Windows" e selecione "Git Bash". Talvez seja necessário reiniciar o Visual Studio Code para que essa configuração entre em vigor.

    Observação

    O uso do Git Bash não é estritamente necessário, mas no momento desta gravação ele produz os melhores resultados.

  5. No Visual Studio Code, use a extensão PostgreSQL para Visual Studio Code (versão prévia) e navegue até o contacts banco de dados.

  6. No Visual Studio Code, use a extensão do Azure e verifique se você está conectado à sua conta e assinatura do Azure. Ao abrir a extensão do Azure na barra lateral primária, você deverá ser capaz de exibir suas assinaturas e recursos existentes.

  7. Crie uma nova pasta para seus novos arquivos de aplicativo e abra-a no Visual Studio Code como seu workspace.

Configurar o banco de dados local

Embora o GitHub Copilot seja capaz de executar praticamente qualquer tarefa de desenvolvimento de aplicativos que os desenvolvedores normalmente executam, você obterá os melhores resultados se executar algumas tarefas em etapas menores. Para melhorar os resultados, crie o banco de dados e configure a autenticação e a autorização antes de trabalhar com o GitHub Copilot.

  1. Crie um novo chat e use o seguinte prompt:

    
    On my PostgreSQL server localhost, please create a new database named 'contacts'.
    
    Then create a new user <db-username> with password `<password>` and give that 
    user full rights (create tables and other db objects, CRUD data) to the new 
    contacts database.
    
    Please do the work, and only prompt me when you are unable to do it yourself.
    
    

    Substitua <db-username> e <password> por seu nome de usuário e senha de banco de dados desejados, respectivamente.

  2. Em computadores Windows, a melhor prática de segurança recomendada é armazenar o nome de usuário e a senha do banco de dados em um arquivo local:

    %APPDATA%\postgresql\pgpass.conf

    Isso normalmente resolverá o seguinte local em seu disco rígido:

    c:\Users\<username>\AppSettings\Roaming\postgresql\pgpass.conf

    Substitua pelo <username> nome de usuário do Windows.

    O arquivo deve usar o seguinte formato:

    localhost:5432:<database-name>:<database-user>:<password>
    

    Isso pressupõe que você esteja trabalhando com uma instância do PostgreSQL em seu computador local e que ela esteja hospedada na porta padrão (5432).

    Substitua <database-name> e substitua contacts e <db-username> substitua pelas credenciais usadas na etapa anterior.<password>

    Para obter mais informações sobre o arquivo, consulte a pgpass.confdocumentação do PostgreSQL.

  3. Adicione o caminho ao pgpass.conf arquivo em sua variável de ambiente PATH.

  4. Teste a conexão para garantir que ela funcione. Use a CLI psql para testá-la com o seguinte comando:

    psql -h localhost -U <db-username> -d contacts
    

    Substitua <db-username> pelo segmento de nome de usuário do banco de dados no pgpass.conf arquivo.

    Se não pgpass.conf estiver configurado corretamente, você verá um prompt para digitar sua senha.

Gerar um aplicativo usando o GitHub Copilot

Primeiro, você fornece instruções e diretrizes sobre como criar e testar o aplicativo em seu computador local.

  1. No Visual Studio Code, use o botão Alternar Chat na barra de título para abrir a Janela de Chat. Use o ícone Novo Chat para criar uma nova sessão de chat.

  2. Na área de chat, selecione Agent o modo. No momento desta escrita, Claude Sonnet 4 produz os melhores resultados. Use o melhor modelo disponível para geração de código.

  3. Use o seguinte prompt para iniciar a geração de aplicativos:

    
    I want you to create a simple Contact Manager application using Django and PostgreSQL. 
    
    This should be a CRUD application, so create web pages that display a list of 
    contacts, view details, add a new contact, edit or delete a contact. Each Contact 
    is comprised of a contact's Name, Address, and Phone number. Since this is a 
    Python / Django project please make sure to work inside of a virtual environment (venv). 
    I've already created a PostgreSQL database at `localhost` named `contacts`. There are 
    no tables yet. For local development in PostgreSQL, I'm using a `pgpass.conf` file 
    and I have tested that it works. Prefer Git Bash in the terminal. Beyond that, if there's 
    anything I need to do, please include instructions. But I want you to do as much as 
    you can on your own.
    
    

    O prompt tem os seguintes recursos:

    • O tipo de aplicativo que você deseja criar. Nesse caso, um aplicativo de gerenciamento de contatos.
    • As tecnologias a serem usadas. Nesse caso, Django e PostgreSQL.
    • A arquitetura do site que você deseja gerar. Nesse caso, um aplicativo de estilo CRUD que apresenta uma página que lista todos os contatos e permite que você faça uma busca detalhada em um contato específico.
    • Mais detalhes sobre o domínio do problema. Nesse caso, você fornece os campos de dados que deseja que o aplicativo gerencie, incluindo o nome, o endereço e o número de telefone do contato.
    • Instruções específicas sobre o banco de dados. Nesse caso, você instrui o GitHub Copilot a usar um banco de dados específico que você já criou, fornece o estado do banco de dados e como interagir
    • Instruções específicas sobre o ambiente. Nesse caso, você o instrui a usar o Git Bash. Você também informa que deseja que o trabalho seja executado em um ambiente python (venv), que é uma prática recomendada. O GitHub Copilot pode escolher essas opções por conta própria, mas afirmar explicitamente que o processo funciona sem problemas.
    • Expectativas explícitas de que você deseja que ele faça o máximo de trabalho por conta própria possível. Caso contrário, o GitHub Copilot poderá fornecer instruções para você tomar.
    • Expectativas explícitas para instruções/contexto. Se precisar que você execute outras ações, defina a expectativa de que precisa dela para ajudá-lo fornecendo instruções e diretrizes.

    Importante

    Quando o GitHub Copilot usa o terminal para criar um ambiente virtual, o Visual Studio Code detecta e venv exibe uma caixa de diálogo perguntando se você deseja usá-lo. Ignore essa caixa de diálogo. Ele vai embora. Permitir que o GitHub Copilot use o terminal exclusivamente para esta operação.

    O GitHub Copilot usa o terminal interno e o ambiente do Visual Studio Code para:

    • Criar um ambiente virtual do Python
    • Instalar bibliotecas e outras dependências
    • Gerar arquivos de código
    • Gerar tabelas de banco de dados
    • Gerar arquivos readme para obter mais instruções
    • Criar dados de teste
    • Iniciar um servidor Web local
    • Testar o site (usando o Simple Browser ou curl)

    Devido à forma como as LLMs geram código, os comandos que ele usa e o que ele produz são diferentes a cada vez.

Implantar no Azure com o GitHub Copilot para Azure

Depois que o GitHub Copilot gerar o site localmente, você criará um prompt solicitando que o GitHub Copilot faça alterações no site em preparação para implantação e, em seguida, execute a implantação. A extensão do GitHub Copilot para Azure manipula essa solicitação criando arquivos Bicep e, em seguida, executando esses arquivos usando a azd CLI.

Use o prompt a seguir... você pode copiar para o Bloco de Notas e alterar qualquer valor entre colchetes, como <resource-group-name> e <region-name> depois copiar e colar no chat do GitHub Copilot:


Please help me deploy this Django app to Azure. 

First, create and use a Resource Group named "<resource-group-name>" in the "<region-name>" region.

Second, create an Azure App Service for the Django app in the new "<resource-group-name>" in the "<region-name>" region.

Third, create a new Azure Database for PostgreSQL flexible server named "<server-name>" in a resource group named "<resource-group-name>" in my subscription "<subscription-id>". Use my current account ("<account-id>") as the Microsoft Entra administrator. For the PostgreSQL "Administrator login", use "<azure-database-username>" and password "<azure-database-password>". Use a "development" class database configuration in the "<region-name>" region. Create a new database named "contact_manager_db" and migrate all tables and data from the local version of "contact_manager_db". The local database uses the username "<local-database-username>" and password "<local-database-password>". Add my IP address as a firewall rule, allow public access to this resource through the internet using a public IP address, and allow public access from any Azure service within Azure to this server.

Fourth, use Service Connector (and any other services you need to make this configuration work successfully) to connect the web app to the database. You may need to modify the application code to accommodate Service Connector. Also, please ensure a secure connection between the Azure App Service web site and the Azure PostgreSQL Flexible Server.

Please choose the least expensive options.  

If you are prompted for an environment, use the name "contacts-env". Configure my firewall to allow my IP address. Beyond that, if there's anything 
I need to do, please include instructions. But I want you to do as much as you can on your own.

Before you start: 

- Do you have any questions that need to be clarified? 
- Please create a plan for deployment in the form of a TODO list, and then update the TODO list as you progress. Do not start until I have a chance to review your plan and tell you to proceed.

O prompt tem os seguintes recursos:

  • Serviços específicos que você deseja usar. Nesse caso, você informa que deseja usar o Serviço de Aplicativo do Azure, o Servidor Flexível do PostgreSQL do Azure, o Service Connector. Você também dá a ele a instrução para "fazer o que mais você precisa fazer" para garantir que funcione.
  • Opções de serviço específicas. Nesse caso, você indica que deseja usar a opção mais barata possível para cada serviço.
  • Dica para as próximas etapas prováveis. Nesse caso, você sugere que alguma modificação de código é necessária para usar o Service Connector.
  • Antecipe decisões antecipadamente. Nesse caso, você fornece a resposta para as configurações necessárias, como um nome de ambiente para azd,
  • Expectativas explícitas de que você quer que ele faça tanto trabalho por conta própria. Caso contrário, ele poderá fornecer instruções para você tomar.
  • Expectativas explícitas para instruções/contexto. Defina a expectativa de que você precisa de ajuda e orientação quando ele solicitar que você tome medidas.
  • Pergunta se algum esclarecimento é necessário. Isso geralmente apresenta possíveis problemas, como casos de borda ou instruções pouco claras.
  • Solicita um plano com uma lista TODO. Fornece confiança de que o GitHub Copilot para Azure entende a atribuição e planeja executá-la como você pretendia.

O GitHub Copilot usa o terminal interno e o ambiente do Visual Studio Code para:

  • Atualizar os arquivos de código para acomodar o Service Connector
  • Gerar arquivos Bicep
  • Executar a azd CLI
  • Testar a implantação
  • Se necessário, depure a implantação usando registros ou outro tipo de saída.

Interagir com o GitHub Copilot

O GitHub Copilot requer sua entrada antes de executar muitas tarefas. Uma pausa para entrada é a oportunidade de direcionar o GitHub Copilot para o curso correto, a fim de evitar erros ou personalizar a saída gerada de acordo com suas preferências.

Enquanto está funcionando, você pode assistir e concordar com a maioria das perguntas que ele faz usando o Continue botão.

Importante

Se você receber resultados inesperados, reinicie usando uma nova sessão de chat.

Ocasionalmente, você é obrigado a fornecer entrada. Há alguns momentos distintos em que você é solicitado a entrar:

  • Credenciais do usuário – se a operação atual no terminal exigir um nome de usuário ou senha, você será solicitado a obter essas informações.
  • Momento da decisão – ocasionalmente, o GitHub Copilot oferece várias opções em uma lista e pergunta qual você prefere.
  • A Paleta de Comandos – Ocasionalmente, o GitHub Copilot usa os recursos de uma extensão e as opções são exibidas na Paleta de Comandos. Depois de fazer as seleções adequadas, o GitHub Copilot continuará.
  • Logon interativo – a CLI e azd a CLI do Azure precisam que você se autentique e inicie um dos vários mecanismos de autenticação.

Testando e solicitando alterações

Quando o GitHub Copilot é concluído, é possível que ele considere o site completo e funcional. No entanto, seu teste pode descobrir problemas ou recursos inesperados/indesejáveis do aplicativo.

Use prompts que descrevem o problema com o máximo de detalhes possível. Por exemplo, se o aplicativo não estiver funcionando, forneça o máximo de informações possível, incluindo a mensagem de erro exata e o resultado esperado.

Interrompendo o fluxo

Ocasionalmente, você pode notar que o GitHub Copilot está preso em um loop tentando executar as mesmas tarefas repetidamente ou está preso em um processo que nunca retorna. Por exemplo, ao diagnosticar problemas com o site, o GitHub Copilot pode querer executar um comando como:

az webapp log tail

Quando o GitHub Copilot está preso, você pode interromper o GitHub Copilot de uma das várias maneiras:

  • Ctrl+C
  • Usar o botão pausar no chat
  • Encerrar a sessão de chat e iniciar um novo chat

Importante

O término da sessão de chat destrói todo o contexto compilado durante a sessão, o que pode ou não ser desejável.

Para fornecer contexto ao que acabou de acontecer e empurrá-lo para uma possível solução, você pode adicionar um prompt imediatamente após interromper o GitHub Copilot, como:

You were just getting the logs from Azure App Service but it did not return 
so you got stuck. Try to interrupt after a minute once you get what you need 
from the logs.

Próximas etapas