Maison >développement back-end >Tutoriel Python >Exemple d'explication du FBV et du CBV de Django

Exemple d'explication du FBV et du CBV de Django

不言
不言avant
2019-03-06 14:54:431978parcourir

Ce que cet article vous apporte est un exemple d'explication du FBV et du CBV de Django. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

FBV : fonctions de base de vues, qui consiste à utiliser des fonctions dans les vues pour traiter les requêtes.

urlpatterns = [
    path('index/', views.index),
]
# 视图函数里
def index(request):
    return render(request,"index.html")

CBV : vues de base de classe, qui consiste à utiliser des classes dans les vues pour gérer les requêtes.

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")

Analyse du code source CBV :

L'URL de Django attribue une requête à une fonction appelable, pas à une classe. En réponse à ce problème, la vue basée sur les classes (c'est-à-dire la classe View de base de Django) fournit une méthode statique (c'est-à-dire une méthode de classe) de as_view(). L'appel de cette méthode créera une classe via self = cls(**). initkwargs), puis appellera la méthode dispatch() via l'instance. La méthode dispatch() appellera la méthode correspondante pour traiter la requête (telle que get(), post(), etc.) selon les différentes méthodes de. la demande. À ce stade, ces méthodes sont presque identiques aux vues basées sur les fonctions. Elles doivent recevoir des requêtes et obtenir une réponse. Si la méthode n'est pas définie, une exception HttpResponseNotAllowed sera levée.

Pourquoi existe-t-il un modèle CBV ?

Une fonctionnalité importante de Python est orientée objet. Et cbv peut mieux refléter la nature orientée objet de python. cbv implémente les méthodes d'affichage via des classes. Par rapport à la fonction, la classe peut mieux utiliser la spécificité du polymorphisme (polymorphisme : la même opération peut être utilisée sur des objets de différents types), il est donc plus facile d'abstraire les fonctions les plus courantes du projet à partir d'un niveau macro.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer