Vues Django - FBV et CBV
FBV(vues basées sur des fonctions)Les vues basées sur des fonctions utilisent des fonctions dans les vues pour traiter les requêtes.
CBV(vues basées sur des classes)Les vues basées sur des classes utilisent des classes dans les vues pour traiter les requêtes.
FBV
En fait, nous avons utilisé des vues basées sur des fonctions tout au long des chapitres précédents—c'est-à-dire en utilisant des fonctions pour traiter les requêtes des utilisateurs. Voir l'exemple suivant :
Configuration de route :
fichier urls.py
path("login/", views.login),
]
fichier views.py
def login(request):
if request.method == "GET":
return HttpResponse("méthode GET")
if request.method == "POST":
user = request.POST.get("user")
pwd = request.POST.get("pwd")
if user == "example" and pwd == "123456":
return HttpResponse("méthode POST")
else:
return HttpResponse("méthode POST 1")
Si on accède directement à http://127.0.0.1:8000/login/ dans le navigateur, la sortie est :
GET 方法
CBV
Les vues basées sur des classes utilisent des classes pour gérer les requêtes des utilisateurs. Différentes requêtes peuvent être traitées par différentes méthodes au sein de la classe, ce qui améliore grandement la lisibilité du code.
La classe définie doit hériter de la classe parente View, vous devez donc d'abord importer la bibliothèque :
from django.views import View
Avant d'exécuter la méthode correspondant à la requête, la méthode dispatch est exécutée en premier (avant les méthodes get/post/put...). La méthode dispatch() appelle la méthode appropriée pour gérer la requête en fonction du type de requête.
En fait, d'après ce que nous avons appris précédemment, nous savons que l'URL de Django associe une requête à une fonction appelable, pas à une classe. Alors comment implémente-t-il les vues basées sur des classes ? Il utilise principalement la méthode statique as_view() fournie par la classe parente View. La méthode as_view est l'interface externe de la vue basée sur une classe. Elle renvoie une fonction de vue. Après avoir été appelée, la requête est transmise à la méthode dispatch, qui gère ensuite différentes méthodes selon le type de requête.
Configuration de route :
fichier urls.py
path("login/", views.Login.as_view()),
]
fichier views.py
from django.views import View
class Login(View):
def get(self,request):
return HttpResponse("méthode GET")
def post(self,request):
user = request.POST.get("user")
pwd = request.POST.get("pwd")
if user == "example" and pwd == "123456":
return HttpResponse("méthode POST")
else:
return HttpResponse("méthode POST 1")
Si on accède directement à http://127.0.0.1:8000/login/ dans le navigateur, la sortie est :
GET 方法autres extensions