Session du 04 septembre 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
Simplifier l'authentification et la gestion des mots de passes sans écrire de vues : partie 1
00:00:00 :Et voici la liste de termes techniques ou de noms qui sont souvent utilisés dans les sessions de mentorat.Là c'est un petit mentorat pour montrer comment on peut simplifier et personnaliser les vues de base avec l'utilisateur.
00:00:53 :Le signe-up, login, logout, changement de mot de passe, reset de mot de passe.Donc je disais, parce que souvent il y en a qui recréent à chaque fois plein de vues pour faire changement de mot de passe ainsi de suite,je l'ai fait aussi pas mal au début, mais en fait il y a un moyen assez simple de ne pas créer de vues en soi,
00:01:33 :c'est-à-dire de les instancier directement dans les URL.C'est un peu bizarre dit comme ça, mais il y a moyen de faire ça.Je vais partager l'écran.
00:01:49 :Je prépare un peu le terme pour le mentorat la semaine prochaine.Là on va faire un truc simple avec du Django pur et la semaine prochaine on fera ça avec une extension.
00:01:59 :Tout ce qu'on va faire là on pourra le faire avec l'extension, mais en plus on aura aussi l'authentification avec Google,GitHub, Facebook et encore plein d'autres.
00:02:08 :Mais là on va commencer simple en Django pur.Bon déjà, vu que c'était le début de l'année, je pensais qu'il y aurait un peu plus de...
00:02:16 :Enfin qu'il y aurait des débutants, mais non.Donc je pensais faire le projet depuis le début, mais c'est pas grave, je vais le faire rapidement ça.
00:02:22 :Je vais l'appeler Haute V1.Johanna, surtout si tu as des doutes, tu me le dis.Hop là.On n'est pas encore Django, il n'y a pas de problème.
00:02:43 :Tac.On va s'activer.Et on va installer Django.Ici on n'aura besoin que de Django, ça suffira largement.Hop.Et on va faire un start project.
00:03:06 :Et c'est fait.Normal, ça ne passe pas.Si je ne connais pas le J, admin.Hop.Start project.Project.Voilà, c'est mieux.Puis on va s'accorder ce code.
00:03:24 :Qu'est-ce qu'il me voit ?Ok, c'est bon, j'ai ce qu'il faut.Nickel.Tac.Du coup, Arcel, toi qui utilises Django, j'ai une question à te poser.
00:03:36 :Est-ce que tu m'entends bien ?Oui, je t'entends.Ok.Est-ce que ça t'arrive de créer des vues de changement de mot de passe,de reset des mots de passe, de login, directement dans les URLs ou pas ?
00:03:49 :Juste comme ça.Directement dans les URLs ? Non.Non ? Ok.Ce qu'on va faire aujourd'hui, en fait on va créer qu'une seule vue dans le Views,mais tout le reste on va faire directement dans les URLs.
00:04:04 :C'est assez pratique.Allez, tac.C'est parti.Donc, je vais juste me prendre le petit note que j'ai mis pour vous expliquer un peu.Je vais faire ça dans l'ordre.
00:04:16 :Tac.Donc, c'est ce qui va se passer maintenant.Donc là, on va du coup se faire...Et du coup, Antoine, tu es vraiment...Du coup, Joanna n'a pas encore commencé.
00:04:27 :Mais Antoine, vu qu'elle vient un peu de Django,est-ce que tu es à l'aise avec toutes ces créations d'applications et tout ou pas ?Ouais.
00:04:33 :Vraiment ? Ok.Nickel.Tu as déjà bien...C'est bon level, quoi.Qu'est-ce que je vais dire ?Donc là, première chose, on va aller dans les settings.
00:04:47 :Donc ça, ça fait des rappels.Joanna, tu as déjà vu le faire.Moi, ça fait des rappels un peu comment ça fonctionne.Parce qu'on crée le projet de zéro.
00:04:56 :Donc déjà, ça de base, je ne le mets jamais dans le versionnage.J'ai un Django environ pour cacher un peu tout ça dans un fichier à part.
00:05:04 :Mais pour l'exemple, on s'en fiche.Ce n'est pas le but.Donc, qu'est-ce que je fais ?Déjà, on va se mettre l'application en français.Même si là, ça n'a pas trop d'impact.
00:05:15 :Hop, on va...On va se faire un petit...Hop là.Donc, tac.Si je fais ça, en fait, c'est parce que Django ne reconnaît que les dossiers templatesquand ils sont dans une application.
00:05:35 :Donc là, je n'ai pas encore créé l'application.On est dans le dossier projet.Donc, en fait, Django, vu que je vais créer ici, par exemple...
00:05:43 :Est-ce qu'on peut filmer ça sur l'extrémité ?Vu que je vais créer ici, par exemple, un dossier template.Hop.Le dossier template, il est entre guillemets à la racine du projet.
00:05:53 :Il n'est pas dans l'application.Du coup, je vais le spécifier avec BaseDir que je mets en template.BaseDir qui est ici.En gros, BaseDir, on remonte là.
00:06:03 :Donc, on fait BaseDir template.Voilà.Donc ça, c'est pour qu'il reconnaisse, en fait, notre BaseDir.Chose qui peut être intéressante en Django.Alors, un truc qui n'est pas hyper connu.
00:06:16 :Je ne sais pas si ça, vous l'avez déjà fait.En fait, ce qu'on peut faire...Quand vous envoyez des e-mails,on est d'accord qu'il faut bien se créer un serveur mailavec toutes les configurations, SMTP et adresse mail.
00:06:30 :Ça n'a pas pour vous de problème ?Nope.OK.Donc, quand vous avez la flemme,vous pouvez faire un truc avec Django qui est super pratique.
00:06:41 :Euh...Reste en esquive de renseignement.Backend console. Ouais, ça va. Tac.Nickel. Il avait raison.Donc, en fait, on peut spécifier le backend e-mailet lui dire que tous les e-mails qu'on va envoyer,on va les envoyer dans la console directement.
00:06:56 :Donc, quand vous êtes en mode développement,c'est hyper pratique.Ça vous évite d'aller jouer sur votre main, machin, et ainsi de suite.Bon, j'imagine qu'en PHP,t'as ça toi, Antoine, sur tes frameworks, non ?
00:07:10 :En Symfony, ouais.Ouais. Et la Ravel, t'en fais ou pas ?Non, j'ai regardé un petit peu, mais j'en ai pas fait plus que ça.
00:07:18 :Mais il y a beaucoup de modules qui sont tirés de Symfony,donc ça va.D'accord. OK.Donc, avec Symfony, en tout cas, tu peux le faire, ça, du coup.
00:07:25 :Ouais. OK.Bon, c'est...On va voir un peu ce qui se fait à côté.Euh... OK.Donc, maintenant, on va...Faut envoyer nos mails comme ça.
00:07:37 :Et on va se créer...On va faire tout de suite.Manage.Start app.Et on va l'appeler...Accounts.Pour que l'application soit reconnue,il faut bien sûr aller ici et l'ajouter.
00:07:53 :Hop, voilà.Normalement, Settings, on va suivre et revenir.Et je vais penser à quelque chose que j'ai oublié de faire,et je ne sais plus quoi.
00:08:02 :C'est intéressant.T'as brouillé ?Oui.Je ne vois pas ton écran.Je ne sais pas si je suis la seule personne.Moi, je le vois.
00:08:15 :OK.Et c'est assez grand ?Déjà, je l'ai oublié un petit peu.Peut-être que ce sera mieux.En plus, j'ai mon petit écran de MacBook.
00:08:26 :Tu ne vois pas du tout, là, Arsène ?Non, pas du tout.Je pense que...Euh...Interscreen.Et là ?OK.Je pense que c'est de mon côté, en fait.
00:08:47 :Là, ça va.C'est bon ?Oui, c'est bon.Cool.Merci.J'ai zoomé.Est-ce que ce n'est pas trop gros ?Est-ce que ça va ?
00:08:56 :Vous préférez comme ça, là, ou comme ça ?Moi, les deux me vont, mais...Ouais.Euh...Je ne sais pas.Peut-être que c'est comme ça.
00:09:09 :Je suis sur un petit écran,donc ce sera un peu galère après.Je vais faire comme ça pour l'instant.Euh...OK.Jean était où ?
00:09:16 :Du coup, on a créé l'application.On est bien français.On envoie les mails.OK.Pas de problème.Du coup, ça s'est fait.Maintenant, en fait, on ne va pas s'embêter.
00:09:27 :On va directement faire les migrations pour être tranquille.Ça sera fait.Hop.Mince.Je migre directement.Je ne crée pas de migrationparce que je n'ai pas ajouté de modèles.
00:09:40 :Je vais utiliser le modèle built-in de Djangopour les utilisateurs.Et on va se créer un super utilisateur.Hop.Comme ça, Johanna, quand tu vas t'y mettre,tu vas être bien en paix avec Django.
00:09:59 :On va repartir de zéro comme ça.Hop.OK.Il y a mes enfants qui font des bruitages.C'est bon.Donc là, l'utilisateur est créé.Maintenant, on va pouvoir entrer dans le sujet.
00:10:17 :Les migrations sont faites.Avant ça, on va se faire un petit trucqui va être indispensable.On va se créer un template de basequ'on va appeler base.html.
00:10:30 :Et je vais vous épargner l'écriture du html.Je me suis créé des petits snipetsque je peux réutiliser à chaque fois.Voilà.Alors là, il n'y a pas plus basique.
00:10:41 :Donc là, du coup, Antoine et Marcel,pour vous, c'est bon, je pense.Mais pour Johanna, qui n'a pas l'habitude,en gros, je vais créer un template de baseque je vais pouvoir étendre.
00:10:56 :Si tu veux, à chaque fois,je n'aurai pas besoin de réécrire le menudans tous mes templates HTML.Je vais utiliser ce template de baseet à chaque fois, j'aurai juste à rajouterun bloc ici, content,ou je l'appelle body des fois,mais dans ce bloc-là,j'aurai juste à ouvrir les balises
00:11:10 :dans les autres templateset tout ce qui est autour sera automatiquement chargé.Voilà.Donc, j'aurai automatiquement le menu partout.Simplement.Donc, voilà.Donc, le template de base.
00:11:26 :Donc, oui, ce que j'allais dire.Ici, si l'utilisateur est connecté,on va forcément afficher le logoet modifier son mot de passe.Et s'il n'est pas connecté,on va lui dire soit tu t'inscris,soit tu clogues,soit tu as perdu ton mot de passe.
00:11:38 :Tout simplement.OK.Maintenant, ce qu'on va faire,c'est qu'on va aller ajouter...Ouais, on va faire ça.On va aller s'ajouter une vue basiquedont on va se mettre dans la compte.
00:11:55 :Hop.De toute façon, on a cette application-là.Hop.On va faire ça ici.On va se faire une vue d'index super sophistiquée.Pourquoi pas ?
00:12:08 :Ça me va.Ouais, on va faire ça.C'est bien.Juste pour avoir une vue d'index.Et du coup, ce que je vais faire,c'est que je vais créer un dossier template dans Account.
00:12:19 :Je vais créer un dossier Account.Quand tu avais vu le Django, Antoine,est-ce que tu faisais comme ça ?Tu faisais un dossier qui porte le nom de l'applicationdans Templates.
00:12:32 :Ouais.Ça pouvait m'arriver de faire ça, oui.OK.OK, nickel.Pour éviter les conflits.Comme ça, ici, si jamais il y a plusieurs index,au moins tu sais que tu vas se faire dans Account.
00:12:48 :C'est vrai que c'est pas mal.Voilà.Et maintenant, je vais prendre...Bon, on va pas s'embêter.On va faire ça.Tac.Hop.Ouais, on pourrait faire ça.
00:13:03 :C'est pas mal.Allez, on va garder ça.Donc, voilà.En gros, le menu,ce que je disais tout à l'heure,c'est que le menu sera automatiquement inclusparce que j'étends le dossier de baseet je rajoute ici le bloc que j'avais ouvert,Title,et je rajoute ici,donc on tente juste un titre inutile,
00:13:19 :mais c'est pas grave.Donc, on a un index de créé.Donc, normalement,si je lance pas tout de suiteparce que c'est pas encore créé,je vais me mettre ça...
00:13:30 :Je vais me mettre l'URL ici,dans le projet.Donc, je vais me faire...Vu que c'est l'index,.geo,je vais me mettre ici l'index.Et là, hop,on a l'index dans l'URL.
00:13:42 :OK.Et là, on lance toujours ce serveur.Je vais devoir rapatrier un onglet.Hop là.Cool.Excusez-moi, j'ai un client qui m'écrit.Alors, voilà.Tac, c'est bon.
00:14:03 :Donc là, j'ai un super menu.Bon, ça ne ferait pas mon niveau en HTML, CSS.Je ne suis pas un pro,mais c'est juste pour l'exemple.
00:14:12 :Tac.Maintenant.Maintenant,je vais mettre mon téléphone en silencieux,ça me saoule un peu.Hop là.Voilà.Donc, ensuite,on va vouloir,on va se créer en fait un fichier d'URLdirectement dans Accounts.
00:14:32 :Ici.Ça ne s'écrit pas.C'est génial.Hop là.Parfait.Hop.On va se le créer ici.Et dans le projet,ce qu'on peut faire,c'est ici,on va utiliser la fonction Include.
00:14:47 :OK, il me le fait pour moi.C'est sympa.Et donc, il va aller me chercher en fonction des caractères,en fait,l'application et le fichier d'URL.
00:14:55 :Donc, plus besoin d'y toucher.Je vais faire un truc,je vais le copier ici.Tac.Là, je vais dégager ce que je ne veux plus.
00:15:07 :Je vais l'enlever un peu,copier l'autre,parce que ça va me saouler.Je vais aller un peu moi-même.Tac.Donc, alors ça,on ne veut pas admin,on ne veut pas index.
00:15:16 :En fait, on ne veut rien.On veut juste ça.Et ici, je ne sais pas si tout le monde l'utilise,le petit app name ici.
00:15:25 :Tac.Il est super pratique,le petit app name.Voilà.Hop.Et on prépare la vue pour après.Donc, au pire,je vais récupérer l'app s'il faut pour aller plus vite.
00:15:38 :Du coup,OK.Là, on a déjà une vue d'index.On va maintenant,hop là,on va maintenantcommencer par créer la signup view.Je reprends,alors, Scarcel, tu t'en fais tout le temps.
00:15:53 :Je reprends Antoine,qui ne fait pas tout le temps du Django.Tu crées comment tes signups,tes vues de signup, tout ça ?Tu utilises des vues un peu maison,ou tu utilises des classes toutes faites ?
00:16:02 :Non, je crois que j'ai essayé de les faire maison,mais ça fait un moment que je n'ai pas remis la tête dedans.Ouais ?Bon,c'est la partie qui pourrait plus intéresser, là, peut-être.
00:16:11 :Yes.J'avoue, ce qu'on a fait avant,c'est un peu basique,mais je pensais qu'il y aurait beaucoup plus de niveaux ce soir,avec la nouvelle année, mais...
00:16:18 :Bon.C'est pas grave, ça, c'est un petit rappel.Du coup,on vacommencer par faire la vue de signup.Alors,je suis dans l'URL, voilà.
00:16:33 :Lui, on va le garder.Lui, on s'en fiche.Hop là.On va importer plusieurs choses.Donc là, en fait,c'est là que ça devient intéressantpour ceux qui ne sont pas hyper habitués à Django.
00:16:45 :Hop là.On peut importer, ici,ce qu'on appelledes vues génériques.On pourrait très bien aussi avoir la liste view,ladetails view, ainsi de suite.
00:16:57 :Donc vraiment, en fait,ils ont prévu des vues pour faire du CRUD,mais avec quasiment pas de code à écrire.Et ça, c'est énorme.On va aussi...
00:17:09 :Ouais, ici, on va en avoir besoin, forcément.C'est dans l'URL.C'est reverse lazy.Ouais, il est là.Ça, je vais expliquer aussi.Et puis, on va utiliser letant qu'à faire.
00:17:23 :C'est .out.forms.Alors, moi, je fais rarement comme ça,parce que je customise beaucoup le signup.Mais on peut très bien faire comme ça.Je ne le vois pas.
00:17:36 :Donc,la vue d'index, on va la laisser en bas.Donc, on va créer, du coup, une classesignup.view.J'ai bien écrit signup.view.Et on va ériter les classes de vue.
00:17:52 :Et ici, on va lui donnerun nom de template à utiliser.Donc, on va l'appeleraccounts.signup.html.On va avoir aussi l'attributqui s'appelle form class.
00:18:10 :Et lui, on va lui dire, en fait,quel formulaire utiliser pour l'inscription.Donc, on va utiliseruser class on form.On ne spécifie pas de modèle.
00:18:19 :Donc, le modèle utilisateur,on va, par exemple, le spécifier,puisqu'on utilise, en fait, un formulairequi, lui, le formulaire, c'est déjàun modèle form.Si je vais dans l'héritage,normalement, voilà, c'est un modèle form.
00:18:34 :Donc, en fait, il est déjà basé sur un modèle.Alors, là, j'ai normalement ouvert tous les...Hop là.Donc, on a juste à lui dire, en fait,utilise ce formulaire-là,qui, lui, il est déjà l'utilisateur.
00:18:44 :Donc, on ne va pas te spécifierqu'on veut un utilisateur,puisque le formulaire le sait déjà.Et maintenant, en cas de réussite,on lui dit, bah,emmène-nous vers l'index.
00:18:58 :Et j'espère que j'ai bien appelé dans les URL ici.Ouais, je l'ai appelé index.Je l'ai appelé index, OK.Donc, on spécifie le nom de l'URL,on n'a pas le chemin.
00:19:06 :Moi, je ne spécifie jamais,jamais les noms d'URL dans le dur,en fait, les chemins d'URL.J'utilise toujours les noms d'URL,comme ça, si jamais on change le chemin,en fait, ça ne casse pas, quoi.
00:19:19 :Voilà.Alors, reverse lazy,alors, je l'ai déjà posé il n'y a pas longtemps.Est-ce que vous savez pourquoi il faut l'utiliser,reverse lazy, et pas reverse tout court ?
00:19:29 :Nope.Alors, reverse, ça existe,il n'y a pas de problème,mais en fait, quand on est dans une classe,en fait, les classes,elles sont automatiquement chargées en mémoire,et leurs attributs aussi.
00:19:45 :Alors, si vous avez une classe dans un programme,je ne sais pas, la classe fou,vous faites un print dans la classe,quand vous lancez votre programme,même si vous ne l'avez pas instantié,le print, il va se faire.
00:19:54 :Donc, le problème,c'est que quand vous chargez tout votre programme,l'URL, elle ne sera pas forcément encore connue,elle ne sera pas encore chargée.Donc, on fait un reverse paresseux, justement,pour éviter ce problème.
00:20:06 :Voilà, ça charge tout de suite, en fait,ça charge, en fait, l'URL.C'est une petite technique obligatoire,sinon ça ne marchera pas.Voilà.Et donc, maintenant,on peut aller dans l'URL, lui dire,hop là,from.views,
00:20:23 :n'importe qui ne l'en veut pas,qui s'est remis,et bien, merci.Voilà.Donc, maintenant, si je vais dans le base HTML,sign up ici,elle fait le pour moi,merci.
00:20:36 :On lui spécifie, donc, le tag URL,et on lui donne le nom de l'URL.Donc, c'est accounts, le petit point,parce que, ici, j'ai mis un app name.
00:20:43 :Donc, ça, c'est accounts, le petit point, sign up.Cette technique n'est pas toujours utilisée,mais qui est vachement importante, je trouve,comme ça, c'est plus clair.
00:20:51 :Donc, maintenant, si je charge,sign up,ça ne marche pas,parce que je n'ai pas créé le template.Donc, on y retourne.Et je vais appeler comment ?
00:21:01 :Sign up HTML, hop là.sign up.htmlEst-ce que je ne me suis pas préparé ?J'ai un projet où je vais prendre un vieux HTML sans rien,hop là, avec un...
00:21:17 :Voilà, je sors des petits snipets,comme ça, que je peux, après, décorer si j'ai besoin.OK, ça me paraît pas mal, ça.Du coup, oui,parce que, comme on a l'habitude,quand on a un formulaire comme ça,avec une méthode post,il faut lui spécifier le CSRF token.
00:21:35 :Ça, Antoine, j'imagine que c'est partout pareil,sur les frameworks PHP aussi ?Yes, carrément.De toute façon, c'est la norme.En fait, il est intégré sur Symfony,il est automatiquement intégré,quand on a un formulaire,il le met automatiquement avec Twig.
00:21:52 :Là, si tu ne le mets pas avec Django,dans tous les cas,tu n'as pas de risques de boulier,c'est juste que ça ne marchera pas.
00:21:58 :Donc, tu es obligé de le mettre ensuite.Et là, on utilise un tag avec form.asp,c'est pour la mise en forme,mais bon, tu pourrais ne rien mettre,ça ne change rien,parce que dans tous les cas,ce ne sera pas très beau.
00:22:09 :Voilà.Donc, ma vue de sign up, elle est là.Donc là, on peut vérifier,lui va s'inscrire, hop.Voilà, je suis reçu à la page d'accueil.
00:22:26 :Maintenant, si je vais dans la base,voilà, donc j'ai bien utilisé TRS, c'est bon.Ok, j'ai le 118 qui est là.Ok, super.Bon, le sign up, c'était pour vous montrerqu'on peut faire un sign up assez basique,assez simple comme ça.
00:22:44 :Là où vraiment, ça va être le plus intéressant,ce que je voulais vous montrer ce soir.Ça, c'est juste moi qui l'ai fait,mais je barre mes notes en même temps,c'est ce que je voulais vous montrer.
00:22:56 :Ok, donc maintenant, en fait,on va enchaîner ce que je voulais vous montrer ce soir.Donc, on a le base qui est ici,il n'y a pas de problème,on va le garder.
00:23:05 :Ok, je vais juste me prendre des templatesque j'ai un peu touchés en HTML,histoire de ne pas le retaper.Ok, j'en ai là.Je me suis ouvert une autre fenêtre en même temps,ce sera plus simple.
00:23:17 :Voilà, ok.Ok, maintenant.Donc, il faut...Merde, j'ai fait une connerie avec...C'est passé hier.Qu'est-ce que c'est que ce bordel ?Ok.Je relâche quelque chose,j'ai un problème avec mon truc.
00:23:31 :Hop.Ok, c'est bon.Donc, ce qu'il est possible de faire avec Djangopour faciliter la vie.Hop.On va aller...Voilà, c'est ce que je voulais faire.
00:23:44 :Hop.On peut aller s'emporter ici,Views de Django.J'ai mis un alias.L'adopte le préconise d'utiliser l'aliaset je préfère ne pas utiliser les Views directs.
00:23:55 :Donc, j'utilise un alias AuthViews de Django.Et là, c'est parti.Et là, vous allez voir à quel pointon peut faire des vuessans créer de vue directement,en utilisant des vues intégrées,et que nous, on va juste aller instantier.
00:24:09 :Alors, c'est parti.Déjà.Alors, je vais basculer un peu,parce que ça va aller trop vite.Tac.Alors, donc là,on va se faire, ici, le login.
00:24:23 :Alors.Ça, c'est bon.Donc, pour le login, du coup,très simple,on va se créer l'URL.On va l'appeler, tout simplement, login.Voilà.Très original.
00:24:35 :Et on va utiliser, maintenant,hop, notre module,et on va utiliser la vue LoginView.Comme c'est une classe,il faut appeler la méthode AsView.Et là où c'est intéressant,c'est que dans la méthode AsView,en fait, on peut aller personnaliser ça.
00:24:51 :Donc, on va lui dire,on va lui dire, par exemple,je vais utiliser mon template à moi,pas un template en mode admin.On va lui dire,on va prendre le template name, ici.
00:25:04 :On va l'appeler comment ?On va l'appeleraccounts-login.html.Voilà.Et on va lui dire,ensuite,tac,c'est bon, je suis dessus.On va lui dire,la page, en fait,une fois que t'es connecté,tu vas aller surreverse lazy,on est apporté d'où, déjà ?
00:25:26 :C'est de frontdjango.org, je crois.frontdjango.org.J'ai ça en porte.Voilà.Hop, on va appeler reverse lazy.On va lui dire,une fois qu'on est connecté,on va aller sur l'index.
00:25:43 :Tout simplement.Donc, en fait,là, ce qu'on peut faire,c'est que,on va lui donner un petit nom, aussi.On va lui dire,name,égal,on va l'appeler login.
00:25:55 :Voilà.Si je reviens ici,hop, je vais copier ça.C'est le login que j'ai fait.Et là, on va lui dire,account login.Tac, tac.
00:26:13 :Donc maintenant,qu'est-ce qu'il n'y a pas encore ?C'est pas ça.Qu'est-ce que j'ai fait dans mon petit fil URL ?J'ai dû faire une erreur.
00:26:29 :Ah, forcément.Forcément, ça reste...Ah oui, non, oui.Faut que je sorte de ma...Voilà, name égale login.Voilà.Merci.Login.OK.On va lancer le serveur.
00:26:50 :Normalement, c'est bon.Voilà.Il faut le template.J'avais oublié.Ici, il va y avoir un template.Login.html.J'ai un template tout fait, tout basique.Tac.
00:27:09 :On va faire ça.Et voilà.Hop.Donc comme l'autre tout à l'heure,le token, ainsi de suite.Si je reviens là,je vais recharger un peupour qu'ils me le prennent en compte.
00:27:17 :Voilà.Donc là, on a bien un login.On peut se connecter.Donc maintenant, si je me connecte...Non, c'est pas avec lui que je vais me connecter.
00:27:23 :Avec lui.Hop, le menu, il a changé.Donc j'ai logout et monifié en mot de passe.La petite blague avec Django.Surtout depuis la version 5.
00:27:39 :Je sais que je me suis fait avoir au débutet je ne suis pas le seul.On va faire le logoutet vous allez voir le petit truc à ne pas louper.
00:27:47 :Donc là, c'est reparti.On va recommencer.On va utiliser notre ami Copilot.Il ira plus vite.Hop là.Logout.OK.Alors, qu'est-ce qui me fait faire lui ?
00:28:05 :Il m'inquiète un peuparce que pour moi, le logout...C'est next page et le reverse busy.OK.Il y a un truc qui me paraît bizarre.
00:28:14 :OK, c'est normal.Hop.OK, c'est bon.Donc, en fait, il faut savoir,avec la vue logout en Django,si je vais dedans.Elle est où ? Là.
00:28:28 :Quand on regarde ici,avant, on pouvait faire un logout en méthode get.Maintenant, en fait,il force la méthode post.Donc,quand tout le monde avait ses projets encoreavec l'ancienne version de Django,qui a migré,ça posait un peu de problème.
00:28:44 :Donc, en fait, dans le base HTML,ce qu'il faut faire,il faut penser à entourer son logout.Il est où ?Ici, voilà.Tac.Il faut penser à faire un form.
00:28:56 :OK.Logout.Méthode post.Méthode post, c'est bon.Action.Je suis d'accord.Le token.Ouais, on peut le laisser en bouton comme ça.Hop, c'est pas mal.
00:29:11 :Voilà.Et redaction de logout.C'est ça.Tac.Et ici, je l'ai bien mis.Donc, normalement,si je fais ça,j'ai bien mon logout.C'est parce que si, en fait,la petite blague, du coup,et je ne suis pas le seul à l'avoir eu à l'époque,mais j'étais allé fouiller dans le code source.
00:29:30 :Si je repars dans le template ici,que vous, bon,du coup, on ne mettrait rien.On ne mettrait rien du tout.Et si je charge ici,normalement, ça ne passe plus, je crois.
00:29:40 :Voilà.On a une 405.Du coup, méthode non autorisée.Donc ça, toujours penser.Le logout,toujours penser à se le mettre en méthode post maintenant.
00:29:50 :C'est comme ça.Donc, voilà.Ensuite,on va finir surles masses.Ça s'appelleles changements de mot de passeet la réintégration de mot de passe.
00:30:07 :On va chercher ça.Donc,ensuite, vous avez ce qui s'appelle, du coup,le...Merci, il me l'a trouvé.Alors,qu'est-ce qu'il me fait, du coup, ici ?
00:30:19 :Je vais le laisser écrireet je vais regarder si c'est bon,s'il n'y a pas de problème.OK, alors.Ouais, par contre, c'est le bazar.
00:30:28 :Donc là, il nous fait un password change, OK.Il nous met un template password change,pas de problème.La success URL,ouais, pourquoi pas.Ça, c'est bon.
00:30:42 :Il nous met un password done.OK, c'est bon.Et ici,OK, c'est bon.Donc là, en fait,vous avez juste ces vues-là.On va juste aller se créer des templates.
00:30:53 :Donc, password change et password change done.Hop,new file,password,change,point,htmletpassword,password,j'ai oublié le nom,jump,done,point,html.Voilà.
00:31:14 :Et comme tout à l'heure,je vais me reprendre des templates tout faits.Hop,donc password change,il est ici.Et mon done,il est,le done, on le réutilisera plusieurs fois.
00:31:27 :Hop là,voilà,tac,tac,hop,et dans le base,on va se mettre ici,si je suis connecté,je suis où,je me suis perdu,tac,voilà,on dit faux mot de passe.
00:31:43 :Super.C'est ce que je voulais.Hop,et hop là.OK.Une fois la gaute,maintenant mot de passe perdu,c'est pas ça que je voulais faire,c'est le changement de mot de passe.
00:32:03 :Tac,modifier le mot de passe,j'arrive bien ici,sur la vue pour changer le mot de passe,donc maintenant si je mets ça,hop,tac,OK, c'est bon.
00:32:19 :Donc là on voit,c'est changé le QXA,j'ai mon besoin de petits messages.Nickel.Alors,ce qui est intéressant du coup,c'est que maintenant,avec Django,vous pouvez aussi gérer le casoù vous avez perdu votre mot de passesous le reset.
00:32:33 :Sachant que le système qui tourne derrière,c'est un système de token,moi je m'en suis déjà fait des maisons,en fait,en réutilisant quand même des classes de Django,pour activer des comptes par email.
00:32:43 :Donc en fait,on peut tout faire avec ça.Mais là en fait,c'est comme tout à l'heure,ça va être des vues qui sont déjà toutes faites.
00:32:49 :Donc,si je retourne dans mon fichier d'URL,je suis dedans déjà,OK.Alors,quand on fait le reset,il ne faut pas s'y perdre.On va le faire en deux parties.
00:33:02 :Alors,il me fait le template name,OK.OK,je suis d'accord,OK.Alors,déjà,pour commencer,il vous dit le template,OK,je vais demander mon mot de passe,il n'y a pas de problème.
00:33:20 :Ensuite,il faut bien un email,un template pour l'email,puisqu'en fait,vous allez envoyer un emailet aussi,du coup,lui donner,comme toutes les autres,en fait,une vue où être dirigée après.
00:33:32 :Donc,c'est elle qui nous dit de faire ici.Une fois que c'est fait,OK,reset done,pas de problème.Donc,c'est parti.Maintenant,on peut aller écrire,du coup,nos templates.
00:33:44 :Donc,on a dit qu'il y avaitpasswordreset.html.On veut aussi,je suis où ?Je me suis perdu.Voilà,passwordreset.html.On veut aussile passwordresetemail.html
00:33:54 :et on va voir comment,ce qu'on peut faire.Donc,on va fairepasswordresetemail.htmlet on va fairepasswordresetemail.htmlet on va fairepasswordresetemail.htmlet on va fairecomment on peut le faire facilement.
00:34:05 :Passwordresetemail.htmlEt ensuite,nous,euh ...example email...Et passwordresetemail.html,hop !Et là,c'est pareil,je vais reprendredes templatesprolongéeset je vaisprendreun jeuqui peut êtreplus simplepuisqueje vaisgénéralementles mettredansmesvidéos.
00:34:30 :Donc,on vadansdes templatestout fait.Donc,on va commencerpar le début.Le passwordreset,j'en ai ici,passwordreset,il est là.Hop !
00:34:43 :Donc,c'est basique,c'est un formulaire,un formulairejuste pour demanderun mot de passe.Donc là,rien de fou.Passwordreset,c'est ok.Maintenant,c'est pour l'email.
00:34:55 :Alors,pour l'email,je vais vous montrerce que j'ai.Voilà.Alors,je vous assure,en fait,je suis allé dansle code source de Djangopour voir, lui,par défaut,ce qu'il utilisecomme template d'email.
00:35:09 :Donc là,j'ai juste bêtementcopié-collé.Vous pouvez aller voirdans le code source.Si vous voulez,je vous retrouverai le lien.Mais si vous fouillezdans le code source de Django,vous trouvez en faitle template qui est utilisépour envoyer les emails.
00:35:21 :Donc,je l'ai collé.Voilà.Donc,on voit qu'il y adéjà les variables.Il est en anglais,mais il y a ce qu'il fautpour le traduire.
00:35:30 :Ils ont déjà tout mis,mais il y a un petit faux.Le site name.Et en fait,vous, maintenant,vous avez juste...Donc,soit vous le mettez en français,vous enlevez tout ce qui est autour,vous gardez que vos variables,en fait,vos URL, quoi.
00:35:42 :Vous gardez l'URL,les variables,et ainsi de suite.Et vous changez,en fait,le template.Mais au moins,vous avez une bonne basecomme ça pour être sûrde ne pas se tromper.
00:35:52 :Donc ça,c'est dans le code source.Vous le trouvez facilement.Au pire,j'ai fait un repo,je vous le donnerai.Voilà.Et le Reset Done,votre...
00:36:02 :Ouais,que le mot de passe a été envoyé.Voilà,que le mot de passe a été envoyé.Voilà,avec l'instruction.Nickel.Ensuite,donc là,je vais peut-être déjouer un petit peu.
00:36:19 :Vous voyez encore là ou pas ?Ou c'est moyen ?Ouais.Voilà,c'est un peu pour...Faudrait que je passe un coup de ref là-dessuspour bien mettre ça en forme.
00:36:26 :Mais en gros,ici,c'est Reset,Reset Done.Et pour finir,il manque de vueparce qu'en fait,il faut...Comment dire ?Que la personne a recevoir un token,mais il faut ensuiteque le token soit utilisépour pouvoir confirmerle nouveau mot de passe.
00:36:42 :Donc,hop,on va faire çaet je vais resumer après.Donc là,il va nous falloir...Il a bien devinéparce qu'il me faut bienl'info,le token.
00:36:55 :C'est ça,Reset Confirm View.Et bien,parfait.Parfait.Parfait.Parfait.OK.OK.Donc là,je vais peut-être séparer les choses.Il est où ?Il est peut-être là.
00:37:11 :J'en ai jeté ici.Donc maintenant,la deuxième partie.Ici,il vous faut donc l'URLavec les informationsde l'useur,en fait,son PKqui est encodéet un token.
00:37:22 :Et le token,en fait,avec Zango,vous avez une settingqui est par défaut,qui va vous direque le token,en fait,s'il est valable,je ne sais pas,pendant trois jours.
00:37:33 :Je crois que par défaut,c'est trois jours.Après,vous voudrez bien le direcinq minutes,comme vous voulez.Donc,on va envoyer le tokenet ici,on va,comme d'hab,prendre un templateet on va lui direoù il va après.
00:37:47 :Donc,le template,c'est PasswordResetConfirm.Hop.On va créerPasswordet on va voirle résultat final.Presque fini.Un petit template.Voilà.Et ensuite,ça fait comme ça.
00:38:03 :Ça fait un formulaireoù la personne va mettreson nouveau mot de passe.Et ensuite,alors,le PasswordResetComplete,en fait,on ne va pas s'embêter.
00:38:12 :On va prendrele PasswordChangeDone,ici.Hop.Donc,ça,ça va dire,en gros,voilà,donc,normalement,si je ne me suis pas trompé,si on retourne sur,donc,le name,c'est PasswordReset.
00:38:32 :Donc,si on va ici,mot de passe perdu.Nickel.Hop.Voilà.Donc,maintenant,mot de passe perdu.Si je suis ici,alors,on va agrandir un peu la console.
00:38:49 :Si je suis ici,que je mets monemail.Si je ne l'ai pas ouvré,ça fonctionne.Voilà.Donc,là,c'est donc,un email a été envoyé,ainsi de suite.
00:39:00 :Et si je vais ici,donc,là,on voit que j'ai reçu mon emaildans la console,puisque je l'ai spécifié dans mon backendtout à l'heure.
00:39:07 :Je voulais recevoir mes emailsdans la console.Donc,là,vous voyez,on a bien l'email,ainsi de suite,machin.Hop.Avec le message qui est traduitde mon template email.
00:39:18 :Et si je prends,du coup,ici,regarde bien,on a bien l'IDBqui est valide.Il ne s'est pas mis.Je vais rapatrier un onglet.
00:39:29 :Hop là.Voilà.Et j'arrive là-dessus,donc,avec mon token.Donc,maintenant,si je mets mon numéro de passe,tac.Hop.Donc,mon passe a été modifiée.
00:39:46 :Donc,en gros,en gros,c'est pratique,parce qu'ici,j'ai juste mis mes URLs.Et en fait,dans mes URLs,ici,si vous voulez,dans vue,du coup,j'ai qu'une vue,c'est pour le sign-up et un index,parce que vous voulez un index,mais sinon,à la limite,voilà.
00:40:04 :J'ai mon sign-up.C'est tout.Et après,toutes mes vues,en fait,je gère tout dans les URLs.En fait,vous pouvez vous faire carrément,comment dire,un copier-coller sur chaque projet,parce qu'en fait,à chaque fois,ça va beaucoup se ressembler.
00:40:17 :Vous faites une petite partie login,logout,password change,password reset,comment dire,du URL.Et comme ça,en fait,vos vues,vos fichiers restent simples.
00:40:28 :Vous n'avez vraiment que les vuesaprès, entre guillemets,métier,on va dire.Genre après votre profilou ce genre de choses-là.Mais tout ce qui est autre,c'est gérer directementavec les classes de Django.
00:40:37 :On a juste instantiéavec des paramètreset en mettant les fichiers HTMLqu'on voulait.Donc,voilà.Johanna,je n'ai pas vu ton message,Johanna.Il y a un password reset doneque tu as oublié,dans le reverse lazy.
00:40:51 :Alors attends,dis-moi.Dis-moi,dis-moi.Dans le reverse lazy,je suis où ?Tu vois la ligne à peu près ?Une 28.Alors,tu me dis que j'ai oublié quoi du coup ?
00:41:12 :Non,en fait,je renvoie vers un password reset complete.C'est la vue qui dit,pourquoi j'ai mis ça ?Ah oui,j'ai utilisé en fait ça.
00:41:28 :C'est ça.J'ai utilisé en fait le même templatepour change done ici.Voilà,pour le change done ici.Et pour le reset complete,j'utilise le même template qu'il met.
00:41:40 :Comme ça,vu que c'est le même messageque je veux afficher au final,je peux réutiliser le template.Voilà.Et sinon,j'ai bien mon messageici,un reverse lazy qui renvoie là.
00:41:51 :Du coup,je ne sais pas si Antoine et Arcel,vous m'étiez là,donc vous n'avez jamais fait çapour les vues.Bien sûr,pas encore.
00:42:04 :D'ailleurs,je me disais,comment faire ça ?Voilà.Après,là,j'avoue,c'est mal organisé entre guillemetsau niveau d'inventation.J'ai fait ça un peu à l'arrache là,mais tu envoies un petit coupde rough là-dessusou tu le fais bien dès le départ,on va dire.
00:42:20 :Tu organises tout bien dès le départ,ainsi de suite,tac,c'est bon.Mais comme je te dis,après,moi perso,ça,après,je me rends bien le faitde le copier-collerpuisque je l'ai fait une foiset puis je modifie ce que je veux.
00:42:33 :Donc,voilà.J'espère que ça vous a été utilequand mêmede voir çaet que ça vous servira.Ouais,mais en fait,c'était très vite.
00:42:48 :Bah,nickel.Nickel.Bah,toi,du coup,Johanna,ouais,si tu te mets à Django,tu verras que du coup,tu pourras utiliser çasans que ça ait été vu,quoi.
00:43:01 :Là,voilà.C'est hyper pratique,en fait,il y a tout dedans,de base,Django,par rapport à d'autres frameworks,d'autres langages.Quand on fait du Next.js,
00:43:11 :il faut importermille dépendancespour arriver au même résultat.Là,c'est vraiment cool.C'est un super truc.Ah,bah,je suis content que c'était...Parce que ça,tu l'avais jamais vu,du coup,avec Django,ça.
00:43:25 :Non,j'avais vu qu'il y avaitce genre de classe,mais je n'ai pas exploréà ce point-làet du coup,je regrette un peu,mais je vais le fairedès cette semaine,je vais m'y mettre.
00:43:35 :Et bah,ça me fait plaisir d'entendre,du coup.Franchement,ça me fait vraiment plaisir.J'ai fait un mentorat aussisur les buts génériquespour terminer.
00:43:43 :Même pas deux minutes.Je vous emmène juste deux minutes.Je l'avais déjà montré.Arcel l'avait déjà vu,peut-être Johanna aussi.Sur mon projet,alors,il ne faut pas faire attentionparce que la structure,elle peut être un petit peu bizarre.
00:43:53 :J'ai des...Comment dire ?J'ai des classes un petit peu...Voilà,c'est des classes qui arriventde GenericPage,en fait.C'est du...Comment dire ?
00:44:02 :C'est du Wagtail,voilà.Mais qui est basé sur Django.Donc,j'ai une partiequi est pure Djangoqui est Customerspour gérer les classes.Donc,j'ai une partiequi est Customerspour gérer les clients.
00:44:14 :Mes vues,elles sont là.Et en fait,pareil,ce que j'ai fait,c'est quej'ai utilisé,en fait,des...En fait,c'est vraiment bien carré,tu vois.
00:44:26 :Tu descends,toutes mes vues,en fait,elles sont toutes la même forme.Et en fait,j'utilise des vues génériquesque j'ai importées ici.Tac.Et ce que je fais,moi,c'est que j'ai une nouvelle classeque je décore,en fait,pour dire,je dis que je décorela méthode dispatch.
00:44:42 :La méthode dispatch,justement,va servir à dispatcher,en fait,en dire,ben non,toi,tu ne passes passi tu n'es pas membredu staff.
00:44:52 :Je dis,quel modèle,projet,le template,la pagination qui est géréeet l'ordre,ici.Et voilà.Et ça me fait tout,tout seul.Et dans le template,j'ai juste à utiliserun contexte.
00:45:05 :Et voilà,quoi.Et pareil,pour la création,c'est quoi ?Ben,je n'ai même pas donnéle formulaire,c'est lui qui m'a crééle formulaire tout seulen fonction,avec ma create viewet le modèle,il sait quel formulaireil doit créeren fonction des champsdu modèle.
00:45:22 :Et je lui dis,ben,prends tous les champs.Voilà.Alors,j'aurais pu dire,ben,prends que tel champ.Et succès URL,ben,comme on a vu tout à l'heure,le template name.
00:45:34 :Et vu que j'ai besoinde lui mettre du contexteen plus,ben,c'est ça.Donc,c'est ça,l'avantage de Symfony.Mais après,tu te retrouvesavec le même genrede code.
00:45:46 :Traduit en PHP,bien sûr.Oui,bien sûr,oui.OK.Voilà,même quand ton formulaire,quand il est validé,tu vois,tu peux le surcharger.C'est un truc de fou,c'est trop bien.
00:45:59 :Moi,j'aime beaucoup.Il y a plein de gensqui n'aiment pas utiliser.Parce qu'ils disentque ça fait tropd'héritage.Mais voilà,c'est pas trop.
00:46:08 :Il y a plein de gensqui croientque c'est pas flexible.Alors qu'en fait,c'est hyper flexible.Tu as toutes les méthodesque tu peux surcharger.
Aucune occurrence trouvée pour « ».