Jinja mallid pakuvad võimsat keelt, mille abil saate hõlpsalt dünaamilisi veebilehti luua.
Jinja integreerimine FastAPI-ga võimaldab teil luua dünaamilisi veebilehti, mis segavad sujuvalt Pythoni koodi HTML-iga, mis võimaldab teil rakenduse esitluskihi loogikast eraldada kiht. Dünaamiliste veebilehtede abil saate luua isikupärastatud ja andmepõhist sisu, mis parandab kasutajakogemust.
Mis on Jinja?
Jinja on Pythoni jaoks jõuline ja funktsioonirikas mallimootor, mis loob dünaamilisi veebilehti. Jinja Templating toetab pärimist, tingimuslauseid, silmuseid ja erinevaid funktsioone, mis lihtsustavad dünaamiliste veebilehtede loomist.
Saate kombineerida FastAPI ja Jinja, et luua ühtse paigutusega veebilehti, mis suudavad kuvada reaalajas andmeid ja käsitleda kasutaja sisendit. Saab ka saavutada murede eraldamine, mis muudab teie koodi hooldatavamaks ja arusaadavamaks.
Seadistage FastAPI projekt
Alustamiseks peate seadistama FastAPI projekti.
-
Loo ja aktiveeri virtuaalne keskkond kasutades neid terminali käske:
python -m venv env
# Unixis/MacOS-is:
allikas venv/bin/activate# Windowsis:
.\venv\Scripts\activate - Installige FastAPI ja vajalikud sõltuvused.
pip install "fastapi[all]"
- Looge projektikataloog minu blogi.
- Looge Pythoni fail main.py oma projektikataloogis.
- Lisage sellele järgmine kood main.py fail:
Ülaltoodud kood loob lihtsa FastAPI rakenduse ühe lõpp-punktiga, mis tagastab vastava URL-i kaudu juurdepääsu korral JSON-vastuse. Sa saad kasutada Pythoni sõnastikku nagu see tegeliku andmebaasi asemel; see aitab vähendada keerukust, keskendudes samal ajal esmasele eesmärgile.alates fastapi importida FastAPI
fake_posts_db = [{
"tiitel": "Esimene ajaveebi postitus",
'sisu': "Esimese ajaveebi postituse sisu.",
"autor": "John Doe",
'avaldamise kuupäev': '2023-06-20',
'kommentaarid': [
{"autor": 'Alice', 'sisu': 'Suurepärane postitus!'},
{"autor": "Bob", 'sisu': "Huvitav lugemine."}
],
'staatus': 'avaldatud'
},{
"tiitel": "Teine blogipostitus",
'sisu': "Teise blogipostituse sisu.",
"autor": "Jane Smith",
'avaldamise kuupäev': Mitte ühtegi,
'kommentaarid': [],
'staatus': 'mustand'
}]rakendus = FastAPI()
@app.get("/about")
defumbes():
tagasi"Kõik, mida peate Simple Blogi kohta teadma" - Käivitage server.
uvicorn main: app --reload
Külastage http://localhost: 8000/umbes oma brauseris, et näha serveri vastust.
Jinja mallide integreerimine
Pärast projekti edukat seadistamist saate nüüd lisada sellele Jinja malli.
- Aastal main.py faili, importige järgmised moodulid:
alates fastapi.templates importida Jinja2Mallid
alates fastapi.staticfiles importida Staatilised failid - Allpool rakendus muutuja, loo eksemplar Jinja2Mallid klassi ja edastage kataloog, mis sisaldab teie malle.
mallid = Jinja2Mallid (kataloog="mallid")
- Pärast mallid muutuja, lisage järgmine koodirida:
Ülaltoodud kood ühendab staatiline kataloogi ja annab FastAPI-le korralduse teenindada kõiki kataloogis asuvaid staatilisi faile, kui päringu URL algab /static.app.mount("/staatiline", StaticFiles (kataloog="staatiline"), nimi="staatiline")
- sisse minu blogi kataloog luua kaks kataloogi, mallid HTML-failide hoidmiseks ja staatiline mis sisaldab kõiki staatilisi faile.
Kui need sammud on lõpule viidud, olete Jinja Templatingi edukalt oma projektiga integreerinud.
Dünaamilise veebilehe loomine Jinjaga
Jinja pakub dünaamiliste mallide loomiseks rikkalikku süntaksi ja funktsioonide komplekti.
Selles jaotises näete, kuidas kasutada Jinja malli süntaksit dünaamiliste veebilehtede loomiseks.
Lisage mallisildid tähega a lokkis traks ja protsendi sümbol mõlemal poolel. Saate kasutada selliseid silte mallis juhtimisvoo ja loogikatoimingute tegemiseks. Mõned sagedamini kasutatavad mallisildid hõlmavad järgmist:
-
Seisund: käivitab koodiploki, kui tingimus on tõene.
{% kui tingimus %}...{% endif %}
-
Loop: itereerib itereeritava üksuse kaudu ja käivitab iga üksuse koodiploki.
{% jaoks üksus sisse itereeritav %}...{% endfor %}
-
Kaasa: sisaldab praeguses mallis teist malli.
{% sealhulgas 'malli_nimi.html' %}
-
Blokeeri: määrab ploki, mille alammallid saavad pärimise abil alistada.
{% block block_name %}...{% endblock %}
-
Pikendada: võimaldab alammalli pärida ja laiendada emamalli.
{% extend parent_temp.html %}
Need sildid pakuvad paindlikku ja väljendusrikast viisi dünaamiliste andmete põhjal HTML-sisu genereerimiseks ja teie rakenduse loogika juhtimiseks.
Malli pärimine
Jinja Templating toetab mallide pärimist. See võimaldab teil määratleda põhi- (ema-) malli, millel on ühine paigutus ja jaotised, mida alammall saab laiendada või alistada. Alammall võib kasutada Pikendada sildi ülemmalli pärimiseks ja laiendamiseks.
Loo base.html faili mallid kataloog järgmise koodiga.
html>
<html>
<pea>
<pealkiri>{% block title %}Lihtne ajaveeb{% endblock %}pealkiri>
pea>
<keha>
<h1>{% block heading %}Lihtne ajaveeb{% endblock %}h1>{% blokeerida sisu %}
{% endblock %}
{% include "footer.html" %}
keha>
html>
Nii on teil ülemmall, mis sisaldab kõigi teie mallide ühist koodi, võimaldades alammallil pärida ja seda vastavalt vajadusele laiendada.
Aastal mallid kataloog loo a jalus.html faili järgmise koodiga.
<jalus>
<lk>© 2023. aasta lihtne ajaveeb. Kõik õigused kaitstud.lk>
<ahref="{{ url_for('about') }}">Umbesa>
jalus>
jalus.html on kaasatud mall, mis sisaldab jaluse jaotise HTML-koodi. Saate seda mitmel lehel uuesti kasutada, lisades selle põhimalli, kasutades Kaasa tag.
Aastal mallid kataloog loo a blog.html faili järgmise koodiga.
{% laiendab "base.html" %}
{% block title %}Lihtne ajaveeb – ajaveebi leht{% endblock %}
{% block heading %}Lihtne ajaveeb – ajaveebi leht{% endblock %}
{% blokeerida sisu %}
<h2>Postituste koguarv: {{ postitusi|pikkus }}h2>{% postituste kohta postitustes %}
<divklass="postitus">{% if post.status == 'avaldatud' %}
<h3>{{ post.title }}h3>
<lk>{{ post.content|kärbi }}lk>
<lk>Avaldatud: {{ post.publication_date }}lk><h4>Kommentaarid:h4>
<ul>
{% kommentaari jaoks post.commentsis %}
<liklass="kommentaar">{{ comment.author }}-: {{ comment.content }}li>
{% endfor %}
ul>
{% muu %}
<lk>See postitus on endiselt mustandi režiimis.lk>
{% endif %}
div>
<hr>
{% endfor %}
{% endblock %}
See alammall pärineb base.html kasutades Pikendada tag. See alistab teatud baasmallis määratletud plokid, et pakkuda ajaveebi lehele kohandatud sisu. See sisaldab ka postituse ja sellega seotud kommentaaride kuvamiseks vajalikku loogikat ja iteratsiooni.
Väljendid
Jinja toetab laia valikut avaldisi, sealhulgas aritmeetilisi tehteid, võrdlusi ja loogilisi tehteid. Näiteks:
{{2 + 2}} // väljund: 4
Muutuja asendus
Muutujate väljastamiseks mallis pange need topeltsulgudesse. Näiteks:
{{post.title}} // väljund: 'Esimene blogipostitus'
Filtrid
Filtrid muudavad muutuja väljundit. Muutuja järele saate ühe lisada toru sümboli (|) abil. Näiteks:
{{postitus|pikkus}} // väljund: 2
Saate oma mallidesse lisada tekstisiseseid ja mitmerealisi kommentaare. Jinja ignoreerib neid kommentaare malli renderdamise ajal, seega on need kasulikud malli sees selgituste lisamiseks.
{# #} // järjekorras
{% kommentaar %}... {% end comment %} // mitmerealine
URL-id
Et saaksite luua õigeid hüperlinke rakenduse teistele lehtedele, sisaldab Jinja malli kontekst a url_for funktsiooni. Näiteks:
<ahref="{{ url_for('about') }}">Umbesa>
Ülaltoodud kood muutub http://localhost: 8000/umbes. Samuti näete, kuidas kasutada url_for funktsioon staatiliste failiteede hankimiseks hiljem.
Need on vaid mõned Jinja Template süntaksi põhiaspektid. Jinja Templating pakub palju rohkem funktsioone, nagu makrod, malli kontekst ja palju muud, et muuta mallide loomine ja kohandamine tõhusaks ja paindlikuks.
Andmete edastamine mallidele
Nüüd, kui teil on mallid valmis, peate edastama andmed oma FastAPI lõpp-punktidest mallidesse renderdamiseks.
Lisage sellele järgmine kood main.py fail:
alates fastapi importida FastAPI, taotlus
alates fastapi.responses importida HTMLResponse
@app.get("/", response_class=HTMLResponse)
asünkrdefread_posts(taotlus: taotlus):
tagasi mallid. TemplateResponse("blog.html", {"taotlus": palve,
"postitused": fake_posts_db})
Kood määratleb FastAPI lõpp-punkti, mis käsitleb juur-URL-i ("/") GET-päringut ja tagastab HTMLResponse loodud alates blog.html malli. See läbib kontekstisõnastiku, mis sisaldab praegust taotluse objekt ja fake_posts_db, malli. Nii saab Jinja renderdada täpseid ja dünaamilisi andmeid.
Külastage http://localhost: 8000/ brauseris ja peaksite nägema midagi sellist:
Olete edukalt edastanud andmed renderdamise mallidesse.
Staatiliste failide teenindamine
Lisaks dünaamiliste mallide renderdamisele pakub FastAPI ka funktsioone staatiliste failide (nt CSS-failid, JavaScript-failid ja pildid) teenindamiseks.
Lehe välimuse ja tunnetuse parandamiseks kasutate CSS-i.
Aastal staatiline kataloog, loo a stiilid.css faili järgmise koodiga.
keha {
font-perekond: Arial, sans-serif;
marginaal: 0;
polsterdus: 20px;
taustavärv: #f5f5f5;
}h1, h2, h3, h4 {
värvi: #333;
}.post {
taustavärv: #fff;
polsterdus: 20px;
margin-alumine: 20px;
piiriraadius: 5px;
kast-vari: 0 2px 4pxrgba(0, 0, 0, 0.1);
}.posth3 {
margin-top: 0;
}.postlk {
margin-alumine: 10px;
}.postul {
list-stiilis-tüüp: mitte ühtegi;
polster-vasak: 0;
}.kommentaar {
margin-alumine: 10px;
polsterdus: 10px;
taustavärv: #f9f9f9;
piiriraadius: 5px;
}
jalus {
taustavärv: #f2f2f2;
polsterdus: 10px;
teksti joondamine: Keskus;
}
Muutke pea elementi base.html mall järgmiselt:
<pea>
<pealkiri>{% block title %}Lihtne ajaveeb{% endblock %}pealkiri>
<linkhref="{{ url_for('static', path='/styles.css') }}"rel="laadileht">
pea>
Funktsioon url_for() genereerib URL-i (tee). stiilid.css (/static/styles.css) faili staatiline kataloogi, mida FastAPI seejärel automaatselt teenindab.
Külastage http://localhost: 8000/ teie brauseris.
Samad protseduurid kehtivad pildi- ja JavaScripti failide teenindamisel.
Ärge unustage järgida parimaid tavasid
FastAPI-s Jinja Templatega töötades on oluline järgida teatud parimaid tavasid, et tagada hästi organiseeritud ja tõhus koodibaas.
- Korraldage mallid spetsiaalsesse kataloogi ja kaaluge seotud mallide jaoks alamkataloogide kasutamist.
- Kasutage mallide pärandit korduvkasutatavate baasmallide loomiseks ja nende laiendamiseks konkreetse sisu jaoks.
- Valige hoolikalt mallidele edastatavad andmed, hoides kasulikku koormust kergena, ja kasutage sageli kasutatavate andmete jaoks kontekstiprotsessoreid või vahevara.
- Kasutage koodi korduvkasutatavuse ja loetavuse parandamiseks Jinja Malli funktsioone, nagu makrod, filtrid ja juhtimisstruktuurid.
- Optimeerige jõudlust, rakendades staatiliste mallide vahemällu salvestamise strateegiaid, kasutades HTTP vahemällu salvestamise päiseid ja profileerides jõudluse kitsaskohtade jaoks.
Neid parimaid tavasid järgides saate säilitada struktureeritud projekti, optimeerida renderdamisjõudlust ja tõhusalt kasutada Jinja Templatingi funktsioone oma FastAPI rakendustes.
FastAPI kasutamine RestAPI-de loomiseks
Peale renderdamismalle nõudvate rakenduste ehitamise. FastAPI paistab silma RestAPI-de loomisel tänu oma suurele jõudlusele, hõlpsasti kasutatavale süntaksile, automaatsele dokumentatsiooni genereerimisele ja skaleeritavusele. Need funktsioonid muudavad FastAPI ideaalseks tugevate veebi API-de tõhusaks arendamiseks.