Ismerkedés a nézetekkel
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 request
vesznek 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
ésget_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 views
modulunk. Az indexforgalmat, ahol nincs megadva elérési út (például www.contoso.com
) a hívott index
fü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 integer
szeretné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.