Jinja šablonai siūlo galingą kalbą, kuria galite lengvai kurti dinamiškus tinklalapius.

Jinja integravimas su FastAPI leidžia kurti dinamiškus tinklalapius, kurie sklandžiai sujungia Python kodą su HTML, leidžiantį atskirti programos pateikimo sluoksnį nuo logikos sluoksnis. Naudodami dinamiškus tinklalapius galite generuoti suasmenintą ir duomenimis pagrįstą turinį, taip pagerindami naudotojų patirtį.

Kas yra Jinja?

Jinja yra tvirtas, daug funkcijų turintis Python šablonų variklis, generuojantis dinamiškus tinklalapius. Jinja Templating palaiko paveldėjimą, sąlyginius teiginius, kilpas ir įvairias funkcijas, kurios supaprastina dinaminių tinklalapių kūrimą.

Galite derinti „FastAPI“ ir „Jinja“, kad sukurtumėte nuoseklaus išdėstymo tinklalapius, kuriuose būtų galima rodyti duomenis realiuoju laiku ir apdoroti vartotojo įvestį. Taip pat galite pasiekti rūpesčių atskyrimas, todėl kodą lengviau prižiūrėti ir suprasti.

Nustatykite FastAPI projektą

Norėdami pradėti, turėsite nustatyti FastAPI projektą.

instagram viewer
  1. Sukurkite ir suaktyvinkite virtualią aplinką naudojant šias terminalo komandas:
    python -m venv env

    # „Unix“ / „MacOS“:
    šaltinis venv/bin/activate

    # Sistemoje Windows:
    .\venv\Scripts\activate

  2. Įdiekite FastAPI ir reikiamas priklausomybes.
    pip įdiegti "fastapi[visi]"
  3. Sukurkite projekto katalogą Mano tinklaraštis.
  4. Sukurkite Python failą pagrindinis.py savo projekto kataloge.
  5. Pridėkite šį kodą prie pagrindinis.py failas:
     fastapi importuoti FastAPI

    fake_posts_db = [{
    "pavadinimas": „Pirmasis tinklaraščio įrašas“,
    'turinys': „Pirmojo tinklaraščio įrašo turinys“.,
    'autorius': "John Doe",
    'paskelbimo data': '2023-06-20',
    'komentarai': [
    {'autorius': "Alisa", 'turinys': "Puikus įrašas!"},
    {'autorius': 'Bobas', 'turinys': „Įdomus skaitymas“.}
    ],
    'status': 'paskelbta'
    },{
    "pavadinimas": „Antrasis tinklaraščio įrašas“,
    'turinys': „Antrojo tinklaraščio įrašo turinys“.,
    'autorius': "Jane Smith",
    'paskelbimo data': Nė vienas,
    'komentarai': [],
    'status': 'juodraštis'
    }]

    programa = FastAPI ()

    @app.get("/about")
    defapie():
    grąžinti„Viskas, ką reikia žinoti apie paprastą tinklaraštį“

    Aukščiau pateiktas kodas sukuria paprastą FastAPI programą su vienu galutiniu tašku, kuris grąžina JSON atsakymą, kai pasiekiamas per atitinkamą URL. Tu gali naudoti Python žodyną kaip tai vietoj tikrosios duomenų bazės; tai padeda sumažinti sudėtingumą sutelkiant dėmesį į pagrindinį tikslą.
  6. Paleiskite serverį.
    uvicorn pagrindinis: app --reload

Apsilankykite http://localhost: 8000/apie naršyklėje, kad pamatytumėte serverio atsakymą.

Jinja šablonų integravimas

Sėkmingai nustatę projektą, dabar galite prie jo pridėti Jinja šabloną.

  1. Viduje pagrindinis.py failą, importuokite šiuos modulius:
     fastapi.šablonas importuoti Jinja2 Šablonai
    fastapi.staticfiles importuoti Statiniai failai
  2. Žemiau programėlė kintamąjį, sukurkite egzempliorių Jinja2 Šablonai klasę ir perduoti katalogą, kuriame bus jūsų šablonai.
    šablonai = Jinja2Templates (katalogas="šablonai")
  3. Po to, kai šablonus kintamąjį, pridėkite šią kodo eilutę:
    app.mount("/statinis", StaticFiles (katalogas="statinis"), vardas ="statinis")
    Aukščiau pateiktas kodas pritvirtina statinis katalogą ir nurodo FastAPI aptarnauti visus statinius failus, esančius kataloge, kai užklausos URL prasideda /static.
  4. Į Mano tinklaraštis kataloge sukurti du katalogus, šablonus HTML failams laikyti ir statinis kuriame bus visi statiniai failai.

Atlikę šiuos veiksmus, sėkmingai integravote Jinja Templating su savo projektu.

Dinaminio tinklalapio kūrimas su Jinja

Jinja suteikia gausų sintaksės ir funkcijų rinkinį dinaminiams šablonams kurti.

Šiame skyriuje pamatysite, kaip naudoti Jinja šablonų sintaksę kuriant dinaminius tinklalapius.

Šablonų žymas pridėkite su a garbanotas petnešas ir procento simbolis Iš abiejų pusių. Tokias žymas galite naudoti norėdami atlikti valdymo srauto ir logikos operacijas šablone. Kai kurios dažniausiai naudojamos šablono žymos:

  • Būklė: paleidžia kodo bloką, jei sąlyga yra teisinga.
    {% jeigu sąlyga %}...{% endif %}
  • Kilpa: kartojasi per iteruojamą elementą ir paleidžia kiekvieno elemento kodo bloką.
    {% dėl daiktas in kartojamas %}...{% endfor %}
  • Įtraukti: į dabartinį šabloną įtraukiamas kitas šablonas.
    {% įtraukti 'šablono_pavadinimas.html' %}
  • Blokuoti: apibrėžia bloką, kurį antriniai šablonai gali nepaisyti naudodami paveldėjimą.
    {% block_name %}...{% endblock %}
  • Prailginti: leidžia antriniam šablonui paveldėti ir išplėsti pirminį šabloną.
    {% extend parent_temp.html %}

Šios žymos suteikia lankstų ir išraiškingą būdą generuoti HTML turinį, pagrįstą dinaminiais duomenimis, ir valdyti programos logiką.

Šablono paveldėjimas

Jinja Templating palaiko šablono paveldėjimą. Tai leidžia apibrėžti pagrindinį (pagrindinį) šabloną su bendru išdėstymu ir skyriais, kuriuos antrinis šablonas gali išplėsti arba nepaisyti. Vaiko šablonas gali naudoti Prailginti žyma, kad paveldėtų ir išplėstų pirminį šabloną.

Sukurti base.html failą šablonus katalogą su tokiu kodu.

html>
<html>
<galva>
<titulą>{% block title %}Paprastas tinklaraštis{% endblock %}titulą>
galva>
<kūnas>
<h1>{% block heading %}Paprastas tinklaraštis{% endblock %}h1>

{% blokuoti turinį %}
{% endblock %}

{% include "footer.html" %}
kūnas>
html>

Tokiu būdu turite pirminį šabloną, kuriame yra bendras visų jūsų šablonų kodas, leidžiantis antriniam šablonui paveldėti ir prireikus jį išplėsti.

Viduje šablonus katalogą sukurti a footer.html failą su tokiu kodu.

<poraštė>
<p>© 2023 m. paprastas tinklaraštis. Visos teisės saugomos.p>
<ahref="{{ url_for('about') }}">Apiea>
poraštė>

footer.html yra įtrauktas šablonas, kuriame yra poraštės skyriaus HTML kodas. Galite pakartotinai naudoti jį keliuose puslapiuose įtraukdami jį į pagrindinį šabloną naudodami Įtraukti žyma.

Viduje šablonus katalogą sukurti a blog.html failą su tokiu kodu.

{% išplečia "base.html" %}

{% block title %}Paprastas tinklaraštis – tinklaraščio puslapis{% endblock %}

{% block heading %}Paprastas tinklaraštis – tinklaraščio puslapis{% endblock %}

{% blokuoti turinį %}
<h2>Bendras pranešimų skaičius: {{ pranešimų|ilgis }}h2>

{% įrašų įrašuose %}
<divklasė="post">

{% if post.status == 'paskelbta' %}
<h3>{{ post.title }}h3>
<p>{{ post.content|sutrumpinti }}p>
<p>Paskelbta: {{ post.publication_date }}p>

<h4>Komentarai:h4>
<ul>
{% komentarui post.comments %}
<liklasė="komentuoti">{{ comment.author }}-: {{ comment.content }}li>

{% endfor %}
ul>
{% Kitas %}
<p>Šis įrašas vis dar veikia juodraščio režimu.p>
{% endif %}
div>
<val>
{% endfor %}
{% endblock %}

Šis vaiko šablonas paveldimas iš base.html naudojant Prailginti žyma. Jis nepaiso konkrečių blokų, apibrėžtų pagrindiniame šablone, kad tinklaraščio puslapiui būtų pritaikytas turinys. Ji taip pat apima būtiną logiką ir iteraciją, kad būtų rodomas įrašas ir susiję komentarai.

Išraiškos

Jinja palaiko daugybę išraiškų, įskaitant aritmetines operacijas, palyginimus ir logines operacijas. Pavyzdžiui:

{{2 + 2}} // išvestis: 4

Kintamasis pakeitimas

Norėdami išvesti kintamuosius šablone, įtraukite juos į dvigubus skliaustus. Pavyzdžiui:

{{post.title}} // išvestis: „Pirmasis tinklaraščio įrašas“

Filtrai

Filtrai modifikuoja kintamojo išvestį. Galite pridėti vieną po kintamojo naudodami vamzdžio simbolį (|). Pavyzdžiui:

{{post|ilgis}} // išvestis: 2

Savo šablonuose galite pridėti eilutinių ir kelių eilučių komentarų. Jinja nepaisys šių komentarų šablono pateikimo metu, todėl jie bus naudingi pridedant paaiškinimų šablone.

{# #} // eilutę

{% komentaras %}... {% end comment %} // kelių eilučių

URL

Kad galėtumėte generuoti teisingus hipersaitus į kitus programos puslapius, Jinja šablono kontekste yra a url_for funkcija. Pavyzdžiui:

<ahref="{{ url_for('about') }}">Apiea>

Aukščiau pateiktas kodas tampa http://localhost: 8000/apie. Taip pat pamatysite, kaip naudoti url_for funkcija, kad vėliau gautumėte statinius failų kelius.

Tai tik keletas pagrindinių Jinja Templating sintaksės aspektų. Jinja Templating suteikia daug daugiau funkcijų ir funkcijų, tokių kaip makrokomandos, šablono kontekstas ir kt., kad šablonų kūrimas ir tinkinimas būtų efektyvus ir lankstus.

Duomenų perdavimas į šablonus

Dabar, kai turite paruoštus šablonus, turite perduoti duomenis iš savo FastAPI galinių taškų į šablonus, kad jie būtų pateikti.

Pridėkite šį kodą prie pagrindinis.py failas:

 fastapi importuoti FastAPI, užklausa
fastapi.atsakymai importuoti HTMLResponse

@app.get("/", response_class=HTMLResponse)
asyncdefskaityti_postus(užklausa: užklausa):
grąžinti šablonus. TemplateResponse("blog.html", {"prašymas": prašymas,
"postai": fake_posts_db})

Kodas apibrėžia „FastAPI“ galinį tašką, kuris apdoroja GET užklausą pagrindiniam URL („/“) ir grąžina HTMLResponse sukurtas iš blog.html šabloną. Jis perduoda kontekstinį žodyną, kuriame yra srovė prašymo objektas ir fake_posts_db, į šabloną. Tokiu būdu Jinja gali pateikti tikslius ir dinamiškus duomenis.

Apsilankykite http://localhost: 8000/ naršyklėje ir turėtumėte pamatyti kažką panašaus:

Sėkmingai perdavėte duomenis į atvaizdavimo šablonus.

Statinių failų aptarnavimas

Be dinaminių šablonų pateikimo, FastAPI taip pat teikia statinių failų, tokių kaip CSS, JavaScript failai ir vaizdai, aptarnavimą.

Naudosite CSS, kad pagerintumėte puslapio išvaizdą.

Viduje statinis katalogą, sukurkite a stiliai.css failą su tokiu kodu.

kūnas {
šrifto šeima: Arial, be serifo;
marža: 0;
kamšalas: 20px;
fono spalva: #f5f5f5;
}

h1, h2, h3, h4 {
spalva: #333;
}

.post {
fono spalva: #fff;
kamšalas: 20px;
paraštė-apačia: 20px;
pasienio spindulys: 5px;
dėžutė-šešėlis: 0 2px 4pxrgba(0, 0, 0, 0.1);
}

.posth3 {
paraštė-viršus: 0;
}

.postp {
paraštė-apačia: 10px;
}

.postul {
sąrašo stiliaus: nė vienas;
kamšalas-kairėje: 0;
}

.komentuoti {
paraštė-apačia: 10px;
kamšalas: 10px;
fono spalva: #f9f9f9;
pasienio spindulys: 5px;
}

poraštė {
fono spalva: #f2f2f2;
kamšalas: 10px;
teksto lygiavimas: centras;
}

Modifikuoti galva elementas base.html šabloną taip:

<galva>
<titulą>{% block title %}Paprastas tinklaraštis{% endblock %}titulą>
<nuorodahref="{{ url_for('static', path='/styles.css') }}"rel="stiliaus lapas">
galva>

Funkcija url_for() generuoja URL (kelią) stiliai.css (/static/styles.css) failą statinis katalogą, kurį automatiškai aptarnauja FastAPI.

Apsilankykite http://localhost: 8000/ savo naršyklėje.

Tos pačios procedūros taikomos teikiant vaizdo ir „JavaScript“ failus.

Nepamirškite vadovautis geriausios praktikos pavyzdžiais

Dirbant su Jinja Templating FastAPI, svarbu laikytis tam tikros geriausios praktikos, kad būtų užtikrinta gerai organizuota ir efektyvi kodo bazė.

  • Tvarkykite šablonus tam skirtame kataloge ir apsvarstykite galimybę naudoti susijusių šablonų pakatalogius.
  • Naudokite šablonų paveldėjimą, kad sukurtumėte daugkartinius bazinius šablonus ir išplėstumėte juos konkrečiam turiniui.
  • Atsargiai pasirinkite duomenis, kuriuos norite perduoti į šablonus, kad naudingoji apkrova būtų nedidelė, ir dažniausiai naudojamiems duomenims naudokite konteksto procesorius arba tarpinę programinę įrangą.
  • Pasinaudokite Jinja Templating funkcijomis, pvz., makrokomandomis, filtrais ir valdymo struktūromis, kad pagerintumėte kodo pakartotinį naudojimą ir skaitymą.
  • Optimizuokite našumą diegdami statinių šablonų talpyklos strategijas, naudodami HTTP talpyklos antraštes ir profiliuodami našumo kliūtis.

Laikydamiesi šios geriausios praktikos, galite palaikyti struktūrinį projektą, optimizuoti atvaizdavimo našumą ir efektyviai panaudoti Jinja Templating funkcijas savo FastAPI programose.

FastAPI naudojimas RestAPI kūrimui

Neskaitant programų, kurioms reikia atvaizdavimo šablonų, kūrimo. FastAPI puikiai kuria RestAPI dėl savo didelio našumo, paprastos naudoti sintaksės, automatinio dokumentacijos generavimo ir mastelio. Dėl šių savybių „FastAPI“ idealiai tinka efektyviai kuriant patikimas žiniatinklio API.