- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
Gabriel Trouvé
4 février 2023 - 04 février 2023 à 14:25
checkConversation résolue
2 réponses
Vues basées sur les classes : attribut de classe modifié
Bonsoir,Il y a un concept avec lequel j'ai un peu de mal.On créer un attribut de class title.On le récupère sous forme d'attribut d'instance self.title.Donc de manière générale dans les …
00:00:00 :Dans cette partie, on va créer notre première vue fondée sur une classe.Pour l'instant, sur la page d'accueil, on redirige avec cette URL vers une fonction,donc cette fonction Home, qui est définie dans le fichier Views ici, à l'intérieur de mon dossier Website.
00:00:16 :Donc j'ai une fonction qui prend en paramètre ici la requête,et qui va retourner un objet HTTP response avec ici du code HTML,donc c'est ce qui nous affiche ici le texte accueil du site avec le lien vers le blog.
00:00:29 :Donc on va pouvoir utiliser à la place de cette fonction une classe que l'on va retourner en tant que vue,et on va pouvoir le faire directement depuis le fichier urls.py.
00:00:39 :Donc pour ça, je vais importer depuis django.views la classe View,donc avec un V majuscule ici, il s'agit d'une classe,et avec la nomenclature pep8 qui est bien respectée, donc les classes commencent par une majuscule.
00:00:52 :Donc on a View ici, et View ici, c'est tout simplement une classe que l'on va pouvoir retourner,et c'est tout simplement une classe que l'on va pouvoir retourner en tant que vue.
00:01:01 :Alors comment on va faire ça ?Et bien on va créer une instance de cette classe, et je vais la mettre à la place de cette fonction Home ici.
00:01:07 :Donc à la place de Home ici, je fais View, et je vais utiliser la méthode AsView,qui est si vous voulez un petit peu comme le init des classes en général,c'est-à-dire qu'en fait c'est cette méthode qui va me permettre de créer une instance,et donc une instance dans ce cas-ci de ma vue.
00:01:23 :Donc on fait View, donc la classe en tant que vue, on met les parenthèses ici,et ça, ça va nous permettre de créer une instance.
00:01:29 :Et là où ça va être très puissant, et on aura l'occasion d'y revenir,c'est que je vais pouvoir passer des informations entre les parenthèses ici.
00:01:37 :Et c'est vraiment là que vous allez voir l'avantage de cette façon de faire,puisque là on est avec de l'orienté objet, donc on est avec des classes, avec des instances,on a notre moule, donc notre classe ici qui est la classe View,et ensuite on va pouvoir créer des instances qui vont avoir des attributs différents,
00:01:51 :donc ça va nous permettre d'utiliser par exemple le même moulepour faire différentes vues avec différents paramètres.Donc dans ce cas-ci, je vais juste retourner As View ici,et je vais donc actualiser ma page pour vous montrer ce que ça donne.
00:02:04 :Donc pour l'instant, vous voyez que ça ne donne pas grand chose.Si je vais voir dans l'onglet Run ici de PyCharm,on voit que ça m'indique en fait que la méthode n'est pas autorisée,donc cette méthode Get ici.
00:02:15 :Donc qu'est-ce qu'on va faire ?On va devoir créer une méthode à l'intérieur de ma classequi va me permettre de spécifier ce que l'on doit fairequand on est en présence d'une requête Get.
00:02:25 :Donc pour ça, je vais déplacer cette classe ici,et je vais la mettre dans mon fichier Views.Donc ici on va faire from Django.views import View,
00:02:34 :donc on importe cette classe ici,et là on va créer une classe que l'on va appeler HomeView,tout simplement, et on hérite de View.Donc ça, ça va nous permettre de spécifier quelque chose ici,donc de spécifier en fait la méthode qui va nous permettrede processer les requêtes Get qui vont être effectuées vers cette vue.
00:02:51 :Donc cette méthode, elle a un nom très simple,c'est tout simplement Get.Et on va donc lui passer Self en premier paramètre,bien entendu, puisque là on est avec de l'Orienté Objet,et on va avoir ensuite la requête,donc là c'est exactement la même chose que ce qu'on avait sur notre vue ici
00:03:05 :qui était basée sur une fonction, donc avec la fonction Home,on récupérait la requête et on retournait un objet de type HTTP Response.Et bien là, c'est exactement la même chose que l'on va faire,on va retourner un objet du type HTTP Response avec le texte ici.
00:03:18 :Et donc cette vue, on va pouvoir l'importer dans notre fichier URLs,donc je vais enlever cet import ici,et ici à la place de ma fonction Home, ici je vais importer HomeView,donc qui est ma classe que je viens de créer ici.
00:03:30 :Donc cette classe, je vais pouvoir l'instancier de la même façonque ce que j'ai fait ici, HomeView.asView,et là si je reviens sur mon site ici et que j'actualise,vous voyez que cette fois-ci, on a exactement la même chose,donc le titre du site, accueil du site ici avec le lien vers le bloc.
00:03:44 :Donc vous voyez ici qu'on vient de recréer notre vuequi est basée sur une fonction en une vue qui est basée cette fois-ci sur une classe.
00:03:51 :Et vous voyez par la même occasion qu'on commence à avoir un peu plus de contrôle.Là où par exemple dans une vue basée sur les fonctions,c'est directement à l'intérieur de cette fonction que l'on va faire la logique,donc par exemple que l'on va regarder le type de requête qui est envoyée
00:04:05 :en faisant request.method et en vérifiant si c'est une requête postou une requête de type get, comme ceci.Donc là on a vraiment une logique qui est directement piton,c'est à dire qu'on fait des structures conditionnelles, on vérifie des choseset toute la logique se passe directement à l'intérieur de notre vue
00:04:22 :basée sur une fonction, donc directement à l'intérieur de la fonction.Alors que là avec la vue basée sur les classes, encore une fois,on utilise la puissance de l'orienté objet et donc on se base sur des méthodes,dans ce cas-ci la méthode get, et devinez quoi si on voulait traiter
00:04:36 :les méthodes post, donc les requêtes qui seraient faites avec une méthode post,et bien vous ne serez pas surpris si je vous dis que la méthode s'appelletout simplement post. Donc vous voyez qu'il y a une logique derrière tout ça,
00:04:46 :et c'est vraiment juste le fait qu'on va devoir connaître le nom des fonctions,donc là dans ce cas get et post c'est assez explicite, mais après vous allez voirqu'il y a d'autres méthodes de ces classes qui vont être disponiblespour modifier par exemple le contexte, pour modifier les objets qui sont retournés,
00:04:59 :et ces méthodes bien entendu il faut les connaître.Donc c'est ça qui fait que c'est un peu plus compliqué au débutd'utiliser les vues basées sur les classes.
00:05:07 :Donc là on a notre première vue qui est exactement équivalente à ce qu'on avaitici dans Home, donc pour l'instant vous vous dites que ça ne sert peut-êtrepas à grand chose, on a trois lignes de code au lieu de deux,donc vous avez raison, en l'état on a l'impression en fait que c'est plus compliqué
00:05:19 :que la vue basée sur une fonction. Mais là je vais vous montrerun autre type de vue, puisque là je vous ai montré une vue très classique,la plus classique, donc la vue qui est basée sur cette classe View ici,mais maintenant je vais vous montrer avec un exemple
00:05:31 :comment on peut tirer profit de l'orienté objeten utilisant les classes et les instances et en passant différentsparamètres aux attributs. Donc là on a une page
00:05:40 :Home View et on aimerait pouvoir modifier par exemple le textequi est affiché, donc là par exemple on a marqué accueil du site.Donc on va pouvoir tout simplement faire un attribut iciqui va être par exemple title, qui va être égal par défautà une chaîne de caractère qui s'appelle défaut,
00:05:55 :et ce title ici on va l'insérer à l'intérieur de notreHTTP response ici. Donc je vais faire un fstringet à la place de accueil du site, je vais mettre des accoladeset je vais insérer le titre de mon instance,donc cette fois-ci self.title, donc là on définit un attribut
00:06:10 :pour la classe et ensuite ici on va utiliser l'attributde l'instance. Donc si on a aucun attribut qui estdéfini spécifiquement pour l'instance, et bien grâce àl'orienté objet de Python, c'est l'attribut de la classe qui sera utilisée,donc on va retomber sur la chaîne de caractère défaut ici.
00:06:25 :Par contre quand on crée notre vue avec la méthodeasView ici, on va pouvoir spécifier des paramètres,on va pouvoir les modifier et donc à partir d'une même classeavoir différentes vues. Donc par exemple ici imaginez que
00:06:37 :je souhaite avoir une page about et je souhaiteutiliser cette même vue ici et avoir un résultatdifférent. Et bien ici je peux passer donc dans le title
00:06:46 :la chaîne de caractère accueil du site etdans cette vue ici j'utilise donc la même vue, homeView, mais cette fois-cije passe le titre page, on va direjuste à propos, tout simplement.
00:06:58 :Et là on va dire about pour le nom.Et donc là on va pouvoir aller tester notre vue, donc là vous voyezqu'on fait juste afficher ce self.title, on a ensuite
00:07:07 :le lien du blog qui reste, mais si je me rends sur l'accueil du sitelà j'ai bien accueil du site qui est affiché, et si je me rendsmaintenant sur la page about, j'appuie surentrée et là j'ai bien à propos qui est affiché. Donc vous voyez
00:07:19 :qu'on a une seule vue ici, une seule classe, maisqu'avec cette classe on peut créer deux vues qui affichent du textedifférent. Donc là vous voyez que la balance
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.