Django Views - FBV und CBV
FBV(funktionsbasierte Views)Funktionsbasierte Views verwenden Funktionen in Views, um Anfragen zu verarbeiten.
CBV(klassenbasierte Views)Klassenbasierte Views verwenden Klassen in Views, um Anfragen zu verarbeiten.
FBV
Tatsächlich haben wir in den vorherigen Kapiteln durchgängig funktionsbasierte Views verwendet—das heißt, Funktionen zu verwenden, um Benutzeranfragen zu verarbeiten. Siehe das folgende Beispiel:
Routenkonfiguration:
urls.py-Datei
path("login/", views.login),
]
views.py-Datei
def login(request):
if request.method == "GET":
return HttpResponse("GET-Methode")
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd")
if user == "example" and pwd == "123456":
return HttpResponse("POST-Methode")
else:
return HttpResponse("POST-Methode 1")
Wenn wir direkt http://127.0.0.1:8000/login/ im Browser aufrufen, ist die Ausgabe:
GET 方法
CBV
Klassenbasierte Views verwenden Klassen, um Benutzeranfragen zu verarbeiten. Unterschiedliche Anfragen können durch unterschiedliche Methoden innerhalb der Klasse behandelt werden, was die Lesbarkeit des Codes erheblich verbessert.
Die definierte Klasse muss von der übergeordneten Klasse View erben, daher müssen Sie zuerst die Bibliothek importieren:
from django.views import View
Bevor die der Anfrage entsprechende Methode ausgeführt wird, wird zuerst die dispatch-Methode ausgeführt (vor den get/post/put...-Methoden). Die dispatch()-Methode ruft abhängig vom Anfragetyp die passende Methode auf, um die Anfrage zu behandeln.
Eigentlich wissen wir aus dem, was wir zuvor gelernt haben, dass Djangos URL eine Anfrage einer aufrufbaren Funktion zuordnet, nicht einer Klasse. Wie implementiert es also klassenbasierte Views? Es verwendet hauptsächlich die von der übergeordneten Klasse View bereitgestellte statische Methode as_view(). Die as_view-Methode ist die externe Schnittstelle der klassenbasierten View. Sie gibt eine View-Funktion zurück. Nach dem Aufruf wird die Anfrage an die dispatch-Methode übergeben, die dann je nach Anfragetyp verschiedene Methoden behandelt.
Routenkonfiguration:
urls.py-Datei
path("login/", views.Login.as_view()),
]
views.py-Datei
from django.views import View
class Login(View):
def get(self,request):
return HttpResponse("GET-Methode")
def post(self,request):
user = request.POST.get("user")
pwd = request.POST.get("pwd")
if user == "example" and pwd == "123456":
return HttpResponse("POST-Methode")
else:
return HttpResponse("POST-Methode 1")
Wenn wir direkt http://127.0.0.1:8000/login/ im Browser aufrufen, ist die Ausgabe:
GET 方法Weitere Erweiterungen