Generování aplikace Django a PostgreSQL a nasazení do Azure

Tento článek vás provede interakcí s GitHub Copilotem a vygeneruje místní webovou aplikaci Django, která provádí operace CRUD v databázi PostgreSQL. Dále vás provede interakcí s GitHub Copilotem pro Azure k nasazení webové aplikace a databáze na flexibilní server Azure App Service a Azure PostgreSQL (spolu s několika podpůrnými službami Azure).

Konkrétní aplikace, kterou vytvoříte, je triviální aplikace pro správu kontaktů, která obsahuje operace CRUD s architekturou stylu seznamu podrobností.

Poznámka:

Použití velkého jazykového modelu (LLM) k vygenerování aplikace může přinést nekonzistentní výsledky. Vaše výsledky závisí na modelu LLM, vašich pokynech a dalších. Cílem tohoto průvodce je pomoct vám pochopit, jak získat lepší výsledky. Pokaždé, když projdete tímto příkladem, ale dostanete (potenciálně) výrazně odlišné výsledky.

Požadavky

Důležité

GitHub Copilot je samostatné předplatné spravované GitHubem. Dotazy týkající se předplatných GitHub Copilot a podpory najdete v tématu Začínáme s plánem GitHub Copilot.

Příprava chatovací relace

  1. V editoru Visual Studio Code použijte tlačítko Přepnout chat v záhlaví nebo stisknutím kláves Ctrl+Alt+i otevřete okno chatu. K vytvoření nové relace chatu použijte ikonu Nový chat.

  2. V oblasti chatu vyberte režim Agent. V době psaní tohoto textu Claude Sonnet 4 přináší nejlepší výsledky. Použijte nejlepší model dostupný pro generování kódu.

Ověření konfigurace

Ujistěte se, že jsou nástroje rozhraní příkazového řádku a Visual Studio Code aktualizované, správně nakonfigurované a správně fungující, aby se zlepšily výsledky.

  1. V novém chatu zadejte následující výzvu:

    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?
    

    GitHub Copilot požádá o oprávnění ke spuštění řady kontrol příkazového řádku, aby se zajistilo, že máte nainstalované nástroje a nejaktuálnější verze těchto nástrojů.

  2. V terminálu aktualizujte Azure CLI příkazem az --upgrade.

  3. V terminálu nainstalujte pomocí příkazu az extension add --name serviceconnector-passwordless --upgrade rozšíření Service Connector Passwordless pro Azure CLI

  4. V editoru Visual Studio Code nastavte výchozí terminál na Git Bash. Přejděte do Nastavení předvoleb > souborů > a pak v části Nastavení hledání zadejte Výchozí profil: Windows a vyberte Git Bash. Možná bude potřeba restartovat Visual Studio Code, aby se toto nastavení projevilo.

    Poznámka:

    Použití GitU Bash není nezbytně nutné, ale v době psaní tohoto článku přináší nejlepší výsledky.

  5. V editoru Visual Studio Code použijte rozšíření PostgreSQL for Visual Studio Code (Preview) a přejděte do contacts databáze.

  6. V editoru Visual Studio Code použijte rozšíření Azure a ujistěte se, že jste přihlášeni ke svému účtu a předplatnému Azure. Když otevřete rozšíření Azure na primárním bočním panelu, měli byste být schopni zobrazit stávající předplatná a prostředky.

  7. Vytvořte novou složku pro nové soubory aplikace a otevřete ji v editoru Visual Studio Code jako pracovní prostor.

Nastavení místní databáze

I když GitHub Copilot dokáže provádět prakticky všechny úlohy vývoje aplikací, které vývojáři obvykle provádějí, získáte nejlepší výsledky v případě, že provedete některé úlohy v menších krocích. Pokud chcete zlepšit výsledky, vytvořte databázi a nastavte ověřování a autorizaci před prací s GitHub Copilotem.

  1. Vytvořte nový chat a použijte následující výzvu:

    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.
    

    Nahraďte <db-username> a <password> vámi zvoleným uživatelským jménem a heslem databáze, respektive.

  2. Doporučeným postupem zabezpečení na počítačích s Windows je uložit uživatelské jméno a heslo databáze do místního souboru:

    %APPDATA%\postgresql\pgpass.conf

    Obvykle se tím vyřeší následující umístění na pevném disku:

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

    Nahraďte <username> svým uživatelským jménem ve Windows.

    Soubor by měl používat následující formát:

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

    Předpokládá se, že pracujete s instancí PostgreSQL na místním počítači a že je hostovaná na výchozím portu (5432).

    Nahraďte <database-name> textem contacts a <db-username> a <password> nahraďte přihlašovacími údaji, které jste použili v předchozím kroku.

    Další informace o souboru najdete v pgpass.confdokumentaci k PostgreSQL.

  3. Přidejte cestu k pgpass.conf souboru do proměnné prostředí PATH.

  4. Otestujte připojení, abyste měli jistotu, že funguje. Pomocí rozhraní příkazového řádku psql ho otestujte pomocí následujícího příkazu:

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

    Nahraďte <db-username> segmentem uživatelského jména databáze v pgpass.conf souboru.

    pgpass.conf Pokud není správně nastavená, zobrazí se výzva k zadání hesla.

Generování aplikace pomocí GitHub Copilotu

Nejprve poskytnete pokyny a návod pro sestavení a otestování aplikace na svém počítači.

  1. V editoru Visual Studio Code otevřete okno chatu pomocí tlačítka Přepnout chat v záhlaví. K vytvoření nové relace chatu použijte ikonu Nový chat.

  2. V oblasti chatu vyberte režim Agent. V době psaní tohoto textu Claude Sonnet 4 přináší nejlepší výsledky. Použijte nejlepší model dostupný pro generování kódu.

  3. K zahájení generování aplikace použijte následující výzvu:

    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.
    

    Výzva obsahuje následující funkce:

    • Typ aplikace, kterou chcete vytvořit. V takovém případě se jedná o aplikaci pro správu kontaktů.
    • Technologie, které se mají použít. V tomto případě Django a PostgreSQL.
    • Architektura webu, kterou chcete vygenerovat. V tomto případě aplikace stylu CRUD, která obsahuje stránku se seznamem všech kontaktů a umožňuje přejít k podrobnostem o konkrétním kontaktu.
    • Další podrobnosti o doméně problému. V takovém případě zadáte pole dat, která má aplikace spravovat, včetně jména, adresy a telefonního čísla kontaktu.
    • Konkrétní pokyny týkající se databáze. V takovém případě dáte GitHubu Copilot pokyn, aby používal konkrétní databázi, kterou jste už vytvořili, zadali stav databáze a postup interakce.
    • Konkrétní pokyny k prostředí. V takovém případě ho dáte pokyn, aby používal Git Bash. Také se dozvíte, že chcete, aby se práce prováděla v prostředí Pythonu (venv), což je osvědčený postup. GitHub Copilot si může tyto možnosti zvolit samostatně, ale výslovně říká, že proces funguje hladce.
    • Jasná očekávání, že chcete, aby samo vykonalo co nejvíce práce. V opačném případě může GitHub Copilot poskytnout pokyny, kterými byste se měli řídit.
    • Explicitní očekávání pro instrukce / kontext. Pokud potřebuje, abyste provedli další akce, dejte jasně najevo, že od něj potřebujete pomoc, tím, že mu poskytnete pokyny a vedení.

    Důležité

    Když GitHub Copilot pomocí terminálu vytvoří nové virtuální prostředí, Visual Studio Code zjistí venv a zobrazí dialogové okno s dotazem, jestli ho chcete použít. Toto dialogové okno ignorujte. Zmizí. Povolit GitHub Copilotu používat terminál výhradně pro tuto operaci.

    GitHub Copilot používá integrovaný terminál a prostředí editoru Visual Studio Code k:

    • Vytvoření virtuálního prostředí Pythonu
    • Instalace knihoven a dalších závislostí
    • Generování souborů kódu
    • Generování databázových tabulek
    • Vygenerujte soubory README s dalšími pokyny
    • Vytvoření testovacích dat
    • Spuštění místního webového serveru
    • Otestování webu (pomocí jednoduchého prohlížeče nebo curl)

    Vzhledem k tomu, jak LLMs generuje kód, příkazy, které používá a co vytváří, se pokaždé liší.

Nasazení do Azure pomocí GitHub Copilotu pro Azure

Jakmile GitHub Copilot vygeneruje web místně, vytvoříte výzvu s žádostí o provedení změn webu GitHub Copilot při přípravě na nasazení a následné provedení nasazení. Rozšíření GitHub Copilot for Azure zpracuje tento požadavek vytvořením souborů Bicep a následným spuštěním těchto souborů pomocí rozhraní příkazového řádku azd.

Použijte následující výzvu... Můžete zkopírovat do Poznámkového bloku a změnit libovolnou hodnotu v hranatých závorkách, jako je <resource-group-name> a <region-name> pak zkopírovat a vložit do GitHub Copilot chatu:

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.

Výzva obsahuje následující funkce:

  • Konkrétní služby, které chcete použít. V tomto případě zjistíte, že chcete použít Azure App Service, flexibilní server Azure PostgreSQL, konektor služby. Také mu poskytnete pokyn k tomu, aby "udělal cokoli jiného, co potřebujete udělat", aby to fungovalo.
  • Konkrétní možnosti služby. V tomto případě označíte, že chcete pro každou službu použít nejnákladnější možnost.
  • Tip na pravděpodobné další kroky. V takovém případě naznačujete, že aby bylo možné použít Service Connector, je nutné provést určitou úpravu kódu.
  • Předvídejte rozhodnutí předem. V tomto případě zadáte odpověď na potřebná nastavení, například název prostředí pro azd,
  • Jasná očekávání, že chcete, aby vykonalo co nejvíce práce samostatně. V opačném případě může uvádět pokyny, kterými byste se měli řídit.
  • Explicitní očekávání pro instrukce / kontext. Nastavte očekávání, že potřebujete pomoc a pokyny, když vás požádá o provedení akce.
  • Ptá se, jestli je potřeba nějaké objasnění. To často odhalí potenciální problémy, jako jsou okrajové případy nebo nejasné pokyny.
  • Požádá o plán se seznamem úkolů. Dává vám jistotu, že GitHub Copilot pro Azure rozumí zadání a plánuje ho splnit podle vašich představ.

GitHub Copilot používá integrovaný terminál a prostředí editoru Visual Studio Code k:

  • Aktualizace souborů kódu tak, aby vyhovovaly konektoru služby
  • Generování souborů Bicep
  • Spusťte rozhraní azd příkazového řádku CLI
  • Otestujte nasazení
  • V případě potřeby můžete ladit nasazení pomocí logů nebo jiného výstupu.

Interakce s GitHub Copilotem

GitHub Copilot vyžaduje váš vstup před prováděním mnoha úloh. Pauza pro zadání je vaší příležitostí nasměrovat GitHub Copilot správným směrem, abyste předešli chybám nebo přizpůsobili vygenerovaný výstup svým preferencím.

Během práce můžete sledovat a odsouhlasit většinu otázek, které vás požádají pomocí Continue tlačítka.

Důležité

Pokud se zobrazí neočekávané výsledky, restartujte ji pomocí nové relace chatu.

Někdy je potřeba zadat vstup. Existuje několik konkrétních situací, kdy budete vyzváni k zadání údajů:

  • Přihlašovací údaje uživatele – Pokud aktuální operace v terminálu vyžaduje uživatelské jméno nebo heslo, zobrazí se výzva k zadání těchto informací.
  • Moment rozhodnutí – GitHub Copilot vám občas nabídne několik možností v seznamu a zeptejte se, kterému dáváte přednost.
  • Paleta příkazů – Někdy gitHub Copilot používá funkce rozšíření a možnosti se zobrazují v paletě příkazů. Jakmile provedete správné výběry, GitHub Copilot pokračuje.
  • Interaktivní přihlášení – Azure CLI a azd CLI vyžadují, abyste se ověřili, a spustí jeden z několika mechanismů ověřování.

Testování a vyžádání změn

Když GitHub Copilot dokončí svou práci, je možné, že daný web bude považovat za hotový a funkční. Testování ale může odhalit problémy nebo neočekávané nebo nežádoucí funkce aplikace.

Použijte výzvy, které popisují problém s co nejvíce podrobnostmi. Pokud například aplikace nefunguje, uveďte co nejvíce informací, včetně přesné chybové zprávy a očekávaného výsledku.

Přerušení toku

Někdy si můžete všimnout, že GitHub Copilot se buď zasekne ve smyčce, která se pokouší opakovaně provádět stejné úlohy, nebo se zasekne v procesu, který se nikdy nevrátí. Například při diagnostice problémů s webem může GitHub Copilot chtít spustit příkaz, například:

az webapp log tail

Když se GitHub Copilot zasekne, můžete GitHub Copilot přerušit jedním z několika způsobů:

  • Ctrl+C
  • Použijte v chatu tlačítko Pozastavit
  • Ukončení relace chatu a zahájení nového chatu

Důležité

Ukončení chatové relace zničí veškerý kontext vytvořený během relace, což může nebo nemusí být žádoucí.

Abyste mu poskytli kontext k tomu, co se právě stalo, a nasměrovali ho k možnému řešení, můžete ihned po přerušení GitHubu Copilot přidat výzvu, například:

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.