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.
Wir verweisen auf die offizielle Dokumentation von Django 3.0, der neuesten Version zum Zeitpunkt des Schreibens dieses Artikels.
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.
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.
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 |
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 |
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 |
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 |
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.
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.
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.
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.
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