Általános nézetek használata az adatok szerkesztéséhez

Befejeződött

Az adatok megjelenítéséhez szükséges kódhoz hasonlóan a felhasználók számára az adatok módosításának engedélyezésére vonatkozó kód is ismétlődő. Ez azért is fárasztó lehet, mert az adatok érvényességének és helyes elküldésének biztosításához több lépésre van szükség. Szerencsére az általános nézetrendszer egyszerűsítheti a funkció engedélyezéséhez szükséges kód mennyiségét.

Új elemek létrehozása

Mielőtt megvizsgálnánk, hogyan egyszerűsítheti a Django a fejlesztést, át kell tekintenünk azt a folyamatot, amely lehetővé teszi a felhasználók számára az adatok módosítását. Vizsgáljuk meg, hogy a kiszolgáló milyen munkafolyamatokkal kezeli egy új elem vagy adat létrehozásának folyamatát, valamint a HTML-űrlap létrehozásának folyamatát.

Létrehozási munkafolyamat

A felületen az a kód, amely lehetővé teszi a felhasználó számára, hogy létrehozhasson egy elemet, jelentéktelennek tűnhet. Mint kiderült, ez egy megtévesztően érintett folyamat.

  1. A felhasználó get kérést küld, amely jelzi, hogy az űrlap új elemet szeretne létrehozni.
  2. A kiszolgáló egy speciális jogkivonattal küldi el az űrlapot a helyek közötti hamisítás (CSRF) megakadályozása érdekében.
  3. A felhasználó kitölti az űrlapot, és kiválasztja a küldést, amely post kérést küld az űrlap kitöltésének jelzésére.
  4. A kiszolgáló ellenőrzi a CSRF-jogkivonatot, hogy ne történjen illetéktelen beavatkozás.
  5. A kiszolgáló ellenőrzi az összes információt, hogy az megfeleljen a szabályoknak. Ha az ellenőrzés sikertelen, hibaüzenet jelenik meg.
  6. A kiszolgáló megpróbálja menteni az elemet az adatbázisba. Ha nem sikerül, a rendszer hibaüzenetet ad vissza a felhasználónak.
  7. Az új elem sikeres mentése után a kiszolgáló átirányítja a felhasználót egy sikeres lapra.

Ehhez a folyamathoz elég kis kód szükséges! A legtöbb kazánlemez, ami azt jelenti, hogy minden létrehozáskor ugyanaz.

Űrlapok

A HTML-űrlapok létrehozása fárasztó folyamat lehet. A fejlesztők gyakran másolnak és illesztenek input be címkéket, listákat hurkolnak a legördülő listák létrehozásához és a választógombok beállításához. Amikor a modell megváltozik, az űrlapot frissíteni kell.

Lehet, hogy észrevette, hogy a Django-ban létrehozott modellek mindent tartalmaznak, ami az űrlap létrehozásához szükséges. A különböző mezők hozzáadásakor az adattípusokat jelöltük meg, amelyek különböző HTML-elemekkel vannak párosítva. Egy logikai mező például egy jelölőnégyzet, az idegen kulcs pedig általában egy legördülő lista.

Általános nézetek az adatok módosításához

Django egyik fő célja, hogy ne kelljen folyamatosan újra létrehozni ugyanazokat a kódblokkokat újra és újra. Az adatmódosítások céljának támogatása érdekében a Django általános osztályok és űrlapok gyűjteményét biztosítja a számítási feladatok kezeléséhez. Amint látni fogjuk, az összes szükséges kódot tartalmazza, és dinamikusan is létrehozhatja az űrlapot. Az adatok létrehozásához, frissítéséhez és törléséhez használt osztályok neve CreateView, UpdateViewés DeleteView.

CreateView

Az osztály CreateView használatával a felhasználó elemeket hozhat létre. Végigvezeti az előző folyamatot, és dinamikusan létrehozza az űrlapot. A sikeresség után megjelenik az újonnan létrehozott elem részletes lapja.

A többi általános nézethez hasonlóan megadhatja, model és template_name hozzá szeretné társítani. A legfontosabb különbség CreateView egy olyan tulajdonság felvétele fields , amelyben a szerkeszthető mezőket listázhatja. A tulajdonság használatával biztosíthatja, hogy a nem szerkeszthető mezők, például a létrehozás dátuma ne jelenjenek meg az űrlapon. Az új kutya létrehozásának nézete az alábbi példához hasonlóan néz ki:

from . import models
from django.views import generic

class DogCreateView(generic.CreateView):
    model = models.Dog
    template_name = 'dog_form.html'
    fields = ['name', 'description', 'shelter']

UpdateView

Az osztály UpdateView ugyanúgy viselkedik, mint a CreateView. Az egyetlen különbség az, hogy a paraméter alapján pk automatikusan betölt egy elemet. A Django ezt a konvenciót használja egy elem elsődleges kulcsához.

from . import models
from django.views import generic

class DogUpdateView(generic.CreateView):
    model = models.Dog
    template_name = 'dog_form.html'
    fields = ['name', 'description', 'shelter']

Miután sikeresen létrehozott vagy frissített egy elemet, a Django átirányítja az elem részletes lapjára. Lekéri a részletek URL-címét a társított modell használatával get_absolute_url . Ezt a módszert a megfelelő URL-cím visszaadásával valósíthatja meg. A megfelelő URL-címet lekérheti az URLconfból a következő használatával reverse: . A megjegyzés kwargs az útvonal vagy az pk elsődleges kulcs paraméterének átadására szolgál.

from django.db import models
# TODO: Import reverse
from django.urls import reverse
class Dog(models.Model):
    # Existing code
    def get_absolute_url(self):
        return reverse('dog_detail', kwargs={"pk": self.pk})

DeleteView

Az osztály DeleteView hasonló a következőhöz UpdateView: . Lehetővé teszi a felhasználó számára, hogy töröljön egy elemet, és azonosítsa a törölni kívánt elemet a használatával pk. Ellentétben a következővel UpdateView, fields nincs szükség rá, mert a teljes elemet törli. Mivel az elem nem lett újonnan létrehozva vagy frissítve, meg kell határoznunk, hogy hová szeretnénk átirányítani a felhasználót. Az átirányítást úgy hozhatjuk létre, hogy a success_url megfelelő értékre állítjuk. Az URL-címeket a következővel reverse_lazykeresheti meg: .

from . import models
from django.views import generic
from django.urls import reverse_lazy

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

Megjegyzés:

Az adatok Django-ba való betöltésének sorrendje miatt használjuk reverse_lazy .

Űrlapsablonok létrehozáshoz és frissítéshez

Az általános nézetek dinamikusan hozhatják létre a HTML-űrlapot. Mindössze egy sablont kell megadnunk, amely az űrlap helyőrzőjeként szolgál. A helyőrző sablon biztosítja, hogy az űrlap megegyezik a webhely többi részével. Szerencsére nincs szükségünk sok kódra a létrehozásához.

Az általános nézetek automatikusan létrehoznak egy változót form a sablon használatához. A Django által biztosított űrlapelemek megjeleníthetők címkékben <p> vagy .<table>

A form változó tartalmazza az összes megfelelő HTML-t az űrlap vezérlőinek létrehozásához. Nem tartalmazza magát a címkét vagy a <form>küldés gombot. A sablonnak négy elemet kell tartalmaznia:

  • A form POST beállítású methodelem, mert ez a beállítás elindítja a mentési műveletet a kiszolgálón.
  • A hamisítás megakadályozása érdekében a CSRF-jogkivonat hozzáadásához használt kód {% csrf_token %} .
  • A kód {{ form.as_p }} , vagy {{ form.as_table }} a dinamikusan létrehozott űrlap megjelenítése.
  • A submit gomb.

Az alábbi kód bármilyen általános nézetű űrlap gazdagépe lehet.

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Save</button>
</form>