Sdílet prostřednictvím


Kurz: Obsluha statických souborů a použití dědičnosti šablon pomocí Flasku v sadě Visual Studio

Tento článek představuje krok 3 v sérii kurzů Práce s webovou architekturou Flask v sadě Visual Studio.

Předchozí kroky v této sérii kurzů vytvoří minimální aplikaci Flask s jednou stránkou samostatného KÓDU HTML. Moderní webové aplikace se obvykle skládají z mnoha stránek a používají sdílené prostředky, jako jsou soubory CSS a JavaScript, k zajištění konzistentního stylu a chování. V kroku 3 pracujete se šablonami položek sady Visual Studio, abyste do projektu Flask přidali obsah a rozšířili možnosti aplikace.

V kroku 3 kurzu se naučíte:

  • Použijte šablony položek sady Visual Studio k rychlému přidání nových souborů se šablonovým kódem.
  • Obsluha statických souborů z kódu Flask
  • Přidání dalších stránek do aplikace Flask
  • Použití dědičnosti šablon k vytvoření záhlaví a navigace napříč stránkami

Požadavky

Prozkoumejte šablony položek v sadě Visual Studio

Při vývoji aplikace Flask obvykle přidáváte mnoho dalších souborů Python, HTML, CSS a JavaScript. Pro každý typ souboru (a další soubory, jako jsou web.config, které možná potřebujete k nasazení), poskytuje Visual Studio praktické šablony položek , abyste mohli začít. Tyto šablony můžete použít k rychlému přidání nových souborů různých typů pomocí často používaného kódu.

  1. Pokud chcete zobrazit dostupné šablony, přejděte do Průzkumníka řešení v sadě Visual Studio a otevřete strukturu projektu.

  2. Pravým tlačítkem myši klikněte na složku, ve které chcete vytvořit nový soubor, a vyberte Přidat>Nová položka. Otevře se dialogové okno Přidat novou položku:

  3. Pokud chcete použít šablonu, vyberte požadovanou šablonu, zadejte název souboru a vyberte Přidat.

Visual Studio přidá soubor do aktuálního projektu a označí změny pro správu zdrojového kódu.

Vysvětlení způsobu identifikace šablon položek v sadě Visual Studio

Soubor projektu sady Visual Studio (.pyproj) obsahuje identifikátor typu projektu, který soubor označí jako projekt Pythonu. Visual Studio používá tento identifikátor typu k rozpoznávání a zobrazení pouze šablon položek vhodných pro typ projektu. Visual Studio se řídí tímto přístupem a poskytuje bohatou sadu šablon položek pro mnoho typů projektů bez toho, abyste je museli řadit pokaždé.

Obsluha statických souborů z aplikace

Ve webové aplikaci sestavené pomocí Pythonu (pomocí libovolné architektury) se soubory Pythonu vždy spouštějí na serveru webového hostitele a nikdy se nepřenesou do počítače uživatele. Jiné soubory, jako jsou CSS a JavaScript, se používají jenom v prohlížeči, takže hostitelský server je jednoduše doručí as-is, když jsou požadovány. Tyto typy souborů se označují jako "statické" soubory a Flask je dokáže automaticky doručit, aniž byste museli psát jakýkoli kód. V souborech HTML můžete například odkazovat na statické soubory pomocí relativní cesty v projektu. První postup v této části ukazuje, jak použít statický soubor CSS s existující šablonou stránky.

Pokud potřebujete doručovat statický soubor z kódu, například prostřednictvím implementace koncového bodu rozhraní API, Flask poskytuje pohodlnou metodu. K souborům můžete odkazovat pomocí relativních cest ve složce s názvem statické v kořenovém adresáři projektu. Druhý postup v této části ukazuje, jak pracovat s jednoduchým statickým datovým souborem z kódu.

V obou postupech můžete soubory uspořádat pod statickou složku podle svých preferencí.

Použití statického souboru CSS v šabloně

Pokud chcete použít statický soubor v šabloně, postupujte takto:

  1. V Průzkumníku řešeníklikněte pravým tlačítkem na složku HelloFlask v projektu, vyberte Přidat>Novou složkua pojmenujte složku static.

  2. Klikněte pravým tlačítkem na statickou složku a vyberte Přidat>Nová položka.

  3. V dialogovém okně Přidat novou položku vyberte šablonu šablony šablony stylů, pojmenujte soubor site.csa pak vyberte Přidat.

    Visual Studio přidá do projektu soubor site.css a otevře ho v editoru. Tady je příklad aktualizované struktury projektu Flask:

    snímek obrazovky znázorňující strukturu statických souborů v Průzkumníku řešení

  4. Obsah souboru site.css nahraďte následujícími styly:

    .message {
        font-weight: 600;
        color: blue;
    }
    
  5. Nahraďte obsah souboru HelloFlask/templates/index.html následujícím kódem:

    <html>
       <head>
          <title>{{ title }}</title>
          <link rel="stylesheet" type="text/css" href="/static/site.css" />
       </head>
       <body>
          <span class="message">{{ message }}</span>{{ content }}
       </body>
    </html>
    

    Tento kód nahradí element <strong> HTML z kroku 2 v sérii kurzů elementem <span>, který odkazuje na třídu stylu message. Použitím třídy stylu tímto způsobem získáte větší flexibilitu při stylování elementu HTML.

  6. Uložte změny projektu tak, že vyberete Soubor>Uložit vše nebo použijete klávesovou zkratku Ctrl+Shift+S. (Tento krok není nutný, protože při vývoji projektu sada Visual Studio ukládá soubory automaticky.)

  7. Spusťte projekt a sledujte výsledky. Až budete hotovi, aplikaci zastavte.

  8. (Volitelné) Změny můžete potvrdit do správy zdrojového kódu a aktualizovat vzdálené úložiště. Další informace najdete v tématu Potvrzení změn ve správě zdrojového kódu v kroku 2 této série kurzů.

Obsluha statického souboru z kódu

Flask poskytuje funkci s názvem send_static_file, kterou můžete volat z kódu a odkazovat na libovolný soubor v rámci statické složky projektu. Následující proces vytvoří jednoduchý koncový bod rozhraní API, který vrátí statický datový soubor:

  1. Ve složce statické vytvořte statický datový soubor JSON s názvem data.json. Šablonu souboru Text můžete použít jako základ souboru.

  2. Nahraďte obsah souboru JSON následujícím kódem, který poskytuje ukázková data, která předvádějí mechanismus:

    {
       "01": {
          "note" : "Sample data to demonstrate the mechanism."
       }
    }
    
  3. Do souboru HelloFlask/views.py přidejte funkci s koncovým bodem trasy /api/data, který vrátí statický datový soubor pomocí metody send_static_file:

    @app.route('/api/data')
    def get_data():
      return app.send_static_file('data.json')
    
  4. Uložte změny projektu a spusťte projekt znovu. Přejděte do koncového bodu trasy /api/data a potvrďte, že aplikace vrátí statický soubor:

    Snímek obrazovky, který zobrazuje aktualizované zobrazení stránky aplikace pro domovskou trasu a výstup statického souboru pro trasu API data.

  5. Až budete hotovi, aplikaci zastavte.

Uspořádání statických souborů a složek

Do statické složky můžete přidat další soubory CSS, JavaScript a HTML podle potřeb projektu. Typickým způsobem, jak uspořádat statické soubory, je vytvořit podsložky s názvem písma, skriptya obsah (pro šablony stylů a jakékoli jiné soubory).

Použití tras URL a parametrů dotazu z rozhraní API

Proměnné adresy URL a parametry dotazu můžete zpracovat pomocí rozhraní API, když pracujete s Flaskem. Další informace najdete v tématu Použití tras adres URL proměnných a parametrů dotazu v kroku 1 této série kurzů.

Přidání stránky do aplikace Flask

Přidání další stránky do aplikace Flask zahrnuje následující úlohy:

  • Přidání funkce Pythonu, která definuje zobrazení
  • Přidání šablony pro kód HTML stránky
  • Aktualizace tras URL v souboru views.py projektu Flask

Následujícím postupem přidáte stránku O aplikaci (/about) do projektu BasicProject Flask a odkazy na danou stránku z domovské stránky:

  1. V Průzkumníku řešeníklikněte pravým tlačítkem na složku HelloFlask/templates projektu a vyberte Přidat>Nová položka.

    Spropitné

    Pokud v nabídce Přidat nevidíte příkaz Nová položka, ujistěte se, že jste zastavili aplikaci Flask, aby Visual Studio podle potřeby ukončilo režim ladění.

  2. V dialogovém okně Přidat novou položku vyberte šablonu stránky HTML, pojmenujte soubor about.htmla pak vyberte Přidat.

  3. Obsah souboru about.html nahraďte následujícím kódem HTML:

    <html>
       <head>
          <title>{{ title }}</title>
          <link rel="stylesheet" type="text/css" href="/static/site.css" />
       </head>
       <body>
          <div><a href="home">Home</a></div>
          {{ content }}
       </body>
    </html>
    

    V dalším kroku nahradíte explicitní odkaz na domovskou stránku navigačním panelem.

  4. Do souboru HelloFlask/views.py přidejte funkci s názvem about, která používá šablonu:

    @app.route('/about')
    def about():
       return render_template(
          "about.html",
          title = "About HelloFlask",
          content = "Example app page for Flask.")
    
  5. Do souboru HelloFlask/templates/index.html přidejte následující kód jako první příkaz v elementu <body>:

    <div><a href="about">About</a></div>
    

    Tento kód přidá odkaz na /about stránku aplikace Flask. V pozdějším kroku nahradíte tento odkaz navigačním panelem.

  6. Uložte změny projektu a spusťte projekt znovu. Přejděte na /about stránku a zkontrolujte navigaci mezi různými stránkami aplikace.

  7. Až budete hotovi, aplikaci zastavte.

Pojmenování funkce stránky

Flask neukládá žádná omezení ani požadavky na název vaší funkce stránky. Dekorátor @app.route určuje adresy URL, pro které Flask volá funkci, aby vygenerovala odpověď. Vývojáři obvykle přiřazují název funkce stránky k trase, ale tento typ párování není vyžadován.

Použijte dědičnost šablon pro záhlaví a navigaci

Místo explicitních navigačních odkazů na každé stránce má mnoho webových aplikací záhlaví s logem a navigační panel, který poskytuje nejdůležitější odkazy na stránky, vyskakovací nabídky a podobně. Pokud chcete zajistit konzistenci v aplikaci, záhlaví a navigační panel by měly být stejné na všech stránkách, ale v každé šabloně stránky nemusíte opakovat stejný kód. Společné části všech stránek můžete definovat v jednom souboru.

Systém šablon Flask (ve výchozím nastavení Jinja) nabízí dva způsoby opětovného použití konkrétních prvků napříč několika šablonami:

  • Zahrnuje jsou další šablony stránek, které vložíte na konkrétní místo v odkazující šabloně se syntaxí {% include <template_path> %}. Proměnnou můžete použít také v případě, že chcete změnit cestu dynamicky v kódu. Vložené prvky se obvykle používají v textu stránky pro vložení sdílené šablony na specifickém místě na stránce.

  • dědičnost používá syntaxi {% extends <template_path> %} na začátku šablony stránky k určení sdílené základní šablony, na které odkazující šablona vychází. Dědičnost se běžně používá k definování sdíleného rozložení, navigačního panelu a dalších struktur pro stránky aplikace. Tento přístup vyžaduje odkazovat na šablony pro přidání nebo úpravu pouze konkrétních oblastí základní šablony označované jako bloky .

U obou přístupů je hodnota <template_path> relativní ke složce šablon aplikace (../ nebo ./ jsou také povoleny).

Základní šablona označuje bloky pomocí značek {% block <block_name> %} a {% endblock %}. Pokud odkazující šablona používá značky se stejným názvem bloku, přepíše obsah bloku v odkazující šabloně odpovídající blok v základní šabloně.

Následující kroky ukazují dědičnost šablon:

  1. V Průzkumníku řešeníklikněte pravým tlačítkem myši na složku HelloFlask/templates a vytvořte nový soubor ze šablony stránky HTML s názvem layout.html.

  2. Obsah souboru layout.html nahraďte následujícím kódem HTML:

    <!DOCTYPE html>
    <html>
    <head>
       <meta charset="utf-8" />
       <title>{{ title }}</title>
       <link rel="stylesheet" type="text/css" href="/static/site.css" />
    </head>
    
    <body>
       <div class="navbar">
          <a href="/" class="navbar-brand">Hello Flask</a>
          <a href="{{ url_for('home') }}" class="navbar-item">Home</a>
          <a href="{{ url_for('about') }}" class="navbar-item">About</a>
       </div>
    
       <div class="body-content">
          {% block content %}
          {% endblock %}
          <hr/>
          <footer>
             <p>&copy; 2024</p>
          </footer>
       </div>
    </body>
    </html>
    

    Tato šablona obsahuje blok s názvem content, který identifikuje veškerý obsah, který odkazující stránky potřebují nahradit.

  3. Do souboru HelloFlask/static/site.css přidejte na konec souboru následující styly:

    .navbar {
       background-color: lightslategray;
       font-size: 1em;
       font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
       color: white;
       padding: 8px 5px 8px 5px;
    }
    
    .navbar a {
       text-decoration: none;
       color: inherit;
    }
    
    .navbar-brand {
       font-size: 1.2em;
       font-weight: 600;
    }
    
    .navbar-item {
       font-variant: small-caps;
       margin-left: 30px;
    }
    
    .body-content {
       padding: 5px;
       font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    }
    

    Tyto definice stylu generují pro toto cvičení zajímavý výsledek. Tento průvodce neukazuje responzivní návrh.

  4. Nahraďte obsah souboru HelloFlask/templates/index.html následujícím kódem:

    {% extends "layout.html" %}
    {% block content %}
    <span class="message">{{ message }}</span>{{ content }}
    {% endblock %}
    

    Šablona index teď odkazuje na základní šablonu a přepíše blok content. Můžete vidět, že pomocí dědičnosti je tato šablona zjednodušená.

  5. Nahraďte obsah souboru HelloFlask/templates/about.html následujícím kódem, takže šablona about odkazuje také na základní šablonu a přepíše blok content:

    {% extends "layout.html" %}
    {% block content %}
    {{ content }}
    {% endblock %}
    
  6. Spusťte aplikaci znovu a sledujte výsledky. Pomocí odkazů na navigačním panelu můžete přepínat mezi stránkami aplikace.

    snímek obrazovky znázorňující revidovanou aplikaci Flask, která používá dědičnost šablon k vykreslení záhlaví a navigačního panelu na všech stránkách

  7. Až budete hotovi, zastavte aplikaci a uložte změny projektu.

  8. Vzhledem k tomu, že jste v aplikaci udělali podstatné změny, je vhodné uložit změny do úložiště Git. Další informace najdete v tématu Potvrzení změn ve správě zdrojového kódu v kroku 2 této série kurzů.

Recenze tutoriálu

Blahopřejeme k dokončení tohoto tutoriálu o Flasku ve Visual Studio.

V tomto kurzu jste se naučili:

  • Vytvoření projektu Flask s více stránkami
  • Použití šablon k vytvoření různých zobrazení stránek
  • Podávejte statické soubory, přidávejte stránky a použijte dědičnost šablon