Session du 29 mai 2025 à 21h00
Développement Web & Frameworks
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat Django : les vues génériques
Mentorat sur les vues génériques
00:00:00 :Et voici la liste de termes techniques ou de noms utilisés dans les sessions de mentorat.Voici la liste de termes techniques utilisés dans les sessions de mentorat.
00:00:37 :Donc la partie stock là, je crois que je suis parti de là. Je me suis dit qu'il fallait y mettre dedans un produit.Donc en fait la table Product, je crois que c'est la seule qui n'a pas de clé étrangère.
00:01:19 :Donc je suis parti de là, j'ai défini Product, après je l'ai mis dans Stock, ici.Et donc après, je détaille les types Django, ça m'aide pour la suite.
00:01:39 :J'essayais juste, pour le moment, c'est le projet du mois, donc il présente une application de gestion de stock, c'est pour ça.Ah oui, pardon, désolé. Oui, c'est la gestion de stock du projet, oui, effectivement.
00:01:54 :Je m'excuse. Oui, j'ai oublié de contextualiser, désolé.Vas-y, vas-y. Donc je reviens vite fait, je suis parti de Product, le produit qu'il fallait faire rentrer dans le stock.
00:02:09 :Après je suis parti des différentes zones de stockage, donc Location.Donc ensuite, je me suis intéressé aux mouvements. Alors je ne suis pas sûr d'avoir tout compris au niveau des mouvements,
00:02:25 :mais on peut imaginer que l'entreprise qui va gérer ses stocks aura différents endroits de stockageet donc peut faire des transactions d'un endroit à un autre.
00:02:40 :Donc ça peut être dans un magasin, ça peut être pour rapprocher des stocks stratégiquement,donc dans une autre zone de stockage, voilà.Donc après, au niveau du stock, j'ai fait rentrer la notion d'entreprise,que j'ai appelée Compagnie, donc avec cette table-là, Compagnie.
00:03:10 :A partir de là, j'ai défini un nom d'utilisateur qui va renseigner les stocks,et puis une description qui sera utile ou pas.Après je me suis dit, comme il y a utilisateur, je vais avoir besoin d'un modèle User,donc avec un nom, la description d'utilisateur, et après je me suis dit, pourquoi pas donner un status à cet utilisateur,
00:03:48 :c'est-à-dire ici d'une table annexe, on va dire, j'ai mis des petits exemples en dessous,administrateur ou un utilisateur normal ou un utilisateur en lecture seule.
00:04:00 :Donc si on veut montrer l'utilisation de la gestion de stock,on peut très bien renseigner, faire un login pour quelqu'un en lecture seule en fait.
00:04:13 :Donc ça c'est le projet tel qu'il était écrit.J'ai un peu customisé, j'ai oublié les raisons,donc les raisons je ne suis pas sûr d'avoir tout compris,mais il y avait dans la description, il fallait renseigner une raison du transfert de produits,donc j'imaginais que peut-être parce que c'était défectueux, avarié,
00:04:39 :ou c'est l'occasion d'une promo, donc il faut faire des livraisons,donc la raison elle pourrait être renseignée ici.Tout est sluggé, pratiquement tout est sluggé,donc ça permet par la suite, si on veut afficher le détail d'une fiche justement,on pourra avoir une URL cohérente.
00:05:12 :Donc en fait, ce projet je l'ai un peu hacké,c'est à dire que ça fait un moment que je voulais faire une liste de courses,un peu comme on a dans le parcours du Toza, mais version Django.
00:05:32 :Donc du coup j'ai rajouté un provider,donc les providers ça va être les fournisseurs,donc ça peut être Carrefour, Intermarché, Primeur du coin, Amazon, etc.
00:05:44 :Donc du coup j'ai enrichi au niveau du mouvement ce provider,et donc l'idée finale c'est de faire un peu comme un inventaire,de tout ce que j'ai dans mon garde manger on va dire,et de renseigner toutes les tables,dans le but final de faire une liste de courses en fonction des magasins
00:06:15 :dans lesquels les produits sont affectés.Parce qu'on n'achète pas tous les produits dans le même magasin,et des fois il y a des marques qui ne sont pas distribuées par certaines enseignes,donc du coup ici le provider prend son importance.
00:06:34 :Et donc je mets ici par exemple un exemple de stock,si c'est du chocolat 85%,en fait dans la fiche il sera rangé dans la cuisine et j'en ai deux,j'ai deux plaques de chocolat,et dans mon lot de quatre jambons il est rangé dans le réfrigérateuret j'en ai un.
00:06:59 :Donc en fait ici à travers de ma cuisine et mon réfrigérateur,et éventuellement ma cave par exemple,c'est mes zones de stockage.Donc initialement le projet il n'est pas vraiment fait pour faire ça,mais je vais l'utiliser comme ça.
00:07:18 :C'est intéressant.Franchement c'est bien, c'est horrible.En fait il faut que j'adhère au projet,donc pour moi il faut que ça fasse sens,et je pense que les meilleurs projets c'est les projets dont on se sert en fait,parce que du coup le fait de s'en servir,on a des nouvelles idées,
00:07:48 :on rajoute des champs dans des tables,on rajoute des vues,on rajoute des choses,parce qu'on l'a pensé d'une certaine façon,puis ce n'est pas très pratique,donc finalement on recode par dessus,on remplace des choses,donc voilà.
00:08:04 :Pour faire court ici j'ai mis un carré blanc que je vais supprimer,donc on peut imaginer qu'ici ça remplisse une autre table,qui est ma liste de course,avec dans quel magasin je dois aller,bon après l'utilisateur ce n'est pas forcément primordial,mais donc les produits, etc.
00:08:34 :Donc cette table là que j'ai rajoutée un peu à l'arrache,il n'a pas de lien parce que je l'ai rajoutée juste avant de vous rejoindre,finalement elle pourrait très bien être générée dans une page,et ne pas être stockée,mais je me suis dit pourquoi ne pas la stocker ici,
00:08:52 :c'est pour ça que je l'ai fait un peu en décalé, en retrait,comme ça on pourrait voir la dernière liste,la dernière liste quand on a fait nos courses,simplement comme un aide mémoire.
00:09:06 :Voilà l'idée,et donc la finalité c'est que quand tout sera codé,ça sera hébergé sur un VPS Hostinger,et je développerai une version smartphone évidemment,responsive webdesign pour l'utiliser dans un magasin,pas forcément sur un PC.
00:09:36 :Donc voilà l'idée de fond de ce projet,pour ceux qui sont déjà dans le projet,moi je démarre seulement aujourd'hui,j'ai un mois de retard,j'ai un mois de retard parce que c'est un projet à faire en deux mois,mais ce n'est pas grave, c'est parti.
00:09:59 :Excuse-moi Gabriel,le départ de la conversation avec Gabriel sur Discord,c'était pour me dire ce qu'il pense de mon diagramme,et avant de poser les modèles dans Django,faire des tests, faire tout ça,tout ce qu'on me demande de faire dans le projet.
00:10:21 :Continue, franchement continue,par contre il y a juste un truc,après je ne touche pas à tes modèles,fais le projet qui te convient,juste au niveau du statut,regarde si les permissions de Django peuvent te falsifier,en fait je pense que tu pourrais avoir un modèle en moins,
00:10:41 :ça tu pourrais te dégager.Parfait, oui,c'est parce que je ne maîtrise pas toutes les subtilités Django,j'en ai fait quelques années,mais au risque de me répéter,j'ai oublié beaucoup de choses,donc c'est l'occasion de me remettre dedans.
00:11:03 :Ok, voilà.Merci aussi pour ton partage,j'ai demandé du coup,c'est top,c'est vraiment top,j'aime beaucoup l'idée,je pense qu'il y a beaucoup,beaucoup comme moi,ça va nous aider également dans le projet du mois,j'aime beaucoup, c'est top, merci.
00:11:26 :Merci, c'est encourageant,ça me reboost là,parce que je sais que j'ai un mois de retard,donc merci.C'est aux aléas de ma vie.Oui, c'est ça,c'est le travail,il y a toujours 20 000 choses à faire en même temps.
00:11:43 :Je comprends.Félicitations encore une fois pour ta présentation.Merci,c'est Baptiste, c'est ça ?C'est Bakary.Ok, ça marche,c'est moi qui te remercie,et puis,bonne continuation et bon courage pour le projet du mois.
00:12:02 :Merci.Merci, Lucien, en tout cas.Avec plaisir,merci Gabriel.Pas de problème, c'est normal.Est-ce que tout le monde est en écran ?Est-ce que c'est assez gros ?
00:12:19 :Ou pas ?Oui, c'est bon.C'est bon ? Ok.C'est génial.Donc,cimentera Django qui, pour moi,je pense que ça ferait du temps,parce que j'ai vu des choses sur le projet du moisoù il y a trop de perte de temps sur des chosesqui sont déjà faites avec Django.
00:12:39 :Donc,on part en fait,on va prendre un truc basique,un blog,avec des posts,un titre,un contenu.Je ne sais pas si vous connaissez un peule creative update,avec les auto-add, auto-nowet un auteur.
00:13:01 :Et donc l'auteur, en fait,c'est un one-to-one avec l'utilisateur.Est-ce que tout le monde connaîtun petit peu le auto-now ici ?Je vais vérifier dans le chat.
00:13:11 :Ça permet d'ajouterautomatiquement la date.Ouais. Donc là,en fait, c'est quand tu fais un auto-now,c'est quand tu l'ajoutes.Ici, ça enregistre la date et l'heure.
00:13:23 :Et donc,on part sur ce modèle-là des auteurset des posts. Enfin, un auteur et un post.Et donc le but, aujourd'hui,c'est vraiment que vous ne perdez pas de tempspour ceux qui sont en projet du mois, par exemple,ou les autres,sur toutes ces opérations de base.
00:13:45 :Donc vraiment du crud.Créer des choses, mettre à jour,supprimer.Donc voilà.Avec Django, en fait,on va aller sur...Est-ce qu'on voit mon édicateur ?
00:13:59 :Vous voyez bien là ou pas ?Mon super site.C'est très beau.Donc vous voyez, ça, c'est magnifique.Et en fait,là, j'ai une listed'articles avecpagination.
00:14:17 :Donc on peut allercharver, ainsi de suite.Hop. Et on peutmodifier, supprimer. Donc modifier,on va dire blabla,test,modifier, on peut supprimer.Voilà.
00:14:33 :Et donc ça, avec Django, en fait, c'est facileà faire, mais ces choses-là, c'est vraiment basique.Et donc, on ades vues qui fontdes vues intégrales Django.
00:14:43 :Donc par exemple, on peutimporter ce qu'on appelle les vues génériques.Donc les listes View, Details View,Create View, Update, Delete.Et donc, ce qui se passe, en fait, c'est que, par exemple,on peut définir une classe.
00:14:57 :Alors, je ne sais pas sitout le monde connaît,on peut avoir des vues fondées sur des fonctionset des vues fondées sur les classes.
00:15:05 :Est-ce que tout le monde, là-dessus,est à l'aise ?Ou c'est compliqué ?OK.Alors, attendez.Hop.Nickel, c'est bon.OK. Donc, ça, c'est bon.
00:15:25 :En gros, ce qui se passe,c'est que là, on va faire une liste View.Et ça, ça va être la page index.Donc, ce que j'ai fait, c'est qu'on va avoirune URL.
00:15:35 :Donc, j'ai une page.C'est la pageoù on va arriver sur le site.Ça va être l'index. Donc, j'ai mis deux guillemets.Et donc, j'ai appeléPostListeView. Et on appelle
00:15:47 :la méthode AsViewici pour afficher la page.Donc, elle est là.Ici.Alors, ce qui se passe, donc,avec une liste View,en fait, on varenseigner un modèle en attribut.
00:16:05 :Donc, là,on a un modèle, le Post,qui est ici.On va donner le templatepour savoir quel fichier HTMLon va gérer. Donc là, par exemple, c'est PostListe.
00:16:19 :Il est où ? Il est là.PostListe.Le fichier HTML.Et on peut définir,redéfinir le contexte.Parce que par défaut, c'est ObjectList.OK ? Donc là,
00:16:33 :je redis, par exemple, ça va être Post.Donc là, sinon, ça seraitil est où ?Non, c'est le PostList.Il est là. Donc sinon, ça serait ObjectList.
00:16:43 :Et là, sinon, je dis Post.Donc là, Post. Et on peutintégrer une pagination par défaut qui estfacile à faire,en fait, quand on est en classe.
00:16:55 :On va se dire qu'on va ficher10 instances sur la page.Donc là,1, 2, 3, 4, 5.Donc là, 1, 2, 3,4, 5, 6, 7, 8. Là, j'ai bien 10 instances ici.
00:17:07 :Et donc ça, on peut le fairecomme ça avec le paginate.En fonction, ça serait plus compliqué.Excusez-moi, j'ai mal à la gorge ce soir.
00:17:15 :Et donc,on pourrait très bien aussi, sur une liste View,ici,ajouter du contexte.Par exemple, on pourrait dire le contexte.Le plus simple de faire ça,c'est de dire,on appelle la tête super ici.
00:17:33 :Comme ça, on récupère tout le contexte.Et on va en rajouter.Par exemple,quand je dis autre,le contexte autre,je l'affiche ici,autre. C'est pour ça qu'ici,
00:17:47 :j'ai génial mon contexte.Parce qu'ici, j'ai rajoutégénial mon contexte.Donc on peut mettre du contexte dans les Vuessur les classes, c'est facile à faire.
00:17:57 :Il y a plein de gens qui n'aiment pasles Vues sur les fondées comme ça,les Vues génériques,parce qu'on croit que c'estrigide.C'est ultraflexible, parce qu'on peutmettre du contexte supplémentaire.
00:18:15 :On a l'imagination,on a le template HTMLqu'on va utiliser ici.Les postes,on peut redessiner un contexte.Et aussi, ce qui est très important,c'est qu'on peut redessinertout ce qui est permission.
00:18:31 :Par exemple,il y a plein de choses ici sur Mac,c'est quoi déjà ?Je ne sais plus.Les permissions ici,on pourrait très bienredéfinir avec le dispatch,qui va dire quepar exemple ici, si jamaison n'est pasadministrateur, on n'a pas accès à la page.
00:18:53 :C'est possible, avec dispatch.On pourrait faire ça,on pourrait très bien faire aussiutiliser un mixin.Je vais refaire.Si je prends ça,ici,là,je suis participateur, si je me déconnecte,je me déconnecte.
00:19:23 :Ici, je reviens sur la page403.Une 403,on n'a pas le droit d'accéder.C'est interdit.C'est une permission déniée.Vous pouvez l'importer avec Django.
00:19:41 :Ça retourne une 403.Là, c'est la méthode dispatch,qui dit qu'on ne peut pas accéder à la page.Ça, on peut faire.Il y a autre chose.
00:19:53 :On pourrait très bien dire aussiavoir unloginmixin.Le but, ce n'est pas de parler de mixin,parce que ce soir,on n'aura pas parlé de mixin.
00:20:09 :On pourrait faire un mentorat sur les mixins,mais là, en gros, cette classe-làpermet de dire qu'il faut se loguerpour accéder à la vue.
00:20:17 :Il demande un login.Je peux revenir sur la vue.Je peux revenir sur la vue.Il me faut un login.Je me log.Et c'est bon.
00:20:31 :Là, je suis logué.Pour ça, par contre,le mieux, c'est de définirune vue de login.Dans les settings, j'ai fait une login url.C'est une constante.
00:20:45 :Ça, c'estcomment dire ?Ce n'est pas built-in,mais Django a prévu ça.Il y a une constanteurl où on peut direque je vais faire la vue de login.
00:20:59 :Je l'ai appelé comme ça. On verra aprèspourquoi je l'ai appelé comme ça, mais en gros,ça, c'est ma vue que j'appelle.Est-ce que pour ça, c'est bon ?
00:21:07 :Pour l'instant.OK.On continue.Maintenant.Là, j'ai ma post-vue.J'ai accèsà tous les articles.Maintenant,ça, c'est la pagination.Vous l'avez surla doc Django.
00:21:35 :Tout ce qui est pagination,c'est un copier-coller.C'est un copier-collerde la doc Django.Le principal, c'est qu'en fait,sur chaque article, on peut cliquer pour aller surune vue qui nous envoie vers l'article.
00:21:49 :Là, j'aile titre de l'articleet j'ai dans l'urlle nom,le chemin de la vueque j'appelle blog post-detail.Comment je fais ça ?
00:22:03 :Ici, si je vais dansl'url,j'ai app nameque j'appelle bloget le point de détail, il est iciet je l'appelle post-detail.Je faisblog . post-detail
00:22:19 :Donc,blog . post-detailComme ça, on peutdécomposerles urls.Ce qui est importantavec une vue de détail, c'est d'avoirle pk. Le pk, c'est
00:22:35 :la clé primaire. On pourrait très bien avoiraussi le slug.Donc,soit le slug, soit la clé primaire.Ici, je pourraistrès bien avoir un truc à la placede ça.
00:22:49 :Avoirslug et puison met le slugpour la vue.Donc, la vue de détailva aller chercher le pkou le slug. On peut lui passer
00:23:09 :soit l'un soit l'autre.Si je reviens ici,vue de détail, ici,on donne le modèle qu'on veut,le template,le contexte, je mets postet puis ça,pour l'instant, on ne regarde pas, on verra plus tard.
00:23:25 :Quand vous cliquez,vous avez accèsà votre article.Donc là,j'ai la liste.Quand je clique, j'ai la vue de détail.C'est là.Alors ici, est-ce quequelqu'un connait ce qui estSelect Related ou pas ? Est-ce que vous connaissez ?
00:23:45 :Par hasard.Ok.Donc, ça, c'est pas mal.C'est important, je trouve.Dans le template,par exemple, c'est Detail.Ici, il est où ?Est-ce que j'ai mis l'auteur ? Non, je n'ai pas l'auteur.
00:24:05 :Ici, j'aientre guillemets l'auteur.En fait, tout ce qui estSelect,imaginez que vous avezl'exemple que j'aiqui n'est plus parlant.Sur YouTube,c'est pas mon compte.
00:24:27 :Je le laisse sur YouTube.Une image.Ici, et normalement,ensuite là.Voilà, c'est celui-là.Excusez-moi.C'est bon.On voit bien l'écran ?Oui, parfait.Donc en fait,on récupère tous leson va récupérer tous lesboucles, on va dire.
00:25:01 :Quand vous faites comme ça une boucle,vous allez à chaque auteuravoir une requête.Sauf que si vous faites ici unSelect Relative, donc l'exemple du bas,quand vous faites ça, il n'y aaucune requête qui est faite.
00:25:15 :Là, c'est juste une requête qui est faitequi est chargée dans l'image dePython, et puis vous affichezles auteurs,l'instance auteur.Vous printez le nom ici.
00:25:27 :Donc en gros,quand vous faites ça,vous récupérez tout le monde,mais dès que vous faites un print, ici on va récupérerune requêtepar auteur, que là, c'estune requête et c'est tout.
00:25:41 :On récupère tout le monde.Donc sous le capot, c'est un Selectdans le sens SQLqui vafaire le travail.Voilà.Donc ça,important, faites-le, parce que sinonsi vous avez un chiffre où il y a beaucoup deutilisateurs qui sont dessus,ça peut vite devenir chiant.
00:26:03 :Donc ça, faites-le. Pensez au Select.Je m'arrête là parce queje ne veux pas m'arrêter sinon.Il y a d'autres choses à voir aussi.Je ferai un mentorat là-dessus.
00:26:15 :Donc là, on a vu le Select.Non, j'en parlerai pas ce soir.Donc là,on a vu le détail. C'est pour ça que je fais un Select
00:26:23 :pour avoir l'auteur.Et comme ça,dans mon template,quand je vais bouclerpar exemple pour afficherl'article,si j'ai le contenu,l'auteur,j'aurai plus de requêtes.
00:26:41 :Donc là,en fait, j'ai cherchéun prétexteà redéfinir le query set.Je n'avais pas d'idéeet je me suis dit que ce n'était pas une bonne idée.
00:26:53 :Donc là, on a le détail.Ensuite, on peut avoir une vueoù on va créerun article.Imaginez, si on est là,je crois que c'estbloget create blog.
00:27:09 :Donc là,on a un formulaire qui s'affiche, qui est très beau,comme vous voyez.C'est moche maisc'est basique.Et donc,j'ai fermé ça,il est où ? Il est là.
00:27:27 :Donc en fait,ce qui se passe ici, c'est que j'aiune vue decréation, on peut créer une instance.Et dans le contexte,on va juste envoyerform.
00:27:43 :On pourrait mettre juste ça,ça marcherait aussi.Donc là, on met juste form,ça marcherait aussi. Et par défaut,form, c'est le contexte du formulaire.
00:27:55 :Donc on pense à mettre le token,sinon ça ne marchera pas.Et dans la create view,on définit, pareil,un fichier HTMLet on peut définir des champs.
00:28:07 :Donc notre modèle,on a par exempletitle, content,on les a mis ici, on a ces deux champs là.Et alors,comment expliquer ça ? Donc là, j'ai mis plein de commentaires.
00:28:21 :En fait, quandvous validez ici votre formulaire,def.form.value, c'est une méthodequ'on hérite de la create view.Pensez à passer leformulaire en paramètre ici.
00:28:33 :Et on peut très bien récupérer des champsici.Le champ title ici, donc par exemple,le champ title,je le récupère iciavecform.value.Et je peux dire, je récupère le titreet le titre ici,le form.instance.title,
00:28:53 :je vais dire, je vais le mettre enmajuscule.D'où le...Lui, il est enmajuscule.Parce que j'ai créé un article avec ça.Ce qui est intéressantavec le form.value,
00:29:09 :vous pouvezcomment dire,dynamiquement,on peut très bien se dire que l'auteurde l'article, ce seraforcémentcelui qui est connecté.On peut se dire self.request.user.
00:29:25 :Attention,c'est une classe, doncle requestici, c'est dans un attribut d'instance.C'est pas juste request.user, c'est self.request.user.On peut le récupérercomme ça, et on peut direque l'auteur, ça va être le utilisateur.
00:29:41 :Est-ce que pour l'instant, c'est bon ?Je vérifie.C'est pas dans le chat.Ça va, ok. Je continue ?Nickel.Super. Une question ?Non.
00:29:57 :Donc là, on peut très bien récupérer comme çales attributs,ce que j'ai fait là, l'utilisateur,ça change automatiquement.Aussi, ce qui peut être très bien à faire,c'est, ça je vous montre,j'ai commenté,imaginez que dans votre modèle,on va le laisser comme ça,dans votre modèle, dans votre
00:30:19 :URL,createview,ici, on pourrait très bienavoir, je sais pas,un modèle parent ici,qui serait là.C'est possible, je sais pas, genre,je vous montre, j'ai un projet oùje créedes servicespar rapport à des projets.
00:30:41 :Donc je pourrais très bien envoyer icile slug ou le PKd'un projet.Je l'efface, donc je le remettrai ici.Et dans une vue, on peut très bien dire,hop, ici, avecles quarks,on va récupérer, par exemple, ici, si j'avaisil est où ?
00:30:59 :Il est là, tac.Si j'avais, par exemple,un modèle ID, comme ça,un modèle ID,bon là, c'estfait à l'arrache, mais on voit le principe.
00:31:11 :Si j'avais un modèle ID,je pourrais dire, hop,je pourrais le récupérer comme ça,modèle ID,dans une variable,et puis faire mon modèle,et récupérer comme çal'instanced'un autre modèle.
00:31:29 :Voilà, en fait, dans les URL,vous pourrez récupérer plein de choses,et vous les récupérez avec les quarks.Assezsimplement, et c'est facile à faire.
00:31:39 :Est-ce que pour l'instant on est bon ?Est-ce que je passe à la suite ?Oui.Excellent, merci.Rien que là, déjà, merci.C'est pour ça que je dis, pour le projet du mois,j'ai vu des trucsoù je me suis dit, mais non,il y a tellement de temps à gagner, en fait, avec Django.
00:31:57 :Donc là, déjà, il y a plein de choses à faire.L'update, ici,c'est facile à faire.J'ai l'update view,pareil, j'ai le modèle,le template,les films,basic, title content,donc quand je vais ici,modifier,je récupère toutce que j'ai à la base dans les champs.
00:32:21 :Donc,si je reviens surun vase, lui, par exemple,je clique, je récupère ce que j'aiici.Je n'étais pas très inspiré, mais ce n'est pas grave.
00:32:33 :Donc là,l'update view, vous allez forcément récupérertout ce que vous avez dans vos champset vous le modifiez.Donc, update view,il faut penser icià la méthode,et à penser à passer un PK,une clé primaire ou un slug.
00:32:51 :Sinon,Django ne saura pas sur quel instantvous allez bosser.Donc ça, c'est pour ce qui estl'update. Le delete, ici,donc,si pour info, on pourrait, alors il est où ?
00:33:05 :Le detail, le confirm,le form, et l'update.Donc,pour le HTML,ce qui se passe, c'est que ici, j'ai le formulairede création.Là, c'est le cache and form.
00:33:19 :L'update, vous voyez, il n'y aquasiment aucune différence.On pourrait très bien avoir le mêmefichier HTML. En général, moi,j'ai le même pour les deux, par exemple.
00:33:29 :Là, il y a très peu de différences,donc c'était juste que pour l'exemple ici,j'ai fait deux choses différentes.Mais on pourrait très bien avoir la même chose pour les deux.
00:33:37 :Je me dégorge.Pour la delete view,qui est sympa aussi,on va faire un essai.Hop.Donc là, sur un article,on peut supprimer.Et quand je clique,j'aiune confirmation.
00:34:03 :Donc ça, il faut le faire dans un modal.En HTML, on pourrait très bien faireun modal. Avec bootstrap,c'est facile, c'est modal.Non, merde, bootstrap.
00:34:17 :On écrit.Voilà, par exemple,on pourrait bien utiliser un modal de bootstrap.Et qui dirait,est-ce que vous voulez vous supprimer ? Ok, je clique.
00:34:27 :Hop, supprimé.Le sondage, là, je clique.Supprimé.En fait, ce qui se passe, c'est quetrès important, je n'en ai pas parlé tout à l'heure.
00:34:37 :Je ne l'ai pas dit par la create.On va le faire à la fin.Donc là, en gros, quand vous supprimezl'instance,ce qui se passe, c'est que vous avezun fichier HTML pour afficheren gros lela confirmation.
00:34:57 :Donc le delete, ici, il est où ?Il est là. Donc là, j'ai un delete.Confirmé expression machin.Et là, j'ai un bouton supprimé.Et en fait, ce qui se passe, c'est que je redirigevers la vue home.
00:35:13 :Home, qui est l'index du site.Donc, très important,ici, est-ce que pour l'instant ça va ?Je vérifie s'il n'y a pas de message.Ça va pour l'instant ?
00:35:23 :Ok.Donc là, on a toutes les vuespossibles.Donc, très important,une create view,une update, ici.Il y a des attributs qui s'appellentsuccess URL, ici.
00:35:39 :Je ne vais pas le décommenter.Ça permet, en fait, qu'il y ait un reverse living.C'est une fonction.Une fonction.Une fonction Python, final Django.
00:35:49 :Pour l'instant, il y en a 4.Ou, donc,success URL, c'est là où vous êtesredirigé. Et sinon,vous avez get success URL, ici.Donc, celle-là,la méthode, elle est prioritaire sur l'attribut.
00:36:03 :Donc, si vous définissez cette méthode-là,en gros,le succès, il estprioritaire.En gros, ce qui se passe, ici,c'est que je crée, par exemple,une instance.
00:36:17 :Je créeune instance,et je suis redirigé, en fait, vers l'instanceque j'ai créée. Donc, dans mon URL,ça, je l'ai.Hop. Hop.Je fais ça.
00:36:31 :Project,on s'en fout. Voilà.Donc, on est là. Une instance de poste,poste detail, j'ai bien un PK.Donc, ce qui se passe, ici, c'est que je faisun get success URL, je faisun reverse. Blog,
00:36:45 :blog,poste detail,blog,poste detail. Et, en fait, j'envoie, ici,dans les arguments, le PK, en fait,du...de l'article.Donc, en gros, vous pouvez envoyer comme ça.
00:37:01 :C'est pour ça que le success URL, ici,est plus basique.Donc, là, il y a...On peut mettre plus de logique, en fait, dans le success URL.
00:37:09 :Là, je fais pareil. Je renvoie, ici, versl'article en question.Et, ici, par contre, quand je supprimeun article, je me dis, bon, on va vers le...
00:37:17 :Je renvoie vers le...l'index.Alors,important, est-ce que quelqu'un sait pourquoion fait, par exemple,un reverse layout, ici ?Et pourquoi, des fois, on a des méthodes ?
00:37:31 :Est-ce que vous comprenez pourquoi on fait ça ?Pour info.Ok.Le reverse,c'est pas parce que, en fait,la page, elle est...elle n'est plus d'actualité, en fait.
00:37:49 :Ce n'est pas un rapport avec ça ?Alors, non. Là, c'est un problème de pur piton.Quand vous chargez, en fait, un projet Django,ce qui se passe,quand...
00:37:59 :Là, j'ai un success URL,ici. Faites un test,quand vous avez un... Faites un petit projet,comme ça, dans le...Si je fais ça...Tac. Une sandbox.
00:38:11 :Hop.Si je fais une classe,fou.Hop là, fou.Je vais y arriver. Et je vais mettredans ma classe, je vais faire justeun print.
00:38:25 :Hello world.Hop.Et là, je vais exécuter.Copilot, c'est un petit peu...Ok. Donc là, ça affiche hello world.Donc, en gros, il faut savoir que quand vous avezune classe, les attributs, ils sont directementchargés. Donc là, par exemple,
00:38:41 :quand je fais un print dans ma classe, je lancele script. Pourtant, je n'ai rien appelé.Je n'ai même pas appelé la classe. Elle n'est pas
00:38:47 :instantiée. Mais piton va aller,en gros, chargertout ce qui est dans la classe. Donc, tousles attributs.C'est pour ça que, du coup, je reviensà mon exemple. Pour ça,
00:38:59 :ça va, c'est compris ou pas ?Excusez-moi.Ouais, ok.Donc là, piton va charger tout ce qui est dans la classe.Donc,pour ceux qui ont compris le problème,il est où,docstring...
00:39:15 :...Si jamaisvous avez une classe où vous définissezun truc sur URL,le reverselazy, comme on dit.Le problème, c'est que, du coup, les classesvont être chargées, entre guillemets, directement.
00:39:31 :Ce n'est pas vraiment vrai ce que je dis, mais,en gros, sur principe. Et qui va aller chercherici l'URL de la vue.Sauf que, votre vue,elle n'est pas encoreconfigurée, entre guillemets, dans lechargement de Django. Ce n'est pas encore fait.
00:39:45 :Donc, on fait un reverse lazypour dire que c'est paresseux.Donc, en fait,ça, on le chargera plus tard.C'est bon.Ah oui.Ok.Ça joue un peu le rôle dela condition if-mail.
00:40:03 :Ouais.Ouais, ouais.Quand tu fais du...Tout dépend du contexte, en fait, dans quoitu utilises, mais oui.Effectivement.Tu fais ça, en fait, pour savoir quand est-ce que tu charges les choses.
00:40:19 :Là, j'ai vu unmessage.J'étais sur quoi? Donc, du coup,je suis parti de tout à l'heure.Je suis parti loin de tout à l'heureet j'ai oublié de dire que,voilà. Donc, tout à l'heure, on était sur le
00:40:37 :login. Donc,au tout début de la session,je reviens là-dessus,excusez-moi, sur tout ce qui est login.Pour tout ce qui est vu comme ça, quand on est surles classes, on voudrait bien dire qu'on a un login.
00:40:49 :On peut très bien avoir iciun permission. Hop.Hop là.Un médecine permission.Il est gentil, voilà.On le signe direct. On peutaprès, du coup, hériter un attribut qui estla permission d'employé. Ce qui peut dire
00:41:07 :en gros, si on a la permission qui estici, eh bien, on a accèsà la vue. Sinon, on a une 403.Comme la permission d'un médecin.
00:41:15 :On peut redéfinir,du coup, je ne sais pas si je l'ai en exemple ici,il y a une vuequi s'appelle, je ne sais plus le nom,c'estpermission ici.
00:41:27 :On peut redéfinir une permission.Par exemple, il me le dit, voilà.Ok.Donc là, en fait, on peut redéfinirsoit un attribut,soit une méthode.
00:41:39 :Donc, si jamais on n'est passuper éducateur,on n'a pas accès à la vue.Autre méthode.Autre méthode qui est,qui se trouve très pratique.
00:41:51 :Moi, perso, je puisesur un LoginRecurrent.Mais sinon, autre méthode,hop,ce que je fais souvent,merci Copilot,ce que je fais, c'estla méthode Dispatch ici.
00:42:07 :Hop.Et on peut utiliser ici le LoginRecurrent ici.C'est cibler la méthode Dispatchet Dispatch qui est ici.Donc si j'enlève, hop,le raccourci est là.
00:42:21 :Et en fait, avecDispatch, on peut cibleravecledécorateur, on peut cibler une méthodedonc Dispatch.Donc là, on peut la supprimer,on s'en fiche. Hop.
00:42:37 :Contexte.Et dire, en fait,il faut sur un Dispatch un Login Recurrent.Donc en gros, quand on verrait sur la vue,il faudra être connecté.
00:42:47 :Donc en gros, ce qui se passe, c'est qu'on peut très bien direavoirun décorateur comme ça.On peut très bien avoiriciunPermission Recurrent. On peut avoir
00:43:01 :le Login aussi,médecine. On peut directementredéfinir ici la méthodeDispatchou, par exemple, je ne sais pas comment j'ai fait moi,j'ai un projetqui se joue là. C'est mon site personnel
00:43:15 :qui est open source. Le code, il estbon. C'est duwhitetail, donc c'est un petit peu à part.J'ai plein de, c'est Djangomais un peu auditionné.
00:43:25 :Si je vais ici, que je vaisdans les vues de, pas du blog,des clients,qui sont des clients,donc Customers sont là.Si je vais dans les vues, par exemple,ici j'aides métadécorateurs et je vais dire, par exemple,en gros,il faut être administrateur pouraccéder à la vue. Et je cite Dispatch.
00:43:47 :Donc si jamaisquelqu'un n'est pas administrateur, il a une 403,ou avec, je ne sais plus sic'est une 403, une redirection deLogin. Bref, il ne peut pas accéder
00:43:57 :à la vue s'il n'estpas administrateur.Donc ça c'est un projet qui est en production.J'invente pas.Ici j'ai toutes mes vues.Et en gros, pareil, j'ai du, j'ai de la,donc là j'ai une fonction,par exemple.
00:44:13 :Là, j'ai de laclasse, List, Create,Detail, Update,Delete.Et après, j'ai plusieurs modèles, donc j'ai plein declassescomme ça.On parlera de ça plus tard.
00:44:31 :Ça va être intéressant de voirces méthodes-là.Donc voilà, c'est un projet où ici,toute l'administration que j'ai fait,tout le temps dans mon template, j'ai toutfait avec des classes quasiment.
00:44:43 :Voilà. Et très pratique.Doncon parlera de ça s'il y a des paramètres.On fera ça plus tard. Donc voilà,je reviens, excusez-moi,sur monVisualango.
00:44:57 :On vafinir. Juste,est-ce qu'il y a des questions pour l'instant ou pas ?Est-ce que je parle trop vite ?Non, c'est bon.C'est bien.
00:45:09 :J'ai une question.Quand est-ce qu'il faut mieux utiliserles classes plutôt que les fonctions ?Je l'attendais, celle-là.OK.Alors,par exemple, OK.Donc on y va. Question
00:45:25 :intéressante. Imagine, tu as un projet,celui-là n'est pas bien.Est-ce que dans tes vues,la question, c'estest-ce que dans tes vues, tu vas faire des choses un peu pluscomplexes ou pas ?
00:45:39 :Même si tu peux le faire avecl'influence sur les classes.Perso, enfin moi, mon ressenti,comment je le fais, en fait, ce qui se passe,j'utilise les classesquand j'ai vraiment besoin de faire de la liste,vraiment du crud basique.
00:45:53 :C'est récupérer une listed'objets,afficher un objet, modifier,créer.Quand c'est basique, perso, je prends des classes.Perso,mon projetqui est là,là, c'est que de la classe.
00:46:11 :C'est quasiment que de la classe.Parce que je fais en fait que du basique.Quand on regarde,je récupère des objets, je supprime,je rajoute, et ainsi de suite.
00:46:21 :Par contre, si tu veux avoir une vuequi va être un peu plus complexe,où tu as plus de logique, moi, perso, je fais une fonction.
00:46:27 :Etquand je code en Django,donc même pour une boîte pour laquelle j'ai codé,je pense que je pourrais direque je fais90%de fonctions et 10% de classes.
00:46:41 :Vraiment. Les classes, c'est pratique,mais dans certains cas.Je demanderai à Thibault,mais je pense qu'il est d'accord avec moi là-dessus.Est-ce que j'avais autre chose ?
00:46:55 :Je ne sais pas si j'ai un exemple là.Non, je n'ai pas l'exemple ici.Est-ce que j'ai ma méthodesetup ?Non, je ne l'ai pas ici.
00:47:05 :Il n'y a pas de setup. Non, ce n'est pas grave.Ah si !Donc là, c'est mon projet qui est en production.La méthode setup.
00:47:13 :Avec Python,vous avez la méthode initquand vous instantiezune classe.Avec Django, vous avez le init, bien sûr.Avec Django, ce qui est compliqué,c'est qu'il y abeaucoup de choses qui tournent derrière.
00:47:29 :Mais la méthode setup, elle est après appelée init.Donc si jamais vous avez besoin decréer un attribut d'instance,avec Django, vous redéfinissezici setup.
00:47:39 :Là, par exemple, j'ai redéfinij'ai selfonprojectet je l'utilise dans plusieurs méthodes.Pensez-y.setupelle est faitepour ça.Personne ne l'utilise.Je n'ai jamais vu l'utiliser, mais elle est bien pour ça.
00:47:57 :Après init, on n'a pas de setup.Et donc, vous pouvez créer vosattributs ici.Et après, on peut les appeler ici.Donc, project ici, j'utiliseici, et ici.
00:48:09 :Donc, ça peut être pratique.Je parle, je parle,je parle, mais je vais m'arrêter là.Est-ce que du coup,pour vous, c'est parlant ? Est-ce qu'il y a des questions ?
00:48:21 :Est-ce que ça va, ça va pas ?Oui, ça va.Après, quand tu disc'est basique, c'est pas beau,mais en fait, c'estsuper fonctionnel.
00:48:41 :J'aime bien l'approche.Je vois, par exemple, dans mon cas,j'ai pas le temps, je vais utiliser ça.Les ajouts, supprime, modif,ça marche tout seul.
00:48:51 :Je dis pas que ça marche tout seul, faut pas que je me trompe dans le codage,mais je pense qu'effectivement,je vais gagner un peu de temps.
00:48:57 :Moi, ça marche plus que tout seul, du coup.Franchement, regarde,j'ai une pagination ici, par exemple, que j'ai faite.On peut avoir l'ordre des instances ici.
00:49:05 :On peut tout faire avec les classes.Et maintenant,on voit pas mon code.Oui.Ici,je sais pas si on voitmon écran.Oui. Et là, vraiment, pour toute
00:49:23 :la partie admin client,moi, ma gestion de client, elle est quasiment quesur les classes. J'ai que de la classe.J'ai la pagination,j'ai l'ordering ici.
00:49:33 :En fait, on peut tout faire avec.C'est juste que je connais des gens qui m'ont dit...Comment ils m'ont dit ça ?Je dis pas que ça marche tout seul.
00:49:41 :Je dis pas que c'est nul.Moi, j'adore les classesavec Django. Il y en a plein qui n'aiment pas.Une personne m'a dit, un pro en plus,qui m'a dit queça pouvait devenir compliqués'il y avait trop de mixing.
00:49:55 :Mais franchement, les classes, les vues génériques,il y a un héritageà avoir. Donc en fait,il n'y a rien de très compliqué.Ça va vite mettre en place.
00:50:05 :Moi, perso, je recommandebeaucoup des classes comme ça pour les opérationsbasiques de CRUD. C'est fait pour ça.C'est fait pour ça. Donc franchement,faites-le.
00:50:15 :Est-ce que ça a été assez clair ?Est-ce que c'est pas clair du tout ?Dites-moi.Tu penses que c'est raisonnablede partirsur le côtéclasse, rapide,et après, une fois que tout est fonctionnel,de pouvoir s'intéresserau côté visuelde la chose ?
00:50:49 :Est-ce que tu pensesque c'est raisonnable ou il fautle prévoir dès le départ ?Moi, je pense que si tu te disdans ta tête queles opérations que tu vas faire,que tu vas faire ça avec une vue sur les classes,tu peux le faire. Fais-le.
00:51:05 :Ça va te faire gagner un temps fou.Franchement.C'est un gain de temps.Le projet que j'ai montré, c'est vraimentun projet en production,et j'ai gagnévachement de temps avec ça.
00:51:19 :La pagination avec Django,c'est rapide à faire en fonction.Mais les vues génériques,c'est vraiment ultra rapide.C'est plus d'attributs quasiment à faire.Donc fais-le.
00:51:31 :Merci.De ma part,j'utilisetrès souvent les vues fondéessur les classes.Je trouve que c'est plus malléableet ça procureplus de fonctionnalitésque les vues basées sur les fonctions.
00:51:49 :C'est pas vrai.C'est surtout des vuesplutôt.Arcel, qui fait beaucoup de Django,témoignage,il fait beaucoup de classes.C'est ultra flexible.On croirait que non, mais c'est ultra flexible.
00:52:05 :On peut mettredu contexte en plus,et ainsi de suite.Il faut juste savoir les manipulersans se compliquer la vie.Si ça devient trop compliqué,il faut m'y éviter.
00:52:19 :Sinon, ça marche bien.Est-ce qu'il y a des questions ?Ou pas ?C'est pour vous.C'est bien. Merci beaucoup, Gabriel.C'est bon.Merci.J'espère vraiment que ça vous a...
00:52:39 :J'espère vous avoir convaincu sur le faitqu'on peut gagner beaucoup de temps sur ce genre de choses-là.Un petit bonus.J'ai prévu un moteur.Je le montre en 30 secondes.
00:52:53 :Merci.On voit mon écran ?Oui.OK.Là, par exemple, imaginez...C'est parce que je l'ai vuen vrai quelqu'un qui a fait çaqu'il n'y a pas besoin.
00:53:09 :Quelqu'un qui veut faire un login.On se crée un compte sur l'application.On va faire une vue pour se connecter.Pas besoin.Là, par exemple, si je vais dans...
00:53:21 :Ce n'est pas mon projet.Je vais dans mon projet.Il est où ?Il est tout ce qui est Vulkan.Imaginez une vue de login.
00:53:31 :On va s'embêter à faire du login.Pourquoi pas ?On pourra très bien refaire...On pourra refaire un héritage,hériter du login.Sauf qu'ici, Account,j'ai une vue de login,sauf qu'ici, je n'ai pas de vue.
00:53:47 :Ça paraît bizarre.On ne voit pas les codes.Vous ne voyez pas ?On ne voit rien ?Non.Le portage d'écran n'a pas dû fonctionner.
00:53:59 :J'étais en train de me demander.Merci.C'était de mon côté.On voit là ?On voit là ?Oui, là, c'est bien.Donc, en gros,par exemple, pour le login,je disais,j'ai une vue de login, sauf qu'ici,je n'ai pas de vue.
00:54:21 :Parce que le login, je le gère directement.Ici, j'utiliseun module Django.J'ai un alias.C'est l'alias qui est préconisépar la documentation.Je me fais directementmes vues de login logout,comme ça,qui sont faites par Django.
00:54:43 :Et on peut très bienréutiliser çaet redéfinir un template HTML, par exemple.Et donc, ici,j'ai bien monlogin, mon logout,sauf queje n'ai pas de vue.
00:55:01 :Mais en fait, dans l'URL,directement, ici, j'ai un template HTML.Donc, en gros, si je suis sur la vue de login,qui s'appelle account login,et bien, je te le dirais,sur le login.html,
00:55:13 :il réutilisait les fonctionnalités Django.Donc, en fait, pas besoin de redéfinir des vuesde login, ici.Parce que j'ai vu des casoù j'ai vu quelqu'un qui a redéfini à chaque foisle login, le logout.
00:55:25 :On peut très bien faire ça,appeler les classes login,le view, le codeview, et de suite,et les redéfinir.Mais je pense que ça peut être suffisantde les redéfinir dans l'URL, comme ça,avec le template qu'on veut.
00:55:39 :Voilà. C'était juste le petit mot de la fin.Donc là, en fait, je n'ai pas de vue.Et pourtant, j'ai du login, logout. J'ai aucune vue.
00:55:45 :Ici.Mais elles sont là, quoi.Donc voilà. Je m'arrête là-dessus.Sinon, ça peut finirà minuit, quoi.Donc, voilà.Super.Merci.OK.Écoutez.Moi, je m'arrête là.
00:56:07 :Est-ce qu'il y a des questions ou pas?Merci. Merci tout le monde.C'est gentil.Pas de questions?Je vais couper l'instant.Non.OK.Merci à tout le monde pour ce soir.
00:56:23 :Franchement, d'être là.C'était cool.Comme je dis à chaque fois, je parle beaucoup.Donc, si jamais il y a un blocage, vous le dites.Maisje pense que je n'ai pas été trop vite ce soir.
00:56:35 :Donc, voilà. J'espère que ça vous a plu.Et puis...Ça tombepile poil dans mon coeur.Merci.En gros, le mot de la fin, c'estgagner du temps. Voilà.
Aucune occurrence trouvée pour « ».
00:00:14
Présentation de JC projet gestion de stocks : diagramme de la BDD
00:12:29
Les vues génériques Django