In einem neuen Django-Projekt frage ich mich nur, ob ich klassenbasierte Ansichten (CBV) oder funktionsbasierte Ansichten (FBV) verwenden soll.
Laut Djangos Dokumentation :
Klassenbasierte Ansichten bieten eine alternative Möglichkeit, Ansichten als Python-Objekte anstelle von Funktionen zu implementieren. Sie ersetzen keine funktionsbasierten Sichten, weisen aber im Vergleich zu funktionsbasierten Sichten bestimmte Unterschiede und Vorteile auf.
Das scheint Python Zen zu widersprechen 'Es gibt nur einen Weg, es zu tun'
Also, was ist der bessere Weg?
Bisher sehe ich nur drei Möglichkeiten:
Immer mit FBV
Dies bedeutet, dass generische Sichten überhaupt nicht verwendet werden (da diese seit 1.5 klassenbasiert sind)
Immer mit CBV:
Was bestimmte Probleme bei der Bestimmung von Anfragenverarbeitungsaufträgen hat. Siehe
Ich denke auch, dass der Aufbau der gesamten Klassenhierarchie nicht gut für die Performance ist. In diesem Fall würde ich mich auch fragen, warum FBV noch nicht veraltet sind?
Generisches CBV in FBV einfügen, nach
was zu vielen grausamen Boilerplate-Codes führt
Sehen Sie andere Möglichkeiten oder weiß jemand, wohin die Ansichten gehen?
Das ist eine Frage der Meinung, persönlich stimme ich Luke Plant nicht zu und ich habe mich in Class Based Views
verliebt. Ich denke, dass der Widerstand der Django-Gemeinschaft, sie eifrig zu adoptieren, auf der Tatsache beruht, dass sie nicht leicht sehen konnten, wie sie funktionierten (die Implementierung verwendet eine Menge Mixins und kann schwer zu folgen sein) und die Dokumentation fehlte und ich glaube, es gab viele Missverständnisse über Generic CBVs und einfache CBVs. (Für eine lange Zeit, wann immer du gegoogelt hast "django klassenbasierte Ansichten" waren die ersten Ergebnisse über generische Ansichten)
Jetzt wird die Dokumentation viel besser und die Tools, die zum besseren Verständnis der Tools zur Verfügung stehen, sind großartig (siehe ccbv.co.uk oder pudb ).
Ich schlage vor, Class Based Views
zu lernen und zu verwenden, aus denselben Gründen, die Leute OOP vorschlagen, es reduziert die Codewiederholung und erhöht die Codewiederverwendung (Vererbung, Mixins) ... mit anderen Worten, es ist DRY.
Noch eine Sache, es lohnt sich herauszufinden, wie andere Projekte CBV
verwenden ... einer meiner letzten Favoriten ist django-oscar , die sie zu guter Wirkung verwendet.