Hallo und willkommen zu einem anderen Django
für alle gehen durch.
So
arbeiten Sie wahrscheinlich an dieser Stelle an Ihrer Autos-Zuordnung.
Dies ist unsere erste echte
Zuweisung zum Erstellen, Lesen, Aktualisieren und Löschen.
Eine Menge von dem, was diese Aufgabe ist,
ist, den Code, den
ich Ihnen in DJ4E-Samples gegeben habe, anzuschauen und ihn einzuziehen.
Klonen Sie das Repository für diese Zuweisung nicht.
Die DJ4E Samples ist ein Monster.
Es hat alle Arten von Sachen drin,
es ist viel zu komplex und Sie wollen nicht.
Sie möchten mit einer schönen, sauberen Anwendung beginnen.
Ihre vorherige Aufgabe war es,
eine wirklich winzige Anwendung nach unten
zu machen, wir werden diese Anwendung erweitern.
Deshalb haben Sie
diese DJ4E-Projekte bereits in Ihrem, wo immer es ist.
Also, was das
ist, ist diese Aufgabe,
das mit dem Beispielcode zu entwickeln.
Aber was ich wirklich
tun werde, ist, dass ich
den Beispielcode durchlaufen werde, weil es
neue Konzepte in diesem Beispielcode gibt.
Dies ist also eher ein Vortrag über
den Beispielcode als genau, wie die Zuweisung zu tun ist.
Aber wichtig ist, dass Sie
jede einzelne Zeile verstehen müssen, denn buchstäblich
ist jedes Programm, das wir für die nächsten n Wochen schreiben werden, eine Variation dieser CRUD.
Also diese Standardansichten,
die get 404,
all diese Sachen sind eine wirklich Grundlage in vielen Dingen.
Was wir finden, ist der
richtige Weg, diesen Code zu schreiben,
wie alles in Django,
ist wirklich klein und prägnant.
Werfen wir einen Blick auf den Code.
Nun, gehen wir weiter und führen den Code aus.
Gehen Sie zu Autos, und Sie müssen sich einloggen.
Die Idee davon ist, dass es zwei Tabellen gibt.
Es gibt eine Tabelle von Marken.
Also werde ich eine Marke hinzufügen
und dann werde ich ein Auto hinzufügen,
und das coole Ding daran ist das Neon
1, Kilometerstand 1.234, SakalCard.
Dann habe ich dieses coole Dropdown-Menü.
Also gibt es hier eine ganze Reihe von Formen,
es gibt Drop-Downs, es gibt eine
Viele-zu-Eins-Beziehung.
Dann habe ich diese Liste und ich kann sie aktualisieren und löschen.
Das ist also, wo unsere volle CRUD ist.
So können wir Marken hinzufügen,
anzeigen machen, Autos hinzufügen, usw.
Also das ist alles die Probe.
Also ist es sehr nah an dem, was es ist, dass Sie schreiben müssen,
es ist einfach nicht greifen und all das Zeug.
Lassen Sie uns damit beginnen, einen Blick zu werfen.
Also sitze ich hier in meinen DJ4E Samples.
Wenn Sie schauen, sehen Sie alle
meine verschiedenen Anwendungen unter einem Projekt.
Also haben wir die Autos,
aber ich möchte wirklich mit dem Authentifizierungscode beginnen,
wenn ich hier zurück zu Beispielen gehe,
lass mich ausloggen, den Code, mit dem ich mich anmelden kann.
Also, wenn ich direkt zu Autos gehe, um zu sehen, ob ich mich abgemeldet habe.
Sie werden feststellen, dass das, was es tut,
wenn ich direkt zu Autos gehe,
ist es leitet mich zu loggen,
und dann mit dem nächsten zurück zu auto.
Also diese Ansicht in Autos,
die /autos hat sich mit Login-Mixen geschützt.
Später werden wir uns anmelden,
Ihr Login wird nicht ganz so aussehen,
aber das ist derjenige, den ich auf Proben habe.
Sie müssen es noch nicht hübsch machen,
eine bevorstehende Aufgabe wird alles hübsch machen.
Also, jetzt sind wir bei Autos und wir sind eingeloggt.
Ihre Anwendung muss noch einige Dinge hier haben,
aber ich bin mehr daran interessiert,
Ihnen wirklich die Essenz
der Ansichten in diesen Autos zu zeigen.
Lassen Sie uns kurz darüber nachdenken, wie die automatische Anmeldung funktioniert.
Wenn ich also dj4e-samples/settings.py anschaue,
müssen Sie diese Authentifizierung eingesteckt haben.
Das ist im Grunde ein Haufen Code, einige Ansichten
usw., der von Django kommt,
und das war die ganze Zeit da,
als Sie Ihr Startprojekt gemacht haben.
Natürlich müssen
wir irgendwo hier drin die Autos haben, wo auch immer Autos sind.
Ja, Autos App Config,
du musst die Autos App reinziehen.
Wenn ich dj4e-samples/urls.py anschaue,
dann kann ich Autos hier finden,
und es muss eine Zeile geben, die im Grunde sagt:
„Auf der obersten Ebene
wird alles unter Autos an
die URLS-Datei in autos.py delegiert.
Aber auch dann gibt es die Konten.“
Wenn Sie sich erinnern,
ist dies eine Reihe von Ansichten, die von Django für uns kommen,
es ist für uns vorinstalliert.
Die Sache, die wir tun müssen, ist, dass wir
diesem eine Vorlage
mit dem Namen registration.html zur Verfügung stellen müssen.
Also ich denke, ich habe das in Home/Templates/Registrierung/.
Ja, das tue ich. Also habe ich eigentlich zwei Logins.
Ich habe eine wirklich einfache als login.html.
Dies ist der, den ich empfehle, mit dem Sie beginnen.
Später verwenden wir den Social Login. Das ist sehr einfach.
Es ist eine Anmeldeseite, die die Django-Formularfunktion verwendet.
Wenn Fehler ausgebildet werden,
bedeutet dies, dass ein Validierungsfehler vorliegt.
Es kam zurück und zeigte
diese Seite erneut und zeigte Ihnen einen Fehler.
Dann erstellen wir ein einfaches Postformular mit einer URL
, die eine umgekehrte Lookup zu einer Ansicht mit einem Namen von Login ist.
Dann setzen wir das CSRF-Token ein und dann nehmen wir das Formular an,
und ich mache das nur mit Absatz-Tags.
Das ist also ein einfacher Login,
das ist nicht der eigentliche, den wir zeigen.
Dann ist der nächste ein versteckter Wert, den Sie übergeben müssen
, damit er, wenn Sie
sich tatsächlich erfolgreich anmelden, zu Autos zurückkehren kann.
Wenn alles fertig ist, kommt es wieder
hierher, nachdem der Login abgeschlossen ist.
Damit Registrierung/Anmeldung,
können Sie dies in jede Ihrer Anwendungen einfügen,
aber Sie möchten es registration/login.html nennen.
Also, wenn ich einen Blick sehr schnell
und ich gehe in Home/Vorlagen,
das sind alle Vorlagen.
Wenn ich ein ls mache, werden Sie sehen, dass ich
ein Home/Templates/Home und ein Home/Templates/Registrierung habe.
Hier können Sie mehr als einen Ordner haben.
Wenn ich mir anschaue, was in der Registrierung ist,
sehen Sie, dass ich diesen einfachen Login habe und später
den komplexeren Login,
der uns die GitHub Login-Funktionen gibt.
Also, was das bedeutet, ist Login verwenden soziale.
Der Punkt liegt unter diesen Vorlagen,
Sie müssen nicht nur einen Unterordner haben,
Sie können mehrere Unterordner haben.
Das ist also die notwendige Konfiguration, um es so zu machen
, dass, wenn wir unseren Ansichten sagen, das Login-Mixin hinzuzufügen,
was wir in nur einer Sekunde sehen werden.
Wir sagen unseren Ansichten im Login, um das Login-Mixin zu verwenden,
dann weiß es, woher die Vorlage erhalten soll.
Das ist also nur ein Teil davon und
deine Anweisungen sagen dir, wie du das machst.
Also jede Anwendung, die Sie
bauen werden, oder jedes Projekt, das Sie bauen werden,
müssen Sie diese in die Einstellungen py
, urls.py setzen und dann die Vorlage erstellen.
Dann musst du anfangen,
Login mixin zu verwenden und dann
fängt alles einfach magisch zusammen zu kommen.
Lassen Sie uns also einen Blick auf die eigentliche Autos-Anwendung werfen.
Wir werden uns
hier ein paar verschiedene Dinge ansehen, Autos/URLs.
Ich werde eine Multi-Terminal-Registerkarte machen,
damit ich wirklich schnell zwischen Dateien zurückwechseln kann.
Sie haben wahrscheinlich einen besseren Texteditor als ich.
Also habe ich URLs,
ich werde einen Blick auf die autos/views.py werfen.
Dann werde ich mir autos/model.py ansehen.
Dann werde ich mir autos/forms.py ansehen.
Lassen Sie uns also diese vier Dateien,
URLs, Ansichten, Modelle, Formulare durcharbeiten.
Wahrscheinlich lasst uns zuerst Modelle machen.
Das ist also ziemlich unkompliziert.
Wir werden eine Make-Objektklasse erstellen.
Es wird ein Zeichenfeld
mit einigen Validatoren darin haben.
Wir spielen damit mit Formen.
Sie können Validatoren in Modellen einfügen.
Wir haben zuvor Validatoren in Form gesehen,
aber es gibt einen Validator, der im Grunde sagt,
wir werden keine Daten akzeptieren, die in
diese Datenbanktabelle kommen,
es sei denn, es gibt mindestens zwei Zeichen.
Diese _str_, du machst das schon eine Weile.
Das ist im Grunde, wenn Sie
ein Modellobjekt eine tatsächliche Marke nehmen und es drucken,
es sagt, welches der Felder,
in diesem Fall gibt es nur ein Feld.
Das heißt nur, wenn wir
ein Modellobjekt in eine Zeichenfolge konvertieren,
können wir entscheiden, wie das aussieht.
Dann haben wir ein Automobil und es hat
einen Spitznamen mit einem MinLengthValidator, max_length von 200,
und Kilometerstand, die ein ganzzahliges Feld hat, einen Kommentar,
das ein Feld mit 300 Zeichen ist,
und dann auch einen Fremdschlüssel in.
Dies als eine Eins-zu-Viele- oder Viele-zu-eins-Beziehung,
nicht eine Viele-zu-Viele-Beziehung, nur ein Fremdschlüssel in Make.
Dann gehen wir zu on_delete
CASCADE, was wirklich bedeutet, wenn Sie ein Make löschen,
dann
werden die entsprechenden Auto-Einträge automatisch gelöscht.
Das ist also ein ziemlich einfaches Modell,
eigentlich sehr, sehr einfach.
Wieder einmal definieren wir
diese _str_ (self) immer, so dass wir wissen, dass, wenn Sie
es nur wie in der
Admin-Schnittstelle zeigen oder wenn Sie
es nur drucken oder einfach nur
das Modell selbst in eine Zeichenfolge konvertieren,
das Feld unter diesen Feldern, das
verwendet werden soll, das Nickname-Feld,
nur um den Endbenutzern zu zeigen.
Das ist also die Models-Datei.
Schauen wir uns die Formulardatei als nächstes an.
Die Formulardatei ist also interessant,
weil wir Formulare gesehen haben, die
nur selbst Formen sind,
aber das ist eine besondere Art von
Form und dann ist es eine ModelForm.
Darin haben wir normalerweise in den anderen Modellen,
wir hatten alle diese Felder,
und wir haben sie in und es sah
viel wie eine Modelldatei aus, wo wir
ein Zeichenfeld haben, PositiveIntegerField.
Aber was wir im Grunde sagen, ist, weißt du was?
Wir machen hier ein Formular.
Wirklich, alles, was wir tun möchten, ist,
alle Felder aus
dem Make-Modell zu nehmen und sie zu bilden Felder zu machen.
Eine Form und ein Modell sind also zwei verschiedene Dinge.
Ein Formular ist etwas, das
zwischen der Ansicht und der Vorlage geht,
und wie Sie sehen werden,
geht es auch automatisch in die Modelle nach unten,
so dass dies genau wie alle Felder machen.
Erstellen wir ein Formular, weil
Formularobjekte nicht mit Modellen verknüpft werden müssen.
Aber in diesem Fall werden wir
ein Formularobjekt aus einem Modell ableiten.
Anstatt die Form zu erweitern, erweitern wir ModelForm.
Das ist also ein ModelForm muss haben,
und das sind nur einige Daten, die besagen, dass das Modell,
aus dem wir alle unsere Felder ziehen werden, das Make-Modell ist,
und es hat nur eine Sache, die ein Name ist.
Das war's. Dies ist das automatische Generieren
eines Formulars, dass, wenn
wir es geändert und ein anderes Feld hier hinzugefügt
haben, dieses Make-Formular automatisch ein Feld hat.
Sie können ihm eine Liste von Feldern geben,
_ _ alle _ _ ist
wie ein Signal zu sagen: „Gib mir einfach alle von ihnen.“
Jetzt könnte es einige interne
Dinge geben, wie erstellt und
aktualisiert unter oder etwas, das Sie nicht verwenden möchten.
Also, das ist eine Form, denken Sie daran, wie Formulare funktionieren.
Wir decken das vorher ab. Werfen wir einen Blick auf unsere URLs.
Jetzt sieht eine Menge davon
ziemlich ähnlich wie Dinge aus, die wir getan haben.
Wir haben im Grunde eine Haupttabelle,
die unsere Autoto-Tabelle ist,
und unsere Nachschlagetabelle, die unsere Make-Tabelle ist.
Dann haben wir drei Dinge,
gibt es die Haupt-Listenansicht,
die Liste aller Autos ist.
Es gibt die Haupt-Make-Listenansicht,
die Liste aller Marken ist.
Dann können wir
einen neuen erstellen, der keinen Primärschlüssel hat,
weil ein Teil der Ideen, die
erstellen, eine neue Sache macht,
die einen Primärschlüssel generieren wird.
Dann haben wir ein Update und ein Löschen.
Also haben wir eine lesen, erstellen, aktualisieren, löschen.
Es ist also nicht gerade Cred,
aber du siehst all diese vier Dinge.
Also haben wir Ansichten,
und wir benennen diese Ansichten, so dass wir
sie in unseren Ansichten
selbst und in unserer Vorlage referenzieren
können, damit wir Links zwischen ihnen herstellen können.
Diese sind also ziemlich
unkompliziert und nicht so anders.
So beginnt der Spaß zu passieren, wenn wir in der views.py sind.
Also loggen
Sie sich Mixin ein, wenn Sie sich vom Autor von z Walk-through erinnern,
fügen Sie dies einfach zu einer Ansicht hinzu und es
sagt nur im Grunde, dass
Sie nicht zu dieser Ansicht gelangen können, es sei denn
, Sie sind angemeldet und wenn Sie nicht angemeldet sind,
wird es zur
Datei login.html stoßen und dann zurück springen, nachdem Sie erledigt.
LoginRequiredMixin ist also alles, was wir tun müssen.
Wenn Sie zum Autor z Beispiel gehen,
werden Sie sehen, wie ich das von Hand getan habe.
Du willst es nicht von Hand machen,
du rufst einfach Login Mixin an.
Nun, also ist diese Hauptansicht eine Listenansicht,
und lassen Sie uns
einen Blick darauf werfen, wie das aussehen wird.
Dies ist die Listenansicht.
Also werden wir, wie viele Audits wir haben,
wir werden durch diese Liste schleifen,
wir werden alle Audits aus der Datenbank abrufen.
Dann werden wir eine fügen Sie die automatische Verbindung,
dann eine Ansicht, die machen Link mit
einer Anzahl von machen gibt es und fügen Sie eine Marke hinzu.
Also lassen Sie mich auch dann in Autos Vorlagen gehen,
Autos wieder, und Auto-Liste.
Das ist also die Vorlage, die das macht.
Also gibt es ein paar Dinge, die wir bekommen,
wir bekommen eine Auto-Liste.
Jetzt werden die Namen nicht auf Sie gezwungen,
aber es gibt Konventionen, die sich in einem Moment ergeben,
wir werden wirklich nützlich aussehen.
Also werden wir eine Auto-Liste bekommen.
Wenn wir in unsere Ansichten zurückgehen,
sehen wir, dass wir sagen,
alle Objekte aus der Auto-Tabelle erhalten,
alle Auto-Klassenobjekte rufen sie alle ab,
vorbei an ihnen in den Kontext als auto_list.
Jetzt wollen wir auch in der Lage sein
, diese kleine Zählung zu zeigen, das ist Nummer zwei,
also werden wir fragen,
gehen Sie zu den Make-Objekten
alle, aber geben Sie mir keine Liste von ihnen,
zählen Sie sie und geben Sie mir eine Nummer.
So make count ist dort stecken und Sie werden
sehen, ob die Anzahl größer als Null ist.
Wir können die Anzeige und die automatische Schaltfläche zeigen,
und es zeigt auch irgendwo die Make-Count,
alle Marken anzeigen, eine Marke hinzufügen,
und die Make-Count kommt hier heraus.
Also, das ist eine andere Sache, die wir reinlegen.
Die automatische Liste, die wir durchlaufen werden, und diese
Iterationsvariable von auto wird
jedes der einzelnen Dinge durchlaufen,
und Spitzname, make usw.,
das ist direkt aus der Datei models.py.
Es gibt die vier Dinge, die jedes Auto hat,
und wir drucken das ganze Zeug aus.
Sie erhalten auch den Primärschlüssel,
und so werden wir eine Update-URL zu machen,
und diese URL ist für autos: auto_update.
Wenn Sie also in urls.py schauen,
sehen wir diese automatische Aktualisierung nachschlägt,
dies gibt uns einen Pfad zur Ansicht,
aber dieser bestimmte Pfad benötigt
einen Parameter, der ein Primärschlüssel ist
, und so dass dieses URL-Vorlagen-Tag,
Autos muss die auto.id haben. durch die Modelle,
Sie haben eine, und Sie machen eine auto_create,
das ist ziemlich einfach.
Aber eine der Regeln ist, dass Sie
mindestens eine Marke haben müssen, bevor Sie ein Auto machen können,
denn wenn Sie sich erinnern,
muss ein Auto hinzufügen,
dass diese Dropdown-Liste befüllt werden kann und das aus der Make-Tabelle gezogen wird,
und das ist im Grunde der Weg um das herum.
Das ist die Hauptansicht.
Hier geht's, aktualisieren.
Das ist die Autos-Ansicht, und wenn wir die Make-Ansicht machen,
machen wir dasselbe.
Wenn wir uns die Make-Liste ansehen,
machen wir die gleiche grundlegende Sache,
sehen alle Marken an,
und jetzt haben wir Update und Löschen.
Auf diese Weise müssen Sie nicht zählen.
Wir wollen nur alle Objekte greifen,
wir wollen es in einen Kontext unter Make-Liste setzen,
und dann machen wir Liste auf dem HTML,
und das ist noch einfacher.
Es geht nur durch die Make-Liste,
es kommt durch den Kontext.
Wenn es keine gibt, drucken wir das nicht aus,
und dann löschen wir den Namen davon,
und dann haben wir ein Update und eine Löschtaste,
die zum Update und Löschen geht,
und natürlich, wenn Sie in urls.py schauen,
haben diese auch die Aktualisierung und Löschen Primärschlüsselanforderungen,
und so Sie haben einen Primärschlüssel
, den Sie hier übergeben müssen,
um diese URL zur richtigen URL zu machen,
und dann nur einige Links,
um zu den verschiedenen Dingen zurückzukehren, damit
wir wieder zu Autos,
Anzeigen macht, eine neue Marke hinzufügen können.
Jetzt stornieren Sie das ganze Zeug.
Das ist also die views.py
zum Auflisten der Autos und der Marken.
Jetzt möchten wir die Make Create-Ansicht erstellen.
Wenn wir also einen Blick auf die make create view werfen
, fügen Sie eine Marke hinzu.
Das wird dieses Formular erstellen.
Ich kann das hier größer machen.
Es kann diese Form schaffen,
wo wir eine Sache namens Chevy einfügen werden.
Also brauchen wir einen Weg, um dieses Formular zu machen.
Wir machen es ein Login erforderlich,
wir werden nicht zulassen, dass Leute dies tun.
Wir werden einige Variablen haben, die klassenweit sind,
wie welche Vorlage wir verwenden möchten,
und success_url ist, nachdem wir dies richtig gemacht haben.
Nun, wenn Sie
es einfach einreichen und es sich beschwert, tut es es nicht.
Aber wenn du es richtig gemacht hast,
wohin willst du danach gehen?
Chevy, wo willst du danach hin?
Dies ist Controller-Funktion.
Ich möchte zur automatischen Liste zurückkehren,
und so ist die success_url
zu autos:all was in urls.py diese Hauptansicht ist.
Das ist der Name der Hauptansicht,
und so, wenn wir hier gehen,
welche Vorlage zu verwenden und welche success_url.
Wenn wir eine get-Anfrage
machen, werden wir ein Formular für die Marke erstellen, die aus dem Make-Formular stammt,
aber wirklich kommt es vom Make-Modell,
das nur ein Zeichenfolgenfeld ist.
So einfach wie das. Wir verwenden das wieder.
Wir sagen nur, lasst uns eine Form machen
, die von hier zieht.
Wir müssen ein Formular übergeben,
da Modelle nicht verwendet werden können, um diesen Bildschirm zu erstellen.
Dieser Bildschirm stammt von einem Formular.
Ok. Wenn wir einen Blick auf die Vorlage werfen,
wenn wir uns die Make erstellen
Vorlage oder Formular machen.
Das ist also die Vorlage, die wir verwenden werden, um ein Formular zu erstellen.
Wir werden form_as_table brauchen.
Das ist also von der Art, wie wir Formen gemacht haben.
Setzen Sie das CSRF-Token,
Sie erstellen eine Tabelle,
die als Absätze oder als Tabellen sein könnte.
Aber was auch immer, Sie brauchen dieses Formularobjekt.
Sie müssen also das Formularobjekt übergeben.
Also hier sind wir, wir werden ein Formular machen
und dann gehen wir zum Formularobjekt in,
und dann werden wir auf self.template
autos.makeform html rendern.
Dann werden wir das für die Get zurückgeben.
Dann, wenn wir auf die Schaltfläche drücken
die Submit-Taste, Fügen Sie eine Marke,
wir drücken den Submit-Button,
es kommt in den Beitrag,
weil wir ein Formular Post gemacht, kommt in.
Tu das nicht. Das ist schrecklich.
Ich hasse es, wenn vi das macht.
Aber hier geht's, wir sind zurück.
Ja. Also post kommt in,
request.post hat alle
Schlüsselwertpaare, die diese Schlüssel-Wert-Paare sind, wie durch das Formular definiert.
Also sagen wir, lasst uns ein Make-Formular mit
den anfänglichen Daten machen, die von der Anfrage Post kommen.
Angesichts der Tatsache, dass das Formular es erzeugt
hat, weiß es, wie die Namen dieser Felder sind,
und dies ist etwas, das hinter der Funktionsweise von Formularen verbirgt.
Aber es überprüft auch, ob die Formulardaten gültig sind
, und das bedeutet, dass wir alle diese Validator-Regeln befolgt werden.
Wenn die Validator-Regeln nicht befolgt werden,
wenn das Formular nicht gültig ist,
senden wir es einfach zurück.
Also dieser Code hier,
dieses Formular ist kein gültiger Code.
Wenn ich einen einzigen Buchstaben A einfüge und „Submit“ drücke,
wird es zurückkommen und
das Formular und all die Fehler Sachen neu rendern,
all das wird alles von diesem Formularcode behandelt,
dieser Django-Formularcode findet heraus, was falsch ist.
Nur ein bisschen vorbei, damit ich
schneller darauf zurückkommen kann. Da gehen wir.
Es findet heraus, was daran falsch ist,
macht eine Fehlermeldung,
die Fehlermeldung kam von models.py genau hier.
Nein, genau hier.
Dann ging durch forms.py, weil es
eine Form ist, die wir letztlich von der
Modellform geerbt haben. Hast du es kapiert?
Das ist also cool. Das ist also die Fehlerbedingung,
und sonst machen wir form.save.
Nun ist die Sache hier, die wirklich super
cool ist, weil dieses Formular
ein Modellformular ist und
die Feldnamen die gleichen wie
die Feldnamen im Modell sind,
und so macht es tatsächlich eine Speicherung auf dem Modell selbst.
In gewisser Weise enthält das Formular die Modelldaten
, die von der Postanforderung kamen, und speichert es dann.
Damit wird das Formular gespeichert.
Es setzt es ein, und dann
leiten wir einfach zurück zur Anforderungs-URL.
Das ist ziemlich prägnant.
Wir ziehen die alten Postdaten ein,
wir überprüfen, ob es schlecht ist, wenn es schlecht ist,
wir senden das Formular an
genau die gleiche Vorlage zurück, die wir
getan haben, und dann speichern wir es, wenn es gut ist,
und dann werden wir zur Erfolg-URL springen.
Das ist eine schöne Sache.
Aber genau wie in Django die ganze Zeit,
ist dies eine viel wortere Sache zu
tun, obwohl das super prägnant ist.
Wenn Sie dies in fast jeder anderen Sprache tun,
wären Sie wie 75 Zeilen Code,
und hier haben wir wie 15 Zeilen Code.
Aber es stellt sich heraus, dass es in Django
fast immer einen prägnanteren Weg gibt, dies zu tun.
Wir haben eine generische Ansicht erstellen.
Sie können sich die Dokumentation für
diese generische Create-Ansicht django.views.generic.edit ansehen.
Gehen wir einfach und googeln das Zeug.
Ich habe immer nur einen Punkt hier gesetzt und das
bringt mich normalerweise richtig dazu
, weil das das eigentliche Paket und die Klasse innerhalb
des Pakets ist. Oh, nein.
Entschuldigung. Sie dachten, das wäre ein Domain-Name,
also funktionierte die Suche nicht.
Aber jetzt werde ich einfach Django sagen,
etwas,
das zumindest mit einer Suche nach mir zu tun hat,
generische Bearbeitungsansichten springen zum CreateView.
So können Sie all diese Sachen durchlesen,
generisches CreateView tatsächlich.
Habe ich einen Verweis darauf?
Also, da gehst du hin. Sieh dir das an.
Nun, genau wie
einige der anderen Ansichten, die wir geerbt haben,
haben eine Menge Funktionalität in ihnen.
Also, wenn ich eine AutoCreate machen möchte,
ist das alles, was es braucht.
Nun, AutoCreate und MakeCreate
für alle Absichten und Zwecke,
genau das gleiche tun.
Was also in AutoCreate passiert,
weil wir CreateView erweitern,
haben wir drei Bits von Metadaten,
wir sagen ihm, welches Modell wir verwenden möchten,
welche Felder aus diesem Modell wir wollen
und wo die Erfolg-URL zu gehen ist.
Dann erzeugt dies all diesen Code.
Wir haben diesen ganzen Code geerbt.
Sie werden feststellen, dass
hier nichts fest codiert ist außer dem MakeForm.
Jetzt müssen wir nicht einmal ein Formular für die Auto erstellen,
weil dieser Code hier das Formular erstellt.
Nicht nur das, sondern es verwendet diesen Namen
Auto, um die Vorlage auszuwählen.
Also, wenn ich auto_form
mache, muss ich das verwenden.
Ich benutze das, das ist mein Basis-Bootstrap.
Mach dir deswegen keine Sorgen.
Es kennt also den Namen
der Vorlage, die es verwenden wird.
Ich muss nur sagen, welche Vorlage hier verwendet werden soll,
weil sie die Vorlage ableitet,
auto_form.html ist die Vorlage.
Ziemlich cool. Ziemlich genial und cool.
So findet es automatisch das und die success_url.
Das ist also alles, was nötig ist.
Tatsächlich
hätte ich in diesem MakeCreate diesen ganzen Code von hier nach hier löschen können,
sondern einfach ein CreateView machen, indem ich CreateView erweitert habe.
Also zeige ich dir das nur, weil ich will, dass du
siehst, was wirklich los ist.
Aber so schreiben Sie Ihren Code nicht.
So schreiben Sie Ihren Code.
Also jetzt möchte ich Ihnen
die harte Art zeigen, ein Update durchzuführen.
Also, was ist ein Update? Werfen wir einen Blick auf den Code.
Also lassen Sie uns einen Blick auf die Sichtmachungen werfen.
Update ist die Sache, die
passiert, wenn wir hier
gehen und das wird zu MakeUpdate gehen.
Also hier ist MakeUpdate, hier ist urls.py. Es ist dieser hier.
Ich meine, suchen Sie nach dem Primärschlüssel-Update,
das dann, wenn Sie unter hier schauen,
wird es Autos Lookup ein Update sein.
Also werde ich den Chevy aktualisieren.
Es muss die alten Daten lesen,
es muss Ihnen zeigen,
und dann lassen Sie es uns aktualisieren und dann senden Sie es überprüfen,
natürlich, auf Validierungsfehler.
Dann leiten Sie uns zurück zu einer success_url.
Also, wenn wir uns die Ansichten ansehen,
werden wir wieder,
vorhersagen, es gibt einen viel einfacheren Weg, dies zu tun.
Also setzen wir diese Variablen oder die success_url,
welche Vorlage wir wollen, und das Modell.
Dann haben wir eine Get Anfrage.
Denn in der urls.py gibt es dieses int:pk,
wurden in diesem pk-Wert übergeben.
Nun, diese get_object_or_404 ist wirklich cool.
Diese get_object_or_404 (self.model pk=pk).
Das ist dieser Parameter, den wir
pk gleich übergeben und es ist üblich, dass sie denselben Namen haben,
aber dies ist ein Parameter für get_object_or_404.
Dieser zweite ist der Parameter
, der zu unserem get aufgerufen wurde.
Selbst.Modell, natürlich, ist machen.
Get_object_or_404 überprüft im Grunde, ob,
Ich werde dieses Update machen,
gehen wir zu Marken, lassen Sie uns ein Update machen.
Was es tut, ist, dass es diese Nummer nimmt,
diese drei hier, autos/lookup/3/update,
und es ruft die alten Daten ab.
Was passiert, wenn ich
versehentlich eine Nummer habe
, die nicht in der Datenbank existiert,
wie 9.999, und ich eine Get-Anfrage an diese Stelle mache?
Ich bekomme „Seite wurde nicht gefunden 404.“
Also, was hier passiert ist, ist irgendwie sagen Sie: „Hey,
lade dieses Objekt und gib es mir und der Variablen
, mach oder sprenge einfach in die Luft und sende einen 404-Fehler aus.“
Das sagt Ihnen also, was los ist,
die Sie nur sehen, „No Make entspricht der angegebenen Abfrage.“
Nun, im Allgemeinen sollten Sie diese nicht von Hand eingeben.
Drei es funktioniert, und so sprengt es nicht.
So ist get_object_or_404 eine Möglichkeit,
die alten Daten zu laden und dann
mit diesen Daten zu schützen oder einfach zu sprengen.
Also geh an diesem Punkt nicht weiter.
Dann machen wir
ein Formular und füllen es mit den alten Daten aus.
Also Instanz, was die Instanz macht.
Das ist also das Objekt.
Erstellen Sie ein MakeForm. Hier ist ein MakeForm.
Alle Felder des Modells
erben vom Modell Make.
Dann übergeben Sie es an die Vorlage make_form.html,
die wir uns gerade angesehen haben.
Diese Form kommt rein, das ist alles, was wir brauchen.
Dies ist sehr generisch aussehend.
Es kümmert sich wirklich nicht zu sehr.
Es ist alles ziemlich codiert in dieser Form,
die vom Modell abgeleitet wird.
Dann geben wir natürlich ein paar Sachen ein
und wir drücken „Submit“.
Es tut genau das gleiche wie das Erstellen,
und dass es gut funktioniert.
Zuerst muss es ein get oder 404 tun, weil
wir mit dem Primärschlüssel an das Ding posten.
Wir laden es hoch, um sicherzustellen, dass wir ein Objekt zu aktualisieren haben.
Dann erstellen wir ein neues Make-Formular
aus dieser Datenbank und ändern es dann.
Das ist also wie die Startdaten,
aber dann ändert es es es an den Daten.
In diesem speziellen Fall
ist Chevrolet der alte Wert in der Datenbank.
Wenn ich Bowtie sage,
Anfrage Post Labor Bowtie,
wird dies ein Chevrolet starten, aber in dieser Form
Objekt dann wird es Bowtie sein.
Natürlich, wenn es nicht gültig ist,
werden wir hier eine Fehlermeldung zurückgeben.
Wenn es gültig ist, werden wir
es speichern und so
wird dieser neue Bowtie dort gespeichert werden.
Wenn wir also unsere Marken sehen,
sehen wir, dass es jetzt Bowtie ist,
und wir werden zur Erfolg-URL umleiten.
Nun, an diesem Punkt,
würde ich hoffen, dass Sie vorhersagen können,
was als nächstes passieren wird.
AutoUpdate, erweitert die Aktualisierungsansicht,
die allgemeine Bearbeitungsansicht.
Es sagt, welches Modell es ist,
welche Felder Sie wollen und
wo Sie gehen, wenn es erfolgreich ist.
Dann macht es alles, was hier drin ist.
Buchstäblich könnte ich gehen und sagen
genau die gleichen Worte für make delete,
was passiert, wenn Sie hier eingehen
und Sie löschen und dann haben Sie einen Abbrechen,
gibt es eine Bestätigungslöschung.
Der Name dieser Vorlage wird nicht zufällig gewählt,
er muss als confirm.delete bezeichnet werden,
das Modell confirm.delete.
Da gehst du. Sie müssen CSRF-Token.
Du bekommst die Marke als Objekt darin.
Das erzeugt also diese Ausgabe.
Es gibt keine Form in diesem hier.
Es gibt nur die Marke, die von
Objekt oder 404 geladen wird und dann gibt es make in und rendert es.
Dann, wenn der Beitrag passiert, ruft er ihn ab.
Wenn es dort ist,
überprüft ein 404 erneut auf fehlerhafte Daten und löscht sie
und springt dann zur Erfolg-URL ab.
Es braucht nicht viel zu erraten, was ich als nächstes tun werde,
und das heißt, wenn Sie die Löschansicht erweitern,
erhalten Sie den ganzen Code kostenlos.
Sie sagen einfach, welche Modellfelder
und wohin für den Erfolg gehen sollen.
Also das Wichtigste ist,
als du deine Hausaufgaben machst,
bin ich sicher, dass einige von euch
das ganze Zeug kopieren und einfügen werden. Das ist falsch.
MakeCreate, MakeUpdate und
MakeDelete sollten so kurz
wie AutoCreate, AutoUpdate und AutoDelete sein.
Weil Sie diese generischen
Bearbeitungsansichten viel
machen werden und wir CRUD immer und immer wieder
tun werden, und Sie wollen wirklich nicht 15 Zeilen Code schreiben.
Das ist unnötige Wiederholung, unnötiges Schneiden und
Einfügen und Ändern von Code, wenn
Sie es wirklich einfach halten können.
Also kann ich im Grunde einen vollständigen Satz von
CRUD-Formularen und CRUD-Funktionalität mit
Validierung für ein Modell mit
diesem Code erstellen und dann muss ich nicht einmal eine forms.py haben,
ich habe nur eine models.py.
Also, wenn du deine Autos machst,
würdest du denken, ich habe
einen Fehler gemacht, wenn ich eine forms.py mache.
Denn wenn ich diese views.py einfach auf diese Weise verwende,
anstatt sie alle wie MakeUpdate aussehen
zu lassen, dann werden Sie sich viel
Zeit und Energie sparen und wir müssen diese Dinge ändern.
Es ist viel einfacher,
alle Änderungen zu finden und sie dann zu ändern.
Das ist also eine exemplarische Vorgehensweise des Beispielcodes für Autos.
Sie werden einen Auftrag dazu machen,
aber kopieren Sie nicht einfach alles.
Ich habe das so eingerichtet, dass die
Zeit, die Sie damit verbringen zu verstehen, was vor sich geht,
besonders in den Ansichten.
URL ist dein Stolz nur kopieren,
Modelle, die du gerade
kopierst, die URLs,
die du nur kopierst, aber die Ansichten kopieren es nicht nur, finde
heraus, was wirklich los ist und finde
den einfacheren und prägnanteren Weg, all das zu tun.
Django fängt an,
an dieser Stelle wirklich schön auszusehen.
Ich hoffe, Sie fanden das hilfreich. Prost.