Ismerkedés a nézetekkel

Befejeződött

A programozás során a nézet általában olyan összetevő, amely információkat jelenít meg a felhasználó számára. A nézet által végrehajtott feladatok a keretrendszertől és a konvencióktól függően változhatnak, beleértve az adatok betöltéséért való felelősséget is.

A Django-ban a nézet általában az alábbiakért felelős:

  • Felhasználó kérésének érvényesítése.
  • A megfelelő adatok betöltése vagy módosítása.
  • Egy HTML-sablon visszaadása az adatokkal a felhasználónak.

A feltárást a nézetek manuális létrehozásával és a megfelelő URLconfok konfigurálásával kezdjük. Az URLconf azoknak az elérési utaknak a listája, amelyek az egyező mintát, a meghívandó függvényt és opcionálisan egy nevet jelölnek. Egy későbbi leckében látni fogjuk, hogyan képes a Django automatikusan kezelni a kézzel írt kód egy részét.

Nézet létrehozása

Ha teljesen új nézetet szeretne létrehozni a Django-ban, általában egy függvényt kell létrehoznia. A függvény általában a megfelelő kódot tartalmazza a következőhöz:

  • Hajtsa végre a felhasználó által kért feladatot.
  • Adja vissza a felhasználó számára megjelenítendő megfelelő adatokat tartalmazó sablont.

A nézetfüggvények mindig legalább egy, a felhasználó kérését jelképező paramétert requestvesznek igénybe. Szükség szerint további paramétereket is megadhat, ha további információt vár a felhasználótól az URL-címben, például egy elem nevét vagy azonosítóját. Ezeket az útvonalak létrehozásakor fogja regisztrálni, amelyekről a lecke későbbi részében beszélünk.

Adatok betöltése

A Django ORM használatával betölthet minden szükséges adatot a regisztrált adatbázisból.

A projekt, amelyet létrehozunk, két modellből áll, Shelter és Dog. Az összes objektumot betölthetjük, vagy más lekérdezéseket is végrehajthatunk a létrehozott modellek használatával. Az összes menedék betöltéséhez például a Shelter.objects.all(). Az egyes menedékhelyeket a .-sel Shelter.objects.get(pk=1)tölthetjük be.

Megjegyzés:

pk az elsődleges kulcs parancsikonja. Használhatja id és használhatja ugyanazt az eredményt, de a használat pk biztosítja, hogy a parancs működjön, ha az elsődleges kulcsot képviselő tulajdonságot egy másik névre módosította.

404-hibák

A webalkalmazások 404-ben előforduló hibája azt jelenti, hogy "nem található". Ajánlott eljárásként a 404-et kell visszaadnia, amikor nem létező objektumra vonatkozó kérést kérnek.

A Django parancsikonokat biztosít az adatok betöltéséhez:

  • get_object_or_404 és get_list_or_404: Betölt egy objektumot egy elsődleges kulccsal, vagy egy 404-et ad vissza a felhasználónak, ha nem található objektum.
  • get_list_or_404: Ugyanazt a műveletet hajtja végre, mint a másik parancsikon, kivéve, hogy egy szűrőparamétert fogad el.

A gyakorlatban használjuk get_object_or_404 .

A sablon renderelése

A Django templating motorja átveszi a html-sablont, amelyet létrehozunk, kombinálja az általunk megadott adatokkal, és kibocsátja a HTML-t a böngésző számára. A feladat végrehajtásához a segédfüggvény a következő render: .

A render függvénynek szüksége van a kérést képviselő objektumra, amely a request korábban kiemelt paraméter. A sablon nevét is adja meg, általában egy HTML-fájlt, amely egy sablonok nevű mappában fog elhelyezkedni.

Ha adatokat szeretne továbbítani a sablonba, egy szótárobjektumot context kell megadniarender. Az context objektum kulcs-érték párokat tartalmaz, ahol minden kulcs változóvá válik a sablonban.

Példa

Az összes menedéket megjelenítő nézet létrehozásához használhatja a következő kódot:

def shelter_list(request):
    shelters = Shelter.objects.all()
    context = { 'shelters': shelters }
    return render(request, 'shelter_list.html', context)

Elérési út regisztrálása

Szinte minden webes keretrendszer elérési utakat használ a felhasználói kérések feldolgozásához. Az elérési utak az URL-cím részét a tartomány neve és a lekérdezési sztring előtt (amely a kérdőjel után jön) függvényhívássá alakítják.

Egy hívás www.contoso.com/shelters meghívhat egy függvényt az összes menedék listázására, míg www.contoso.com/shelters/1 egy függvényt egy 1 azonosítójú menedék megjelenítéséhez. Az elérési utakat egy URLconf létrehozásával regisztrálhatja a Django-ban.

Tegyük fel, hogy van egy djangoi konvenciónak nevezett viewsmodulunk. Az indexforgalmat, ahol nincs megadva elérési út (például www.contoso.com) a hívott indexfüggvényhez views irányíthatjuk, és a következő elérési út használatával adhatunk neki nevetindex:

path('', views.index, 'index')

Virtuális mappákat is létrehozhatunk adott kérésekhez. Ha például az összes menedékhelyet fel szeretnénk sorolni, ha valaki kér /menedéket, a következő parancsot használhatjuk:

path('shelters', views.shelter_list, 'shelter_list')

URL-paraméterek

Gyakori eljárás, hogy paramétereket ad át egy alkalmazásnak az URL-cím részeként, például egy azonosítót vagy egy nevet. Mivel ezek az értékek megváltoznak, nem szeretnénk az elérési útjukba kódolni őket. A Django-ban speciális szintaxissal adhat meg paramétert. Ebben a szintaxisban megadhatja a várt adattípust, például egész számot és nevet.

Ha például egy adott menedéket azonosító alapján igénylő személy számára szeretne útvonalat létrehozni, akkor egy típusparamétert integerszeretnénk. (Ennek az az oka, hogy az elsődleges kulcs egész szám.) Ezután megadhatja a változóhoz használni kívánt nevet, amelyet ezután paraméterként ad át a nézetfüggvénynek. A paraméter azonosításának szintaxisa a következő: <int:pk>. Figyelje meg a típusdeklarációt, a kettőspontot, majd a változó nevét.

A teljes elérési út a következőképpen nézhet ki:

path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')

A társított nézetfüggvény a következő aláírással rendelkezik:

def shelter_detail(request, pk):
    # code

Az pk elérésiút-aláírás része paraméterként lesz átadva shelter_detail , mintha normál Python-függvénynek hívnánk.