Session du 22 octobre 2025 à 21h00
Bases du Langage
TOSA & Certifications
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 les décorateurs
Les décorateurs
00:00:00 :Voilà, c'est parti. Donc, bonsoir à tous. Donc, ce soir, un petit mentorat. On va parlerd'un petit sujet sur une fonctionnalité Python que vous avez peut-être déjà utilisésans en comprendre réellement le fonctionnement ou l'intérêt. Donc, c'est les décorateurs.
00:00:23 :Alors, je vais vous partager mon écran. Est-ce que déjà parmi vous, certains ont déjà vu ou pas lesdécorateurs ? Moi, je débute en tout, donc je découvre tout. D'accord. En décorateur, j'ai
00:00:48 :vu. Je fais du Django et on en utilise pas mal. Voilà, c'est ce que j'allais dire. Généralement,quand on touche un petit peu de Django, on voit souvent pas mal de décorateurs. Voilà,
00:01:03 :ça va être un petit peu plus gros. Est-ce que comme ça, ça vous va au niveau de la taille del'écriture ? Oui, pour moi, oui. Alors, comment ça se présente ? Généralement, les décorateurs,
00:01:26 :ça s'utilise généralement sur une fonction. Et vous avez souvent vu en Django ou dans certainsscripts, on rajoute ceci au-dessus de la fonction et la fonction se comporte d'unecertaine manière attendue. Par exemple, dans Django, c'est régulièrement utilisé. C'est pour
00:02:05 :vérifier si l'utilisateur est connecté et du coup, si c'est pas un utilisateur anonyme qui se connecteà la page web ou s'il a les droits suffisants pour accéder à cette page, etc. Ce soir, on va
00:02:20 :essayer de voir un petit peu ce qui se passe derrière le rideau de ces décorateurs pourvous en comprenez un petit peu plus le sens et vous verrez à la fin, vous allez même créer vospropres décorateurs. Donc, on va commencer par un petit cas tout bête. On va prendre une fonction.
00:02:45 :On va faire très simple. Show number. On va y mettre un argument number et print number.Voilà, on va rester dans le très basique. Le principal, ce n'est pas vraiment la fonction en
00:03:23 :soi, si vous comprenez bien l'idée du décorateur. Donc là, si je fais ma fonction directe,on va mettre 4 comme valeur. Ok, pas de grande surprise, on va s'alerter. Là, je vais faire
00:03:53 :un petit coup de calcaire. Je vais couper le partage, relancer et voir si ça joue sur letruc. Il y a peut-être des choses qui tournent au fond qui n'aiment pas. Voilà, ça y est,
00:04:44 :ça repartage. Désolé pour le petit incident technique. C'est bon, vous voyez le dvs code ànouveau ? Oui. Donc, je reprends. Donc là, si je lance mon script, sans grande surprise,
00:05:13 :ça me fait 4, le chiffre que j'ai passé. Maintenant, imaginez que vous devez fairequelque chose avec ce chiffre. Je pourrais tout simplement le mettre dans ma fonction.
00:05:26 :Je lance ma fonction, et clac, mon chiffre a plus de 1. Donc ça, c'est une première méthode.Par exemple, je pourrais aussi utiliser une fonction à l'intérieur de ma fonction. Donc,
00:05:56 :je pourrais faire best add one, par exemple. On va prendre le paramètre number là. Voilà.Je mets que ici, mon résultat est égal à add one plus number. Je lance ça. On a toujours
00:06:41 :bien notre nombre qui s'ajoute à ça. Maintenant, admettons que cette fonction add one, il faudraitavoir la possibilité de l'appliquer sur d'autres fonctions. C'est là que va intervenir le
00:06:58 :décorateur. Je vais vous passer toutes les possibilités possibles. Par exemple, je pourraisrefaire une fonction à part, une fonction à l'intérieur. On pourrait faire plein de choses.
00:07:18 :Maintenant, pour faire un décorateur, on va devoir faire ceci. Je vais virer ma fonction. Je vaislaisser ma fonction number. Et là, on va importer nos funtools. Si vous avez déjà eu l'optimisation
00:07:58 :d'utiliser ce module. La méthode RAPS. Comment on va utiliser notre RAPS ? On va redéfinir notreadd one. On va le mettre en décorateur. La première chose que l'on va passer en paramètre,
00:08:16 :c'est un paramètre qu'on va appeler func. Ensuite, je vais définir un wrapper. Le terme,il est comme ça. C'est un wrapper. C'est comme avec tout l'ampliton. On pourrait l'appeler
00:08:45 :éventuellement autrement. On essaie généralement de garder les termes les plus génériques quisont remis pour pouvoir se retrouver après quand vous ferez du code. Si vous créez vos
00:09:04 :propres décorateurs, à ce moment-là, vous allez utiliser toujours la même chose. Vous saurez toutde suite que vous avez des wrappers et vous êtes dans le cadre d'un décorateur. Ce qu'on va faire,
00:09:18 :si vous voyez bien la différence, on va d'abord inscrire ceci avant d'appeler la fonction. Et là,on va tout simplement utiliser notre fonction. Normalement, elle va nous écrire notre cadre.
00:09:44 :Ensuite, on va le mettre ici, après avoir appelé la fonction. Et là, on va tout simplement retournernotre wrapper. Donc là, ce qu'on vient de faire ici, c'est tout simplement, on a créé un nouveau
00:10:01 :décorateur. Et comme le suggère très simplement notre famille Copilot, on rajoute notre décorateurcomme ceci. Donc le fait qu'on ait mis un at ici, indique à Python que ce qui suit est un décorateur,
00:10:18 :que ceci est un décorateur, et qu'il doit appeler cette fonction-là. Donc la fonction qu'on a crééeici, basiquement, on appelle ça un décorateur, mais basiquement, ça ne reste qu'une fonction,écrite de manière un peu particulière, mais ça reste une fonction. Et que le paramètre qu'il
00:10:37 :va prendre pour cette fonction, donc le 5, c'est la fonction qui suit le décorateur.Ok ? On va lancer ça pour voir les résultats et on va décortiquer ça après un petit peu plus en
00:10:49 :détail. Alors, qu'est-ce qu'il y a ? C'est de ma faute, voilà. Si je ne fais pas les choses commeil faut, voilà. Donc ici, on voit bien, avant d'appeler la fonction, ce qu'on a mis dans le
00:11:22 :décorateur, ça c'est l'exécute, on exécute notre fonction de base, donc showNumber qui est ici,où elle utilise la valeur number, telle qu'on l'a passée à l'initiale, et elle écrit le plussimple. Et après avoir exécuté la fonction, elle a retourné le drapeur, sauf que notre drapeur,
00:11:43 :du coup, là dans ce cas, il n'a pas été exploité. Ok ? Donc, ce qu'on aurait pu faire,on va faire comme ça,et normalement, je suis un peu fatigué ce soir, désolé.
00:12:29 :On va peut-être virer ça, même si c'est ça qui le mélange un petit peu. Voilà,comme ça. Ok, on va relancer ça, ça devrait être bon ce coup-ci, voilà. Là, vous voyez,
00:13:20 :effectivement, c'est bon, à mon avis, j'avais un peu mélangé l'histoire avec les points.Effectivement, là, on a bien notre point qui, ce coup-ci, a une valeur de 5. D'accord ? Donc,
00:13:30 :qu'est-ce qui se passe ? Ici, je lance ma fonction, mon nombre est égal à 4. Pythonva jusqu'ici, il repère la fonction, et là, il voit le décorateur. Donc, qu'est-ce qu'il fait ? Il
00:13:49 :va lancer cette fonction-là, qui est un décorateur. Il prend en argument la fonction. Comme cettefonction contenait un paramètre, ici number, il est capable automatiquement de la récupérer. Pour
00:14:06 :la passer au wrapper, donc cette fonction qu'on appelle wrapper par convention, il va ensuite,qu'est-ce qu'il va faire ? Il va retourner le résultat de la fonction, donc sur number,
00:14:17 :avec le paramètre number, on y a ajouté plus 1. Ok ? Une fois qu'il a retourné ça,donc ça retourne dans le wrapper, et là, on retourne le wrapper. Ce qui fait que la
00:14:32 :fonction ici s'exécute enfin, en ayant pris en compte les modifications réalisées par ledécorateur. Est-ce que ça vous semble à peu près clair pour tout le monde ? Oui.
00:14:52 :N'hésitez pas, s'il y a des choses qui vous semblent un peu abstraites ou obscures.En fait, le décorateur, ça applique à la fonction elle-même, les instructions qu'ona mises dans le décorateur. Voilà. C'est une fonction qui prend en paramètre une fonction.
00:15:16 :Alors, on va aller un petit peu plus loin. On va oublier nos chiffres. Hop ! Et on vapasser au caractère. D'accord ? Alors, on va créer un nouveau décorateur. On va appeler
00:15:42 :interstice, par exemple. Je te le propose. Tout seul, c'est très bien. Et, à ce moment-là,on va créer une nouvelle fonction. On va modifier. Je vais placer mon S. Et je vais
00:16:23 :l'afficher. Donc, ici, si je fais un modifier, que je passe en paramètre à Hello World.Ok. Je vais supprimer ça parce que ça ne passe pas. J'affiche. J'ai bien mon Hello World qui
00:16:50 :s'applique, qui reste tout en minuscule. D'accord ? Maintenant, sur mon modifier,je vais lui passer mon décorateur. Ok. Et si je lance. Alors, qu'est-ce qui se passe ? Voilà.
00:17:15 :Et là, qu'est-ce qui se passe ? Mon Hello World est passé en caractère majuscule. Donc,après, là, on a une fonction et un décorateur. Mais, en fonction de comment je voudrais utiliser
00:17:37 :mon site, je pourrais créer plusieurs décorateurs en fonction des décorateurs. Donc, par exemple,si on a une petite phrase, on va se faire un deuxième décorateur. On va appeler le site
00:17:53 :décorateur. Voilà. Ok. Donc, maintenant, j'ai deux décorateurs. J'ai un décorateuret un décorateur pour augmenter, enfin, passer les lettres en capitales. On va vérifier déjà si
00:18:09 :notre deuxième décorateur fonctionne. Ok. Je lance. Ok. Il m'a bien créé une liste avec lesdeux mots de ma phrase. D'accord ? Maintenant, est-ce qu'on ne pourrait pas essayer de passer
00:18:36 :non seulement la séparation des mots, mais de passer également le tout en majuscule en utilisantnos deux décorateurs ? Et là, ça marche. Il a bien passé les deux décorateurs. C'est-à-dire que
00:18:54 :sur une seule fonction ici, on en a en fait exécuté trois au total. On peut cumuler autantde décorateurs qu'on veut en fait. Pardon ? On peut cumuler autant de décorateurs qu'on veut
00:19:10 :sur une seule fonction. Voilà. Voilà. Alors, maintenant, on va vérifier ça. On va revenirsur le chiffre parce que c'est l'attitude plus parlante. Laissez-moi un petit instant pour
00:19:27 :réfléchir. Le système de faire ça, ça permet de, en Django par exemple, ça permet de vérifier siça correspond à une donnée qu'on a dans une base de données. Peu importe, la personne elle l'a
00:19:45 :rentrée en fait. Voilà. Je vous montrerai un petit truc que j'ai fait tout à l'heure justement.On va passer là-dessus. Voilà. Alors, ce coup-ci, on va faire un int to strDécorateur.
00:20:07 :Voilà. On va faire comme ça. Et on va faire un def. On va reprendre notre plus Décorateur.Donc maintenant, on va modifier notre fonction. Donc, je vous remontre parce que là du coup,
00:20:43 :avec la taille que je suis obligé de mettre, vous voyez correctement, je ne peux pas vousmontrer tout le, on ne va pas voir tout le texte en même temps. On a créé ici un Décorateur
00:20:52 :qui permet de transformer un entier en une chaîne de caractères. Ici, un Décorateur qui nous permetd'ajouter 10 à un Décorateur. Ici, on a toujours notre split. Et pour le fun, je vais remettre
00:21:15 :notre uppercase. Comme ça, on va pouvoir. Alors, ce qu'on va faire, c'est qu'on va prendre notreDécorateur. On va l'appliquer. TestFunction. Alors, on va d'abord rester sur notre reward.
00:21:44 :Je vais mettre mon Uppercase Décorateur. Et mon split. Pour s'assurer que ça fonctionne toujours.Ok, pas de soucis. Qu'est-ce qui s'est passé? Est-ce que vous observez le comportement qui s'est
00:22:12 :passé? C'est l'ordre des Décorateurs. Parce qu'il applique d'abord la mise en majuscule et le split,il doit remettre en minuscule et split en longtemps. Alors, le truc, c'est qu'il a d'abord appliqué
00:22:36 :effectivement le split Décorateur. Et ensuite, il a voulu appliquer l'Uppercase. Ça ne marche pas.Après, comme l'Uppercase, il est défini avec une condition pour éviter de lever des erreurs dansle cas de l'exécution de l'application. Là, du coup, quand l'Uppercase Décorateur s'est appliqué,
00:23:07 :comme il avait une liste, comme le résultat n'était pas une chaîne de caractère, il a simplementretourné le résultat. Donc, l'ordre de nos Décorateurs a une importance. Pour faire ça,
00:23:25 :on va faire un... Hop, on va laisser celui-là, c'est en premier, l'Uppercase. Au-dessus,on va mettre notre Yield et au-dessus, on va mettre notre Plus Décorateur. OK. Donc là,
00:23:47 :normalement, on ne va pas avoir de soucis. Parce que si on suit bien dans l'ordre,on va d'abord passer le texte qu'on va mettre en logiscule. On va ensuite transformer un out
00:23:59 :en chaîne de caractère et on va faire un plus 10. D'accord ? Voyons voir ce qui se passe. On vaentrer la valeur 5. OK. On l'enregistre, on l'avance. Ah, il ne se passe rien. Supprimons
00:24:21 :notre heure pour voir si c'est lui qui pose problème. Il ne se passe toujours rien. Supprimonsnotre Yield to String. Et là, l'admission se fait. Donc, on reprend. Là, dans l'ordre qu'on
00:24:47 :a fait, ça ne peut pas marcher parce qu'on a d'abord transformé le caractère en logiscule. Maisétant donné que le chiffre 5 n'est pas une chaîne de caractère, l'Uppercase ne s'est pas réellementappliqué et il a passé à la suite. Et là ensuite, avec notre Yield to String converti, notre 5 en
00:25:10 :chaîne de caractère 5. Et quand il arrive au plus décorateur, qu'est-ce qu'il avait en paramètre ?Il avait une chaîne de caractère. Et comme notre plus décorateur, je vais vous le remettre,
00:25:22 :il prévoit qu'il doit avoir soit une ligne, soit un float. Du coup, il n'a rien fait. Donc ça,c'est l'avantage et l'intérêt des décorateurs, c'est que vous pouvez les utiliser, vous pouvezen prendre plusieurs. Mais l'ordre dans lequel vous allez les mettre va avoir une importance,
00:25:44 :comme vous le voyez ici avec le divers des exemples. Mais en plus, s'il y a une erreur,si le décorateur a été bien défini, c'est là où il faut être prudent quand on fait sesdécorateurs, ça n'aura pas d'incidence, il va passer au décorateur suivant et ainsi de suite.
00:25:59 :Donc quand vous définissez un décorateur, il peut être encore plus précis que lorsque vousdécidez vraiment une fonction. Ça, vous le connaissiez ? Oui. Donc ça, il ne faut pas
00:26:23 :l'utiliser dans les décorateurs, ça évite de générer des erreurs à cause du décorateur.Ok. Mais là, pour l'ordre du décorateur, c'est d'abord celui qui est le plus bas et puis ça
00:26:43 :remonte. Voilà. Il part toujours de celui qui est le plus près de la fonction et il remonte versl'autre. Là, par exemple, si je fais ça, on va le remettre ici. Là, ce coup-ci, on va avoir
00:27:00 :ce coup-ci. Voilà. Alors, on va rajouter notre... Ah oui, d'accord. Je rajoute monintoString. Ah oui. Qu'est-ce qu'il se passe ici ? Le intoString transforme le S en nombre,
00:28:15 :du coup il reprend cette variable-là. Il ne reprend pas le S plus 5, le S plus i. Voilà.Exactement. Donc ça, c'est l'autre petit point auquel il faut faire attention. C'est que votre
00:28:35 :résultat ne renvoie pas la fonction. D'accord ? Ici, ça reste le S. Donc soit il va être enplus 10, soit il va se transformer en chaîne de caractère. Et si c'est une chaîne de caractère,
00:28:53 :il va se mettre en majuscule. Ok ? Donc il va bien s'exécuter du bas vers le haut. Mais lavaleur n'est pas modifiée. Ou alors il faudrait, par exemple, que l'on définisse plus précisément
00:29:18 :notre variable ici. Si je mettais ça par exemple. Voilà. On va tenter comme ça, voirce que ça donne en définissant en dur dans le décorateur la variable. On va abonner ce que
00:30:05 :ce soit. Pas mal de modifications. Donc là, on va faire le split. On verra le résultatcomme ça. J'ai hâte d'avoir ça. J'espère que ça soit visible pour vous. Excusez-moi,
00:30:31 :je n'arrive pas à faire ça de manière visible pour vous. Là, on est revenu. Donc là, on varecommencer avec notre split. Donc si on suit la logique, on devrait avoir une liste en sortie.
00:31:02 :D'accord ? Une liste avec la valeur K. Ok ? Je lance ça. Il n'est que 15. Parce qu'ici,on me retrouve avec un chiffre. D'accord ? Et le chiffre, on est ici dans le plus. Voilà. Il
00:31:40 :me renvoie un int. Et lorsque le split arrive sur l'int, lui il cherche une chaîne de caractères.Ok ? Donc, si je voulais faire ça, il faudrait que je rajoute ici mon décorateur,
00:31:52 :int to string décorateur. Il va falloir que je tombe dessus, sinon je ne pourrais pas vousmontrer ce jeu. Si je lance ça, j'ai bien une liste, mais avec un 5 seulement. J'ai plus mon 15.
00:32:08 :Donc pour arriver à ça, qu'est-ce qu'on va faire ? Ici, à la place de var.equals,je vais placer ma variable. Puisqu'on va normalement être toujours dans le même
00:32:23 :espace local. Ok. Là, je vais me creuser un petit peu la tête. Donc, S. Voilà,ça simplifie grandement. Ok. Et logiquement, avec ça, on va split ici. S. S. Et ceci,
00:33:13 :je vais voir ce que ça donne. Ok, je me suis planté quelque part. Donc plus décorateur.Ça va être compliqué d'arriver à avoir. Le problème, c'est qu'à chaque fois,
00:33:30 :ça reprend la valeur 5. Le plus simple, ça serait d'avoir une variable globale que jerécupère d'ailleurs. Pour qu'on arrive à quelque chose. Il ne faudrait pas créer,
00:33:41 :par exemple, une variable dans une fonction qui pourrait être tournée dans l'autre fonction ouquelque chose comme ça. Oui, voilà. Mais bon, ça va être un peu complexe à mettre en place.
00:33:50 :Ce n'est pas le but de ce soir. L'idée, c'est vraiment que là, bon, on va essayer de monterun résultat. C'est un peu compliqué. Mais ce qu'il faut surtout retenir, c'est qu'en fait,
00:34:02 :votre décorateur, il va utiliser la fonction d'origine pour modifier,ajouter un élément d'action en plus à votre fonction. Maintenant, même en Django,c'est pas non plus hyper courant. Quand vous avez déjà deux décorateurs sur une même fonction,
00:34:22 :on est déjà arrivé sur quelque chose qui commence à être sérieux. Je vais vous montrer un petitpeu justement d'exemples. Alors, on va fermer ça. Ça permet d'éviter du code pour rien. Ça
00:34:38 :économise beaucoup de lignes de code. Voilà, c'est une action que vous devez faire régulièrement.On va voir ça, c'est ça ici, Norman. Sur des trucs comme des log users ou des choses comme ça,
00:34:52 :c'est bien. Il faut recopier à chaque fois la fonction log user. On va voir s'ils sont logs ou pas.J'étais persuadé que j'avais encore ce produit là, ici.
00:35:18 :On va pas le retrouver.Le produit. Oui voilà.Voilà.Je vais tout vérifier.Je vais prendre des scènes.Voilà !OK.Alors, je vais essayer de vous trouver le nom de celui avec lequel je suis rendu.
00:36:04 :Voilà.Voilà.Typiquement, on a un décorateur que vous verrez très régulièrement dans Django.Donc ça, ce décorateur, qu'est-ce qu'il fait ?Il fait simplement que lorsque vous voulez accéder, par exemple, à la page de profil,l'utilisateur doit absolument être connecté.
00:36:43 :Maintenant, je ne sais pas si vous avez vu ça, c'est CTRL-D, je crois, pour Windows,ou sinon vous faites un clic droit et vous faites atteindre la définition.
00:36:55 :D'accord ?N'hésitez pas à le faire ça régulièrement.Et là, ça va m'emmener dans le code même.Est-ce qu'il m'a touché ?Voilà.Ça m'emmène dans le code même de Django.
00:37:14 :Là où est défini le domain de l'utilisateur.Là, ça m'explique que c'est une fonction de vue.Que ça renvoie à un champ en chaîne de caractère.
00:37:26 :Et du coup, il m'envoie sur un nouveau décorateur qui s'appelle Overload.Et c'est au travers de tout ça qu'il va récupérer les différents élémentspour vérifier, dans la logique interne de Django,que l'utilisateur est effectivement connecté.
00:37:49 :Ok ?J'ai une question.Pour le décorateur définir, on peut mettre un décorateur au-dessus d'un décorateur ?Oui.Comme ça, ça évite d'accumuler trop de décorateurs au même endroit.
00:38:15 :Ça peut être totalement infini.Un décorateur, étant donné que c'est une fonction,vous pouvez l'importer depuis un autre fichier.Ce décorateur qui aura un autre décorateur et tout çapour faire une cumule de plusieurs fonctions.
00:38:37 :Je vais rouvrir le fichier sur lequel on travaillait.Ici, vous voyez que j'utilise Drops.D'accord ?C'est un décorateur que j'ai importé depuis le module OnTools.
00:38:52 :Et si je vais à la définition de Drops, vous voyez bien que c'est une fonction.Mais c'est un décorateur.Ok ?Comme cette fonction est définie comme un décorateur,elle a le comportement d'un décorateur,du coup, Python, lorsque je mets un Drops,il reconnaît qu'il a utilisé cette fonction comme un décorateur.
00:39:22 :Donc là, typiquement, vous voyez que j'importe ma fonctionde décorateur depuis un autre fichier.Alors, vous remarquerez que pour importer un décorateur,dans mes imports, je n'utilise pas le arrobage.
00:39:36 :Le arrobage, je ne vais l'utiliser qu'au moment où j'utilise le décorateur.Si on importe la fonction et qu'on utilise le décorateur,Si on importe la fonction et qu'on utilise le décorateur,Voilà.
00:39:56 :On a dit que Python utilise cette fonction comme un décorateur.Alors, pour les deux décorateurs, c'est un petit peu abstrait, au début.Pour ceux qui font du Django, vous apprendrez à jongler avec,parce que Django utilise beaucoup les décorateurs.
00:40:28 :Je ne sais pas si j'en ai d'autres exemples dans les fichiers que j'ai là.Voilà. Par exemple, ici, j'ai encore un décorateur.Ça, c'est un décorateur, par exemple, pour faire de la concurrence.
00:40:49 :Ça me permet de faire de la concurrence d'action.C'est-à-dire qu'en fait, tout simplement, ça me renvoie vers...Pourtant, je n'ai pas travaillé sur ce projet.
00:41:12 :Hum.Je vais faire comme ça.Voilà.En fait, là, je n'ai pas importé du module Célérique. D'accord ?Donc, en faisant ça, j'indique que cette action,ce décorateur doit être exécuté parallèlement et sans interrompre le fil normal de l'exécution actuelle.
00:41:52 :Alors, à quoi ça sert l'explication dans Django ?C'est tout simplement dans le cadre de mon projet, par exemple,les fonctions qui permettent d'envoyer un e-mail d'activation quand la personne s'inscrit,un e-mail pour le reset du password, ainsi de suite.
00:42:08 :Le but, c'est que lorsque vous allez sur un site,que vous demandez, par exemple, un reset de votre password,vous remarquerez que la page ne patiente pas le temps que votre e-mail soit envoyé.
00:42:21 :Automatiquement, ça bascule sur la page pour vous dire un e-mail est envoyé à l'adresse mail.Là, typiquement, dans le Django, le sharepass va vous permettre de faire cet envoi d'e-mailsans que la page reste bloquée jusqu'à ce que Python ait effectivement généré et envoyé l'e-mail concernant.
00:42:38 :Vous voyez, les décorateurs, ça peut vraiment amener à beaucoup de choses.Ce qui fait que là, mon sharepass, par exemple, lorsque la personne demande un reset de password,voilà.
00:43:03 :Là, par exemple,j'ai ici ma vue, d'accord,qui gère justement le reset du password.Donc cette vue, lorsque le formulaire est envoyé,elle va donc vérifier déjà que tout est correct.
00:43:44 :En fonction du type de méthode de double authentification,on va envoyer ce password.Donc avec la classe Task qui est importée.On va revenir là.
00:44:07 :Je vous la retrouve.Voilà.Voilà.Voilà.C'est un petit moment que je n'ai pas travaillé ce projet.Bon, peut-être que ce sera le défini là-dedans.
00:45:05 :Voilà.C'est le task que j'ai défini dans le module à compte.Donc on va vérifier.Il est là.Voilà.Accounts.Template.Email.Et là, j'ai tous mes emails.
00:45:44 :Donc là, on va retrouver les emails et les restes de password.Et en fait, ça va appliquer mon modèle HTML pour envoyer l'email.Et donc le task, on va revenir dessus.
00:45:54 :Il va utiliser l'email d'activation pour envoyer la tâche.Et comme cette fonction-là, qui est l'email d'activation,on va atteindre la définition.C'est une tierce classe.
00:46:06 :Et bien, ça va s'exécuter à part du fil principal.Donc là, un autre exemple de décoration.Et ça, en Python, vous aurez beaucoup de choses.
00:46:14 :En Django, vous aurez beaucoup de décorateurs qui seront utilisés comme ça.Est-ce que c'est bon pour vous ?Oui.C'est bon, j'ai perdu personne.Je ne vous cache pas que les décorateurs, c'est un petit peu complexe.
00:46:39 :Si je vous ai présenté les décorateurs ce soir, ce n'est pas par hasard.J'ai prévu justement de vous faire autre chose la semaine prochaine,mais il fallait que vous ayez vu les décorateurs absolument.
00:46:54 :Donc je vous utilise un petit peu.Soyez présents la semaine prochaine si vous pouvez.On verra justement l'utilisation des décorateurs.Et ça nous permettra de faire une nouvelle approchepour ceux qui l'auraient déjà fait, de l'exercice de friarie pichou.
00:47:11 :On va aborder du coup au passage un autre concept.Je ne sais pas si vous avez déjà entendu parler,mais design paterne.Vous avez déjà entendu ce mot barbare ?
00:47:32 :Oui, je crois que j'ai déjà entendu ou vu.Donc on verra, on va utiliser un design paterne particulier.Et on va optimiser ce design paterne notamment à l'aide d'un décorateur.
00:47:46 :Et tout ça sur la base de l'exercice du friarie de pichou.Alors pour ceux qui ont récolté l'exercice du friarie de pichou,qui sera devenu la semaine prochaine,essayez de le faire dans votre temps.
00:47:56 :Vous le trouvez sur DotStream.Vous verrez la version avec la solution qui est proposée sur DotStream.Parce qu'à ce moment-là, vous n'êtes pas censé connaître les décorateurs des design paterne.
00:48:09 :Et du coup, ça me fera l'occasion de vous montrer qu'on peut aller encore un peu plus loinpour jouer avec les design paterne.Et que finalement dans Python, même si on trouve une solution,il y a toujours une solution encore supplémentaire,un peu plus avéliorée et un peu plus optimisée qui peut se présenter.
Aucune occurrence trouvée pour « ».
00:00:00
Introduction et objectifs du mentorat
00:02:45
Exemple basique : fonction showNumber
00:07:11
Création d'un décorateur simple (add_one)
00:15:30
Décorateurs pour manipulation de chaînes (uppercase, split)
00:20:07
Décorateur int_to_str et ordre d'exécution
00:36:22
Applications avancées et intégration avec Django
00:47:04
Conclusion et perspectives