La vue basée sur les classes Django simplifiée

Mary-Kate Olsen
Libérer: 2024-10-12 14:13:30
original
472 Les gens l'ont consulté

Django Class Based View made easy

Comme nous le savons tous, Django utilise MVT (model-view-template) pour sa conception lors du développement d'applications Web.

View lui-même est un appelable qui prend une requête et renvoie une réponse. c'est plus qu'une simple fonction car Django fournit quelque chose appelé vue basée sur les classes, afin que le développeur puisse écrire une vue en utilisant, eh bien, une approche basée sur les classes ou vous pouvez dire une approche POO. Cette vue basée sur les classes est conçue pour que nous puissions structurer nos vues et puisse être réutilisée grâce à la puissance de l'héritage et des mixins.

Comme cela est bien documenté dans la documentation Django, l'un des problèmes de la vue basée sur les fonctions est qu'il n'y a aucun moyen de les étendre ou de les personnaliser au-delà de certaines options de configuration, ce qui limite leur utilité dans de nombreuses applications du monde réel.

La boîte à outils des classes de base et des mixins dans Django est conçue pour une flexibilité maximale. Voyons comment nous pouvons utiliser la vue basée sur les classes la plus basique dans Django en utilisant l'héritage de classe View et comparons-le à la vue basée sur les fonctions.

#views.py using View class inheritance
from django.views import View
from django.http import HttpResponse, HttpRequest

class IndexView(View):
    def get(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from indexview")

    def post(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from indexview in post method")

Copier après la connexion
#views.py function based view
from django.http import HttpResponse, HttpRequest

def index(request: HttpRequest):
    if request.method == "GET":
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from index funcion view")
    elif request.method == "POST":
        # imagine 10 line of view logic here
        return HttpResponse("Hello world from index funcion view in post method")

Copier après la connexion

Si vous regardez ci-dessus, une vue basée sur les classes vous permet de répondre à différentes méthodes de requête HTTP avec différentes méthodes d'instance de classe, au lieu d'utiliser du code de branchement conditionnel dans une seule fonction de vue. imaginez maintenant dans chaque vue ci-dessus que nous avons ajouté 10 lignes de logique pour chaque méthode, vous devriez pouvoir savoir laquelle est la plus facile à parcourir.

Pour enregistrer la vue basée sur la classe dans la configuration de l'URL, nous devons appeler la méthode de classe as_view() qui convertira essentiellement la vue de classe en une fonction appelable. cette fonction convertie appellera setup() pour initialiser son attribut, puis appelle dispatch() pour vérifier quelle méthode l'utilisateur possède (une méthode GET, POST ou autre) et connectera la méthode de requête à la méthode de correspondance correspondante que la vue basée sur la classe avait à l'origine

#urls.py

from django.urls import path
from myapp.views import IndexView, index

urlpatterns = [
    path("", IndexView.as_view(), name=IndexView.__name__), 
    path("index/", index, name=index.__name__),

]
Copier après la connexion

La vue basée sur les classes prend également en charge tous les raccourcis http de Django, tels que la fonction render() pour restituer un modèle, voici un exemple modifié de Django cbv utilisant le raccourci de rendu et coopérant avec le framework de messages Django

class IndexView(View):
    def get(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return render(request, "GEtindex.html")

    def post(self, request: HttpRequest):
        # imagine 10 line of view logic here
        messages.add_message(request, messages.INFO, "POST Success") #add display success message here by django messages framework
        return render(request, "POSTindex.html")

Copier après la connexion

Dans l'ensemble, la vue basée sur la classe Django permet aux développeurs de mieux écrire pour comprendre la logique de la vue, plus une logique de vue est complexe, je suis presque sûr qu'elle sera plus difficile à lire si nous utilisons simplement une vue basée sur les fonctions (trop d'instructions if pour vérifier quoi (la méthode est utilisée par l'utilisateur à titre d'exemple) et difficile à mettre à l'échelle, tandis que Django cbv est conçu pour diviser notre logique de vue en plusieurs méthodes telles que les méthodes get et post. et peut être réutilisé dans l'héritage si vous le souhaitez, même si je peux affirmer que plus nous avons d'héritage dans une classe, il sera plus difficile à lire en raison de son abstraction.

vous pouvez en savoir plus sur la vue basée sur les classes dans les documents Django à partir d'ici, ici, ici

Ccbv.co.uk <- j'utilise également ce site Web pour savoir quelle logique de modèle de vue je peux utiliser rapidement !

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal