A Jinja sablonok hatékony nyelvet kínálnak, amellyel könnyedén hozhat létre dinamikus weboldalakat.
A Jinja és a FastAPI integrálása lehetővé teszi dinamikus weboldalak létrehozását, amelyek zökkenőmentesen keverik a Pythont kódot HTML-lel, lehetővé téve az alkalmazás megjelenítési rétegének elkülönítését a logikától réteg. A dinamikus weboldalakkal személyre szabott és adatvezérelt tartalmat hozhat létre, javítva a felhasználói élményt.
Mi az a Jinja?
A Jinja egy robusztus, funkciókban gazdag Python sablonmotor, amely dinamikus weboldalakat hoz létre. A Jinja Templating támogatja az öröklődést, a feltételes utasításokat, a ciklusokat és a dinamikus weboldalak létrehozását leegyszerűsítő szolgáltatásokat.
A FastAPI és a Jinja kombinálásával olyan következetes elrendezésű weboldalakat hozhat létre, amelyek valós idejű adatokat jelenítenek meg és kezelik a felhasználói bevitelt. Azt is elérheti az aggodalmak szétválasztása, így a kód karbantarthatóbbá és könnyebben érthetőbbé válik.
FastAPI projekt beállítása
A kezdéshez be kell állítania egy FastAPI projektet.
-
Virtuális környezet létrehozása és aktiválása a következő terminálparancsok használatával:
python -m venv env
# Unix/MacOS rendszeren:
forrás venv/bin/activate# Windows rendszeren:
.\venv\Scripts\activate - Telepítse a FastAPI-t és a szükséges függőségeket.
pip install "fastapi[all]"
- Hozzon létre egy projektkönyvtárat a blogom.
- Hozzon létre egy Python fájlt main.py projektkönyvtárában.
- Adja hozzá a következő kódot a main.py fájl:
A fenti kód egy egyszerű FastAPI-alkalmazást hoz létre egyetlen végponttal, amely JSON-választ ad vissza, ha a megfelelő URL-címen keresztül éri el. tudsz használjon Python szótárt így egy tényleges adatbázis helyett; segít csökkenteni a komplexitást, miközben az elsődleges célra összpontosít.tól től fastapi import FastAPI
fake_posts_db = [{
'cím': "Első blogbejegyzés",
'tartalom': "Az első blogbejegyzés tartalma.",
'szerző': 'Gipsz Jakab',
'publication_date': '2023-06-20',
'Hozzászólások': [
{'szerző': "Alice", 'tartalom': 'Remek poszt!'},
{'szerző': "Bob", 'tartalom': 'Érdekes olvasmány.'}
],
'állapot': 'közzétett'
},{
'cím': "Második blogbejegyzés",
'tartalom': "A második blogbejegyzés tartalma.",
'szerző': "Jane Smith",
'publication_date': Egyik sem,
'Hozzászólások': [],
'állapot': 'tervezet'
}]alkalmazás = FastAPI()
@app.get("/about")
defról ről():
Visszatérés"Minden, amit a Simple Blogról tudnod kell" - Futtassa a szervert.
uvicorn main: app --reload
Látogatás http://localhost: 8000/kb böngészőjében a szerver válaszának megtekintéséhez.
A Jinja sablonok integrálása
Miután sikeresen beállította projektjét, most hozzáadhat Jinja sablont.
- Ban,-ben main.py fájlba, importálja a következő modulokat:
tól től fastapi.sablon import Jinja2Templates
tól től fastapi.staticfiles import StaticFiles - Valami alatt kb változó, hozzon létre egy példányt a Jinja2Templates osztályt, és adja át a sablonokat tartalmazó könyvtárat.
templates = Jinja2Templates (könyvtár="sablonok")
- Azután sablonokat változó, adja hozzá a következő kódsort:
A fenti kód rögzíti a statikus könyvtárat, és utasítja a FastAPI-t, hogy kiszolgálja a könyvtárban található statikus fájlokat, amikor a kérés URL-címe /static.app.mount("/statikus", StaticFiles (könyvtár="statikus"), név="statikus")
- Ban ben a blogom könyvtár hozzon létre két könyvtárat, sablonokat HTML fájlok tárolására és statikus amely az összes statikus fájlt tartalmazza majd.
Ezen lépések végrehajtásával sikeresen integrálta a Jinja Templating programot a projektjébe.
Dinamikus weboldal készítése Jinja segítségével
A Jinja gazdag szintaxist és funkciókat kínál dinamikus sablonok létrehozásához.
Ebben a részben megtudhatja, hogyan használhatja a Jinja sablonszintaxist dinamikus weboldalak létrehozásához.
A sabloncímkéket a-val zárja be kapcsos zárójel és százalék szimbólum mindkét oldalon. Az ilyen címkék segítségével vezérlési folyamatot és logikai műveleteket hajthat végre a sablonban. Néhány gyakran használt sabloncímke:
-
Feltétel: Futtatja a kódblokkot, ha a feltétel igaz.
{% ha feltétel %}...{% endif %}
-
Hurok: Iterál egy iterálható elemet, és minden elemhez lefuttatja a kódblokkot.
{% számára tétel ban ben iterálható %}...{% endfor %}
-
Tartalmazza: Egy másik sablont tartalmaz az aktuális sablonon belül.
{% tartalmazza 'sablon_neve.html' %}
-
Blokk: Meghatároz egy blokkot, amelyet a gyermeksablonok örökléssel felülírhatnak.
{% block_name %}...{% endblock %}
-
Kiterjeszt: Lehetővé teszi, hogy a gyermeksablon örökölje és kiterjessze a szülősablont.
{% extend parent_temp.html %}
Ezek a címkék rugalmas és kifejező módot biztosítanak a dinamikus adatokon alapuló HTML-tartalom létrehozására és az alkalmazás logikájának szabályozására.
Sablon öröklődése
A Jinja Templating támogatja a sablonok öröklését. Ez lehetővé teszi egy alap (szülő) sablon meghatározását, közös elrendezéssel és szakaszokkal, amelyeket az alárendelt sablonok kiterjeszthetnek vagy felülírhatnak. Egy gyermeksablon használhatja a Kiterjeszt címkét a szülősablon örökléséhez és kiterjesztéséhez.
Hozzon létre egy base.html fájl a sablonokat könyvtárat a következő kóddal.
html>
<html>
<fej>
<cím>{% block title %}Egyszerű blog{% endblock %}cím>
fej>
<test>
<h1>{% block heading %}Egyszerű blog{% endblock %}h1>{% blokktartalom %}
{% endblock %}
{% include "footer.html" %}
test>
html>
Így van egy szülősablonja, amely tartalmazza az összes sablon közös kódját, lehetővé téve az utódsablon öröklését és igény szerinti kiterjesztését.
Ban,-ben sablonokat könyvtár létrehozása a lábléc.html fájl a következő kóddal.
<lábléc>
<p>© 2023-as egyszerű blog. Minden jog fenntartva.p>
<ahref="{{ url_for('about') }}">Ról rőla>
lábléc>
lábléc.html egy olyan sablon, amely a lábléc szakasz HTML-kódját tartalmazza. Több oldalon is felhasználhatja, ha belefoglalja az alapsablonba a Tartalmazza címke.
Ban,-ben sablonokat könyvtár létrehozása a blog.html fájl a következő kóddal.
{% kiterjeszti "base.html" %}
{% block title %}Egyszerű blog – Blogoldal{% endblock %}
{% block heading %}Egyszerű blog - Blogoldal{% endblock %}
{% blokktartalom %}
<h2>Bejegyzések teljes száma: {{ hozzászólások|hosszúsága }}h2>{% a bejegyzésekhez %}
<divosztály="posta">{% if post.status == 'közzétéve' %}
<h3>{{ postai cím }}h3>
<p>{{ post.content|csonkítás }}p>
<p>Közzététel dátuma: {{ post.publication_date }}p><h4>Hozzászólások:h4>
<ul>
{% a hozzászóláshoz a post.commentsben %}
<liosztály="megjegyzés">{{ comment.author }}-: {{ comment.content }}li>
{% endfor %}
ul>
{% más %}
<p>Ez a bejegyzés még vázlat módban van.p>
{% endif %}
div>
<hr>
{% endfor %}
{% endblock %}
Ez a gyermeksablon innen örökli base.html használni a Kiterjeszt címke. Felülbírálja az alapsablonban meghatározott bizonyos blokkokat, hogy testreszabott tartalmat biztosítson a blogoldal számára. Tartalmazza a bejegyzések és a kapcsolódó megjegyzések megjelenítéséhez szükséges logikát és iterációt is.
Kifejezések
A Jinja kifejezések széles skáláját támogatja, beleértve az aritmetikai műveleteket, az összehasonlításokat és a logikai műveleteket. Például:
{{2 + 2}} // kimenet: 4
Változó helyettesítés
Ha változókat szeretne kiadni a sablonban, tegye őket dupla kapcsos zárójelek közé. Például:
{{post.title}} // output: "Első blogbejegyzés"
Szűrők
A szűrők módosítják egy változó kimenetét. A változó után hozzáadhat egyet a cső szimbólum (|) használatával. Például:
{{post|hosszúság}} // kimenet: 2
A sablonokhoz soron belüli és többsoros megjegyzéseket is hozzáadhat. A Jinja figyelmen kívül hagyja ezeket a megjegyzéseket a sablon megjelenítése során, így hasznosak lehetnek magyarázatok hozzáadásához a sablonon belül.
{# #} // Sorban
{% megjegyzés %}... {% end comment %} // többsoros
URL-ek
Az alkalmazáson belüli más oldalakra mutató megfelelő hiperhivatkozások létrehozásához a Jinja sablonkontextus tartalmazza a url_for funkció. Például:
<ahref="{{ url_for('about') }}">Ról rőla>
A fenti kód lesz http://localhost: 8000/kb. Azt is látni fogja, hogyan kell használni a url_for funkciót, hogy később statikus fájl elérési utat kapjon.
Ez csak néhány a Jinja Templating szintaxis alapvető szempontjai közül. A Jinja Templating számos további szolgáltatást és funkcionalitást biztosít, például makrókat, sablonkontextust és még sok mást, hogy a sablonok létrehozását és testreszabását hatékonyan és rugalmassá tegye.
Adatok továbbítása sablonokhoz
Most, hogy készen vannak a sablonok, át kell adnia a FastAPI-végpontjaiból származó adatokat a sablonokba a megjelenítéshez.
Adja hozzá a következő kódot a main.py fájl:
tól től fastapi import FastAPI, kérés
tól től fastapi.válaszokat import HTMLResponse
@app.get("/", response_class=HTMLResponse)
asyncdefread_posts(kérés: kérés):
Visszatérés sablonokat. TemplateResponse("blog.html", {"kérés": kérés,
"bejegyzések": fake_posts_db})
A kód meghatároz egy FastAPI végpontot, amely kezeli a gyökér URL-hez ("/") küldött GET kérést, és visszaad egy HTMLResponse keletkezett a blog.html sablon. Átad egy kontextusszótárt, amely tartalmazza az aktuálisat kérési objektum és fake_posts_db, a sablonba. Így a Jinja pontos és dinamikus adatokat tud megjeleníteni.
Látogatás http://localhost: 8000/ a böngészőben, és valami ilyesmit kell látnia:
Sikeresen átadta az adatokat a sablonokba a megjelenítéshez.
Statikus fájlok kiszolgálása
A dinamikus sablonok megjelenítése mellett a FastAPI statikus fájlok, például CSS-fájlok, JavaScript-fájlok és képek kiszolgálására is alkalmas.
A CSS segítségével javíthatja az oldal megjelenését és hangulatát.
Ban,-ben statikus könyvtárat, hozzon létre a stílusok.css fájl a következő kóddal.
test {
betűtípus család: Arial, sans-serif;
árrés: 0;
párnázás: 20px;
háttérszín: #f5f5f5;
}h1, h2, h3, h4 {
szín: #333;
}.post {
háttérszín: #fff;
párnázás: 20px;
margó-alsó: 20px;
határ-sugár: 5px;
doboz-árnyék: 0 2px 4pxrgba(0, 0, 0, 0.1);
}.posth3 {
margin-top: 0;
}.postp {
margó-alsó: 10px;
}.postul {
lista-stílusú: egyik sem;
padding-bal: 0;
}.megjegyzés {
margó-alsó: 10px;
párnázás: 10px;
háttérszín: #f9f9f9;
határ-sugár: 5px;
}
lábléc {
háttérszín: #f2f2f2;
párnázás: 10px;
szöveg igazítás: központ;
}
Módosítsa a fej eleme a base.html sablon az alábbiak szerint:
<fej>
<cím>{% block title %}Egyszerű blog{% endblock %}cím>
<linkhref="{{ url_for('static', path='/styles.css') }}"rel="stíluslap">
fej>
Az url_for() függvény létrehoz egy URL-t (elérési utat) a stílusok.css (/static/styles.css) fájlt a statikus könyvtárat, amelyet ezután a FastAPI automatikusan kiszolgál.
Látogatás http://localhost: 8000/ a böngészőjében.
Ugyanezek az eljárások vonatkoznak a kép- és JavaScript-fájlok kiszolgálására is.
Ne felejtse el követni a legjobb gyakorlatokat
A FastAPI Jinja Templating használatával végzett munka során fontos bizonyos bevált gyakorlatok követése a jól szervezett és hatékony kódbázis biztosítása érdekében.
- Rendszerezze a sablonokat egy dedikált könyvtárba, és fontolja meg alkönyvtárak használatát a kapcsolódó sablonokhoz.
- Használja a sablon öröklődését, hogy újrafelhasználható alapsablonokat hozzon létre, és bővítse ki azokat adott tartalomra.
- Gondosan válassza ki a sablonoknak továbbítandó adatokat, a hasznos teher könnyű súlyának megtartásával, és használjon kontextusfeldolgozókat vagy köztes szoftvert a gyakran használt adatokhoz.
- Használja ki a Jinja Templating funkcióit, például makrókat, szűrőket és vezérlőstruktúrákat a kódok jobb újrafelhasználhatósága és olvashatósága érdekében.
- Optimalizálja a teljesítményt azáltal, hogy gyorsítótárazási stratégiákat alkalmaz statikus sablonokhoz, HTTP-gyorsítótárazási fejléceket használ, és profilalkotást készít a teljesítmény szűk keresztmetszete miatt.
Ezen bevált gyakorlatok követésével fenntarthatja a strukturált projektet, optimalizálhatja a renderelési teljesítményt, és hatékonyan használhatja ki a Jinja Templating szolgáltatásait a FastAPI-alkalmazásokban.
FastAPI használata RestAPI-k létrehozásához
Eltekintve a megjelenítési sablonokat igénylő alkalmazások létrehozásától. A FastAPI kiváló teljesítményt, könnyen használható szintaxist, automatikus dokumentáció-generálást és méretezhetőséget biztosít a RestAPI-k létrehozásában. Ezek a funkciók ideálissá teszik a FastAPI-t robusztus webes API-k hatékony fejlesztéséhez.