2013-02-09 19 views
39

Ich benutze immer FBVs (Function Based Views) beim Erstellen einer Django App, weil es sehr einfach zu handhaben ist. Aber die meisten Entwickler sagten, dass es besser ist, CBVs (Class Based Views) zu verwenden und nur FBVs zu verwenden, wenn es komplizierte Ansichten gibt, die bei CBVs schwer zu implementieren wären.Klassenbasierte Ansichten VS Funktionsbasierte Ansichten

Warum? Was sind die Vorteile von CBVs?

+9

"Die meisten Entwickler"? "Ja wirklich?" Ich bezweifle das eher. Persönlich, während ich erkenne, dass CBVs in einer Situation gut sind, benutze ich sie fast nie. –

+2

Ja, das ist in dem Buch, das ich gelesen habe, aber das weiß ich nicht. Ich mag FBVs sehr gerne als CBVs. – catherine

+5

@DanielRoseman wenn Daniel CBV nicht verwendet, stoppe ich jetzt sorgen über nicht zu wissen und nicht mit cbv .. – doniyor

Antwort

55

Der wichtigste Vorteil ist die Vererbung. Bei einem großen Projekt wird es wahrscheinlich viele ähnliche Ansichten geben. Anstatt denselben Code immer wieder zu schreiben, können Sie Ihre Ansichten einfach von einer Basisansicht erben lassen.

Auch Django wird mit einer Sammlung generischer Ansichtsklassen geliefert, die für einige der häufigsten Aufgaben verwendet werden können. Mit der DetailView-Klasse wird beispielsweise ein einzelnes Objekt von einem Ihrer Modelle übergeben, mit einer Vorlage gerendert und die HTTP-Antwort zurückgegeben. Sie können es Stecker gerade in Ihre URL conf ..

url(r'^author/(?P<pk>\d+)/$', DetailView.as_view(model=Author)), 

Oder Sie es mit benutzerdefinierten Funktionen

class SpecialDetailView(DetailView): 
    model = Author 
    def get_context_data(self, *args, **kwargs): 
     context = super(SpecialDetailView, self).get_context_data(*args, **kwargs) 
     context['books'] = Book.objects.filter(popular=True) 
     return context 

nun Ihre Vorlage zum Rendern einer Sammlung von Buchobjekten werden weitergegeben erstrecken.

Ein schöner Ort, um damit zu beginnen, ist eine gute Lesung der docs.

aktualisieren

ccbv.co.uk hat umfassende und einfach Informationen über die Klasse basierte Ansichten haben Sie bereits zur Verfügung zu verwenden.

+15

In meiner (voreingenommenen) Meinung ist der beste Ort, um zu beginnen ist bei http://ccbv.co.uk/ :) – meshy

+0

Danke für den Zeiger @meshy. – GreenAsJade

+2

@meshy Ein Domain-Name für CBV, jemand muss wirklich cbv lieben! – NeoWang

12

Ein paar Worte von zwei Kugeln

Tip Alternative apporach - Zu Gast bei FBVs

Einige Entwickler lieber auf der Seite mit FBVs für die meisten Ansichten und CBVS nur für Ansichten irren, die brauchen unterklassifiziert werden. Diese Strategie ist auch in Ordnung.

8

Als ich mit DJango angefangen habe, habe ich CBVs wegen ihrer Lernkurve und ihrer etwas komplexen Struktur nie benutzt. Fast zwei Jahre lang benutze ich FBVs nur an wenigen Stellen. Wo ich sicher bin, wird der Code wirklich einfach sein und einfach bleiben.

Hauptvorteil von CBVs und Multiple Inheritness, die mit ihnen kommt ist, dass ich vollständig vermeiden kann, Signale, Hilfsmethoden schreiben und einfügen Code. Vor allem in den Fällen, in denen die App viel mehr als nur grundlegende CRUD-Operationen ausführt. Ansichten mit Mehrfachvererbung sind um ein Vielfaches einfacher zu debuggen als ein Code mit Signalen und Hilfsmethoden, besonders wenn es sich um eine unbekannte Codebasis handelt.

Abgesehen von mehreren Erben CBVs bieten verschiedene Methoden für das Dispatching, das Abrufen von Vorlagen, die Verarbeitung verschiedener Anforderungstypen, das Übergeben von Vorlagenkontextvariablen, das Überprüfen von Formularen und vieles mehr. Diese machen den Code modular und damit wartbar.

1

Klasse basierte Ansichten sind ausgezeichnet, wenn Sie eine voll funktionsfähige CRUD-Operationen in Ihrer Django-Anwendung implementieren möchten, und die gleiche wenig Zeit & Mühe wird mit der Funktion basierte Ansichten zu implementieren.

Ich empfehle Ihnen, auf Funktionen basierende Ansichten zu verwenden, wenn Sie nicht implementieren CRUD auf Ihrer Website/Anwendung bedeutet, dass Ihre Absicht ist, einfach die Vorlage zu rendern.

Ich habe eine einfache CRUD basierte Anwendung mit klassenbasierten Ansichten erstellt, die live ist. Besuchen Sie http://filtron.pythonanywhere.com/view/ und genießen Sie. Dann werden Sie wissen, wie wichtig es ist.

Verwandte Themen