In diesem Artikel werden wir kurz die Unterschiede zwischen funktionsbasierten und objektbasierten Django-Ansichten sowie die Vor- und Nachteile der beiden besprechen. In diesem Artikel werden wir uns ansehen, warum klassenbasierte Ansichten für viele Anwendungen die bessere Wahl sind. Im Gegensatz zu objektbasierten Sichten, die selbständig ein Modell oder eine Sicht auswählen, sind klassenbasierte Sichten einfacher zu verwalten und effizienter.
Klassenbasierte Views sind einfacher zu verwalten
Djangos klassenbasierte Ansichten (Class-Based Views, CBVs) sind eine hervorragende Zeitersparnis, vor allem wenn Sie sie nur für einfache Modellansichten verwenden. Wenn Sie jedoch komplexe Modellansichten erstellen müssen, die schwer zu verwalten sind, müssen Sie die umfangreiche Dokumentation von Django berücksichtigen. Die Lösung für dieses Problem ist eine vereinfachte Implementierung von Class-Based Views. Der Ansatz, den ich gewählt habe, besteht darin, meine eigene Basisklasse zu schreiben, die besten Ideen von anderen Entwicklern zu übernehmen und nur die Teile einzubauen, die ich brauche.
Klassenbasierte Ansichten machen die Anwendungsentwicklung viel einfacher, da sie eine leistungsstarke und flexible Funktion von Django sind. Diese Ansichten sind einfacher zu pflegen und zu erweitern, da sie Operationen auf der Grundlage der Art der empfangenen Anfrage durchführen. Sie können komplexe Ansichten mit klassenbasierten Ansichten oder Unterklassen von generischen Ansichten schreiben. Sie sind eine ausgezeichnete Wahl für große Projekte, die dieselben Ansichten benötigen. Und da Sie mithilfe der Vererbung mehrere Ansichten erstellen können, ist es auch einfacher, sie alle an einem Ort zu testen.
Sie sind effizienter
Das Django-Toolkit ist auf maximale Flexibilität ausgelegt und verfügt über eine Vielzahl von Hooks, Standardmethodenimplementierungen und Attributen. Ein solcher Hook ist die get_form-Methode, die eine Methode namens get_form_class aufruft und das Attribut form_class des Modells zurückgibt. Diese Methode kann erweitert werden, um verschiedene Arten von Eingaben zu verarbeiten, einschließlich formularbezogener Daten.
Die funktionsbasierte Ansicht ist leicht zu verstehen. Im Gegensatz zu objektbasierten Views sind funktionsbasierte Views in Django einfach zu erstellen, verwenden Templates und erlauben es, zusätzliche Daten in den Template-Kontext einzufügen. Eine funktionsbasierte Ansicht kann für die Anzeige einer einzelnen detaillierten Ansicht eines bestimmten Modells, die Verarbeitung von Formularen oder die Verarbeitung anderer Daten verwendet werden. Die as_view-Methode von Django wird zum Überschreiben von Attributen verwendet.
Ein weiterer Vorteil von funktionsbasierten Ansichten ist ihre Lesbarkeit. Sie können die Logik hinter einer funktionsbasierten Ansicht leicht verstehen, während objektbasierte Ansichten schwieriger zu lesen oder zu implementieren sein können. Die Verwendung von bedingten Verzweigungen zur Handhabung von HTTP-Methoden ist ein wesentlicher Vorteil von funktionsbasierten Ansichten. Wenn Sie jedoch ein großes Django-Projekt programmieren, ist es am besten, klassenbasierte Ansichten zu verwenden.
Sie entsprechen einer bestimmten Vorlage
Funktionsbasierte Ansichten in Django entsprechen bestimmten Vorlagen und können für bestimmte Arten von Inhalten nützlich sein. Zum Beispiel kann eine Listenansicht-Klasse ein Queryset-Feld für die Sortierung von Datensätzen verwenden. Dieses Feld wird von der Klasse DetailView geerbt und teilt Django mit, dass es den Datensatz des Item-Modells abrufen soll. Dies unterscheidet sich von der ListView-Klasse, die alle Modelldatensätze liest. Der Unterschied liegt in der Logik für die Paginierung. Eine klassenbasierte Ansicht muss ihre Modellabfrage auf einen Datensatz beschränken, und zu diesem Zweck wird die Url verwendet.
Eine klassenbasierte Ansicht kann Kontextdaten auf verschiedene Weise ändern. Ein Beispiel ist die Änderung des Formularverweises durch die Methode get_context_data(). Ein klassenbasierter View wird in Listing 9-10 beschrieben. Die Klasse CreateView hat zwei Felder, template_name und content_type, die zum Anpassen der Ansicht verwendet werden. Die CreateView-Methode verwendet auch die get_initial()-Methode, um die Anfangswerte des Formulars zu erhalten.
Sie wählen nicht selbst ein Modell oder eine Ansicht aus.
In Django wählen funktionsbasierte Views nicht von selbst ein Model oder eine View aus. Sie werden erstellt, indem ein HttpRequest-Objekt an eine Python-Funktion übergeben und ein HttpResponse-Objekt erzeugt wird, z. B. der HTML-Inhalt einer Webseite, ein XML-Dokument, eine Weiterleitung, ein 404-Fehler oder ein Bild. Django-Funktionen und -Ansichten werden in CRUD oder “create, read, update, delete” und “do” unterteilt. In großen Django-Projekten werden funktionsbasierte Views dupliziert. Generische klassenbasierte Views werden meist für CRUD-Aktionen verwendet.
Django-Views sind aufrufbar und entweder funktionsbasiert oder klassenbasiert. CBVs erben eine Methode namens as_view(), die je nach HTTP-Verb die entsprechende Methode aufruft. Ein funktionsbasierter View muss ein HttpResponse-Objekt zurückgeben oder eine Exception auslösen, um seine Aufgabe zu erfüllen. Funktionsbasierte Django-Views sind eine hervorragende Möglichkeit, Anwendungen mit Python zu erstellen.