[PYTHON] Übersicht über klassenbasierte generische Ansichten und geerbte Klassenbeziehungen

Dieser Artikel ist der 13. Tagesartikel des Django Adventskalenders 2019. In diesem Artikel möchte ich Djangos Übersicht "Klassenbasierte generische Ansicht" und geerbte Klassenbeziehungen zusammenfassen.

Annahme

Wir verweisen auf die offizielle Dokumentation von Django 3.0, der neuesten Version zum Zeitpunkt des Schreibens dieses Artikels.

Was ist eine klassenbasierte generische Ansicht?

Erstens ist eine "Ansicht" in Django eine gekapselte Logik [^ 1], die eine Benutzeranforderung verarbeitet und eine Antwort zurückgibt. Definieren Sie die Daten, die in der "Vorlage" angezeigt werden sollen, die die Präsentationsschicht darstellt, und führen Sie die Verarbeitung gemäß der Anforderung durch. Es ist fraglich, aber der "Controller" im MVC-Framework ist möglicherweise näher am allgemeinen Image [^ 2].

Django bietet eine "klassenbasierte generische Ansicht", die die Logik für die Entwicklung dieser Ansicht verallgemeinert. Wie der Name schon sagt, ist die klassenbasierte generische Ansicht eine klassenbasierte Ansicht, sodass Sie Code mithilfe der Vererbung wiederverwenden können [^ 3]. Durch die Verwendung der Allzweckansicht können Sie Redundanz- und Boiler-Vorlagen in der Webentwicklung vermeiden und das Designkonzept von Django "Weniger Code" und "Nicht wiederholen" optimal nutzen.

Liste der allgemeinen Ansichten

Eine Liste und Übersicht der allgemeinen Ansichten. Die Bedeutung wird anhand der Häufigkeit des persönlichen Gebrauchs in der normalen Entwicklung festgelegt. Ich denke, die Wichtigkeit hängt von den Eigenschaften des Dienstes ab.

Basisansicht

Eine Gruppe von Basisansichten, die die Mindestfunktionen als Allzweckansicht definieren. Die Klasse hier wird auch von anderen generischen Ansichten geerbt.

Klasse Bedeutung Überblick
View ★★★ Basisansicht der generischen Ansicht
TemplateView ★★★ Basisansicht der Ansicht, in der die Vorlage gerendert wird
RedirectView ★★☆ Ansicht zum Umleiten

Ansicht zur Anzeige

Eine Gruppe von Ansichten zum Anzeigen des Listen- / Detailbildschirms. Ich denke, dies ist die häufigste Klasse in der allgemeinen Website-Entwicklung.

Klasse Bedeutung Überblick
DetailView ★★★ Anzeigen, um den Detailbildschirm anzuzeigen
ListView ★★★ Ansicht zum Anzeigen des Listenbildschirms

Ansicht bearbeiten

Eine Gruppe von Ansichten zum Anzeigen des Bearbeitungsbildschirms. Diese Klasse kann auf allgemeinen CRUD-Operationsbildschirmen verwendet werden.

Klasse Bedeutung Überblick
FormView ★★☆ Formularbildschirmansicht
CreateView ★★☆ Ansicht des Erstellungsbildschirms
UpdateView ★★☆ Bildschirmansicht aktualisieren
DeleteView ★★☆ Bildschirmansicht löschen

Datumsansicht

Es ist eine Gruppe von Ansichten zum Anzeigen einer Liste nach Jahr, Monat usw. wie ein Blog.

Klasse Bedeutung Überblick
ArchiveIndexView ★☆☆ Anzeigen, um die Liste der Elemente mit dem neuesten Datum anzuzeigen
YearArchiveView ★☆☆ Ansicht zum Anzeigen des Listenbildschirms nach Jahr
MonthArchiveView ★☆☆ Ansicht zum Anzeigen des monatlichen Listenbildschirms
WeekArchiveView ★☆☆ Anzeigen, um den Listenbildschirm nach Woche anzuzeigen
DayArchiveView ★☆☆ Ansicht zur Anzeige des Tageslistenbildschirms
TodayArchiveView ★☆☆ Ansicht zum Anzeigen des Listenbildschirms des heutigen Datums
DateDetailView ★☆☆ Ansicht zum Anzeigen des Detailbildschirms für jedes Datum

Allzweck-Ansichtsstruktur

Eine generische Ansicht ist selbst so konfiguriert, dass sie eine andere generische Ansicht oder mehrere Vererbungen eines generischen Mixins erbt. Generische Ansichten definieren das Verhalten einer Ansicht, indem ihre Attribute und ihr Verhalten festgelegt werden. Beachten Sie, dass für die meisten Attribute Accessoren definiert sind, sodass Sie den Wert eines Attributs dynamisch ändern können, indem Sie den Accessor überschreiben.

Basisansicht

Klassendiagramm (Django.views.generic.base)

View ist die Basisklasse für alle generischen Ansichten, und View verfügt über Attribute, auf die von anderen Klassen verwiesen wird, z. B. request`` kwargs. TemplateView besteht aus der Mehrfachvererbung von TemplateResponseMixin zum Rendern der Vorlagendatei und ContextMixin, das Kontextvariablen an die Vorlage übergibt. Diese beiden Mixins werden von allen generischen Ansichten mit Ausnahme von "RedirectView" geerbt. base.png

Ansicht zur Anzeige

Klassendiagramm (Django.views.generic.list``` Django.views.generic.detail)

Der Hauptunterschied zwischen "ListView" und "DetailView" ist Mixin, das von einem roten Rahmen umgeben ist. Sie können sehen, dass die Grundstruktur fast identisch ist. Nur der Unterschied hängt davon ab, ob die an die Vorlage übergebene Kontextvariable eine Liste oder ein einzelnes Objekt ist. list.png detail.png

Ansicht bearbeiten

Klassendiagramm (Django.views.generic.edit)

Da es viele geerbte Klassen gibt, sind nur die Allzweckansicht und das Mixin im selben Modul von einem roten Rahmen umgeben. Alle allgemeinen Ansichten mit Ausnahme von "DeleteView" erben von "FormMixin", das Formulare generiert, und "ProcessFormView", das das Rendern bei GET und die Validierung bei POST durchführt. Für die verbleibenden Ansichten und Mixin werden die Klassen gemäß der jeder Bearbeitungsansicht zugeordneten CRUD-Operation vererbt. edit.png

Schließlich

Ich denke, es ist für Leute, die neu in Django sind, einfach, das Konzept der Verallgemeinerung von Allzweckansichten zu verstehen, Klassen und Mixins und ihre Attribute (Felder) und Verhaltensweisen (Methoden) zu verstehen. Es gibt viele gute Artikel über das klassenbasierte Allzweckansicht-How-to-System, daher habe ich versucht, einen grafischen Überblick über diesen Artikel zu erhalten.

Recommended Posts

Übersicht über klassenbasierte generische Ansichten und geerbte Klassenbeziehungen
Erste Schritte und Verwendung von auf Klassenklassen basierenden generischen Ansichten in Django
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
django klassenbasierte Ansichten API-Klassendiagramm
Beispiel für die Verwendung von Klassenvariablen und Klassenmethoden
[Python] Klassentyp und Verwendung des datetime-Moduls
Zusammenfassung der Pickle- und Unpickle-Verarbeitung von benutzerdefinierten Klassen