Dieser Artikel bietet Ihnen eine beispielhafte Erklärung von Djangos FBV und CBV. Ich hoffe, dass er für Freunde in Not hilfreich ist.
FBV: Funktionsbasisansichten, bei denen Funktionen in Ansichten zur Bearbeitung von Anforderungen verwendet werden.
urlpatterns = [ path('index/', views.index), ] # 视图函数里 def index(request): return render(request,"index.html")
CBV: Klassenbasisansichten, bei denen Klassen in Ansichten verwendet werden, um Anfragen zu bearbeiten.
urlpatterns = [ path("login/",views.LoginView.as_view()) ] # 视图函数里 class LoginView(View): def dispatch(self, request, *args, **kwargs): """ 重写dispatch方法, 可以放一些专属于LoginView的操作 """ return ... def get(self,request): return HttpResponse("OK") def post(self,request): return HttpResponse("OK") def put(self,request): return HttpResponse("OK") def delete(self,request): return HttpResponse("OK")
Quellcode-Analyse von CBV:
Djangos URL weist eine Anfrage einer aufrufbaren Funktion zu, nicht einer Klasse. Als Reaktion auf dieses Problem stellt die klassenbasierte Ansicht (d. h. die grundlegende View-Klasse von Django) eine statische Methode (d. h. eine Klassenmethode) von as_view() bereit. Durch den Aufruf dieser Methode wird eine Klasse über self = cls(**) erstellt. initkwargs)-Instanz und rufen Sie dann die Methode „dispatch()“ über die Instanz auf. Die Methode „dispatch()“ ruft die entsprechende Methode auf, um die Anforderung zu verarbeiten (z. B. „get()“, „post()“ usw.). die Anfrage. Zu diesem Zeitpunkt sind diese Methoden fast identisch mit funktionsbasierten Ansichten. Sie müssen Anfragen empfangen und eine Antwort erhalten. Wenn die Methode nicht definiert ist, wird eine HttpResponseNotAllowed-Ausnahme ausgelöst.
Warum gibt es ein CBV-Modell?
Ein wichtiges Merkmal von Python ist die Objektorientierung. Und cbv kann die objektorientierte Natur von Python besser widerspiegeln. cbv implementiert Ansichtsmethoden über Klassen. Im Vergleich zur Funktion können Klassen die Besonderheiten des Polymorphismus besser nutzen (Polymorphismus: Dieselbe Operation kann auf Objekte unterschiedlichen Typs angewendet werden), sodass es einfacher ist, die häufigeren Funktionen im Projekt von der Makroebene aus zu abstrahieren.
Das obige ist der detaillierte Inhalt vonBeispielerklärung von Djangos FBV und CBV. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!