Session du 22 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
Comment envoyer des mails avec Django et configurer google.
00:00:00 :Bon, du coup, bonsoir tout le monde.Donc ce soir, on va voir un peu comment ça se passe pour l'envoi d'e-mail avec Django,ce qui peut être pratique un peu pour un premier contact, pour des notifications.
00:00:17 :Déjà, c'est Will qui nous a dit tout à l'heure, pour envoyer d'e-mail avec Python,vous avez la librairie de standard SMTP, SMTP Libre, qui fait bien le travail.
00:00:33 :Vous pouvez l'utiliser vraiment en Python, déjà de manière basique.Ça, c'est vraiment la librairie standard.Nous, on va s'intéresser à la partie Django.Donc du coup, tout à l'heure, je crois que tout le monde m'a dit,enfin il n'y en a personne qui fait pour l'instant l'envoi d'e-mail, je crois que Django, qui m'a compris.
00:00:51 :Peut-être Arcel qui vient d'arriver.Oui, j'ai fait l'envoi d'e-mail avec Django, plus précisément avec la méthode sendMail.Oui, OK. Vous voyez bien mon écran, là ?
00:01:05 :Oui.SendMail, c'est la manière la plus, j'utilise beaucoup,c'est ce qu'il y a de plus simple et direct avec Django d'envoyer d'e-mail.C'est vraiment, elle porte bien son nom, SendMail.
00:01:17 :C'est ce qu'il y a de plus simple et direct.Donc on va le voir. On va voir qu'il y en a plusieurs.Donc, on va partir basiquement sur un projet, un projet bac à sable en fait,où je fais un peu tout et n'importe quoi dedans, donc qui ne ressemble à rien.
00:01:32 :Mais ce n'est pas grave, c'est vraiment notre laboratoire.Il y a même un vieux PDF qui traîne là, n'importe où, pas rangé.Mais qui va nous servir.
00:01:41 :Du coup, quand vous voulez envoyer d'e-mail avec Django,il y a des constantes à définir déjà.On va se ficher de settings.Alors, moi j'utilise tout le temps Gmail.
00:01:56 :Bien que pour l'envoi d'e-mail, maintenant c'est assez concis,c'est passé par des API.Il y a des sites spécialisés, genre, comment ils s'appellent ?C'est Mailgun, je crois.
00:02:10 :Voilà, donc c'est de cette manière là.Il y a des API comme ça, du Mailgun, ou du Brevo aussi.Je ne sais pas si vous connaissez le Brevo.
00:02:23 :Ils sont assez connus.C'est ça.Vous pouvez les utiliser pour envoyer des e-mails.Mais là, on va le faire vraiment de manière simple,où on va utiliser Gmail.
00:02:37 :C'est vraiment de manière très très simple.Pour mes projets, moi je le fais.Après, je n'ai pas des projets avec 10 000 utilisateurs,donc ça passera très bien.
00:02:51 :Donc, pour ça, je retourne là.Déjà, pour commencer, par exemple,si je retourne sur mon CV ici,je vais faire des formulaires de contact comme ça,où vous écrivez ça,vous mettez l'e-mail,et là, ça va envoyer un e-mail avec Django.
00:03:19 :En fait, ce qui va tourner derrière,ça va être ma fonction sendEmail.Donc là, pour notre cas,on va utiliser des constantes.On va définir le backend.
00:03:33 :Ensuite, je vais utiliser Gmail.Donc, je vais définir cette constante-là.Le port.Ici, c'est pour la sécurité.Donc, on va le mettre à true.Et ensuite, il va falloir le host user.
00:03:44 :Donc, ça, c'est mon adresse mail.J'aurais pu la laisser en dur.Le mot de passe pour pouvoir vous connecter.Et ça, on verra après.Donc, ça, c'est le nom qui va apparaître.
00:04:00 :Maintenant, quand les personnes vont recevoir un mail dans leur boîte,s'il y aura marqué contact, test, machin,quand vous voyez des mails arriver des fois comme ça, des sheets,ça se passe souvent comme ça.
00:04:10 :En gros, ça va être ça.Mais on va voir en quoi c'est utile.Donc, est-ce que pour l'instant, ça va ?Oui.Première étape, du coup, les constantes qu'on définit ici.
00:04:23 :Donc là, je suis pour Gmail.J'ai configuration Gmail.Est-ce que vous comprenez ça ?Donc ici.Oui, en fait, c'est pour sécuriser dans le fichier Anvpour ne pas que ça va sur le GitHub, en fait.
00:04:41 :Oui, c'est ça.Je n'affiche pas mon mot de passe sur le GitHub.En fait, j'utilise Anvironqui me permet d'aller charger mon fichier .anv.Et c'est dans ce fichier là où je cache mes mots de passe.
00:04:54 :Voilà.Donc, je vais le récupérer comme ça.Et dedans, mon fichier ici, j'ai une clé, un email, password.Je vais les récupérer comme ça.Voilà.
00:05:02 :C'est pour ça que je ne les mets pas en clair.Donc maintenant, pour info, avec Google,si vous voulez utiliser, du coup,là, vous ne mettez pas votre mot de passe Gmail,ça ne passera pas.
00:05:12 :Vous allez ici.Vous tapez, par exemple, mot de passe d'application.Il vous explique tout ce qu'il faut faire.Là, je parle pour Gmail.Je parle pour Gmail.
00:05:25 :Vous pouvez utiliser n'importe quel client de messagerie qui supporte.J'ai déjà fait avec Yahoo.Je pense qu'il y a moyen, après, de se prendre des domaineset de configurer votre domaine pour...
00:05:36 :votre adresse mail être le domaine pour le faire aussi.Donc là, pour Google, en fait,il vous demande de configurer la validation en deux étapes.
00:05:44 :Donc ça, vous cliquez et vous suivez la procédure.Et ici, donc je ne clique pas dessusparce que là, après, je vais avoir mes infos.
00:05:52 :Vous avez juste à cliquer ici.Là, je vous le dis.Après, il n'y a plus rien de compliqué à faire.Même ça, c'est facile à faire.
00:05:58 :Vous suivez la procédure.Là, après, vous cliquez ici.Et en gros, vous créez un mot de passe d'application.C'est juste un bouton.Vous mettez le nom de l'application.
00:06:06 :Vous faites OK.Et ça vous donne le mot de passe.C'est fini.Il n'y a que ça à faire.Voilà.Donc c'est vraiment tout simple à faire.
00:06:14 :Maintenant, avec Django,plusieurs façons d'envoyer un mail.Je disais, le plus basique, il y a SendMail.Alors, moi, ce que je voulais vous montrer.Je vais commencer par quoi ?
00:06:30 :OK.Je vais écrire ma fonction et on va voir comment ça se passe.Donc là, j'ai mes configurations numériques.Il y a quelqu'un qui veut se connecter.
00:06:43 :Donc, je disais, ici, j'ai mes configurations d'email, comme on a vu.Et maintenant, on va faire quelque chose.On va aller, donc ça, on va aller, hop.
00:06:54 :On va rester dans l'account.On va...Ah, quelqu'un qui arrive encore.Alors, j'accepte tout le monde.Ça marche.Voilà.Bonsoir à ceux qui sont arrivés.
00:07:09 :Ah, il y a une question, peut-être ?Ou c'est une erreur ?C'est peut-être une erreur, en fait.OK.Donc, on est sur les emails avec Django.
00:07:21 :Je continue.Donc, j'en étais où ?Donc, voilà.Là, c'est les configurations de base.Et ici, dans l'account, on va aller se créer, je ne sais pas.
00:07:28 :On va aller se créer un module.On va l'appeler mail.On va l'appeler mail.On va l'appeler mail.On va l'appeler mail.On va l'appeler mail.
00:07:35 :On va l'appeler mail.On va l'appeler mail.On va l'appeler mail.Qu'est-ce qu'il me fait ?Hop là.OK, mail.On va l'appeler...Point paire, voilà.
00:07:53 :Donc là, ici, on va se créer un module.Alors, comment ça se passe ?On va importer les fonctions qui nous permettent d'envoyer des mails.
00:08:00 :On va aller sur RedHack après.Je vais vous montrer un peu comment ça fonctionne.Donc, on va...On va importer...Donc ça, c'est le plus direct, le plus basique,et qui fait bien le boulot.
00:08:19 :Par exemple,on va le mettre en pratique.J'avais préparé un modèle, ici.Un modèle de réclamation.Voilà.Un modèle de réclamation.Et... Comment dire ?
00:08:36 :En gros, on va créer une réclamationet on va utiliser cette méthode qui permet de mettre la réclamation en résolu.Mon réclamation de quoi ? Je ne sais pas.
00:08:43 :C'est juste un modèle, pour l'exemple.Celui-ci, c'est un projet de bac à sable.C'est juste pour déclencher des envois d'emails.On va combiner ça avec des signaux.
00:08:53 :Donc, on va créer une première fonction qu'on va appeler...UserTagNotification.Là, c'est ClaimStatusChange.Voilà.Donc là, ici, on passera à notre instance de réclamation.Et on va notifier l'utilisateur quand la réclamation passe, par exemple, en résolu.
00:09:18 :Donc, par exemple, on va définir le sujet.Donc là, ça nous parle d'envoi d'email.Alors, j'accepte.Donc là, on va devoir, pour notre mail, avoir un sujet.
00:09:34 :Donc, on va l'appeler...On n'a même pas besoin d'assigner ici.On va mettre changement de statut.On va avoir un message.Et dans le mail, on va dire le statut de la réclamation, par exemple.
00:09:52 :On va mettre le statut de la réclamation a été mis à jour.Voilà, on ne va pas s'embêter.Et donc, on peut passer aussi dynamiquement des informations.
00:10:05 :Ici, on va mettre la réclamation.Et on va récupérer ici un GetStatusUpDisplay.Pourquoi je fais ça ?Vous comprenez le GetStatusUpDisplay ici ou pas ?
00:10:19 :On me dit ça.OK.En fait, quand vous faites ça, c'est pour récupérer le statut.Donc là, on va faire Claim.Donc, on est bien sur l'instance d'une réclamation.
00:10:36 :Status, ici.Donc, GetStatusUpDisplay, c'est pour récupérer cette partie-là,qui est légitime pour l'utilisateur.Voilà.Pour éviter de récupérer le pending.Ça permet de récupérer directement en attente.
00:10:49 :Voilà.Donc, on passe par la méthode GetStatusUpDisplay.Donc, c'est toujours comme ça, Get.Quand on a un choix comme ça, Get.Le nom du champ où vous avez votre choice.
00:11:00 :Et puis, Display.Donc, si le champ s'appelait Status ou autrement,si il s'appelait le fou, on aurait fait ça.Alors, on retourne là.Status.Donc, je disais, on va envoyer un mail simple.
00:11:21 :Donc là, on était là.On a écrit notre message.Et maintenant, on va envoyer un message à quelqu'un qui se connecte.Hop là.Voilà, c'est bon.
00:11:31 :Donc maintenant, on va avoir notre fonction SendEmail, ici.Et qu'est-ce qu'on va lui passer ?On va lui passer le sujet.Notre email.On va lui passer le message.
00:11:46 :On va lui passer FromEmail.Alors, FromEmail, on va le mettre ici à None.Donc, on ne va pas définir d'email.On pourrait définir un email, en fait, pour envoyer le message.
00:11:57 :Je ne l'ai jamais fait.Je le laisse à None.Et quand vous le laissez à None, en fait, ce qu'il va se passer,c'est que Django va se baser sur cette constante-là.
00:12:06 :Et il va aller récupérer l'email là qui est entre les chevrons.Voilà.Donc, je le laisse à None.Ensuite, ça va être la liste des personnes avec qui on va envoyer l'email.
00:12:25 :Donc là, quand on regarde, en fait, je fais ça pour avoir quelque chose de dynamique,pour vous montrer que ce n'est pas statique, ce qu'on fait.
00:12:32 :C'est que là, dans le modèle, la réclamation est rattachée à un utilisateur, ici.Donc, vous pouvez très bien dire line.user.email.Comme ça, dynamiquement, ça va prendre la réclamation de l'utilisateur.
00:12:45 :Voilà.Autre petit paramètre.Je vais vous le montrer.Donc, si jamais il y a un problème, une erreur SMTP,pendant l'envoi d'email, votre application va se planter.
00:12:57 :Elle va arrêter.Elle va vous dire qu'il y a un problème.Elle va crasher.Quand vous mettez le FailedSendEntryAsFlu,s'il y a un problème d'envoi d'email, le mail ne s'enverra pas, bien sûr,mais l'application ne va pas crasher.
00:13:12 :Vous ne le saurez pas.Voilà.Donc, ça évite que, dans des cas où, même si on ne voit pas que ça plante l'application,la personne est sur le site, vous ne voulez pas que ça plante,vous mettez ça.
00:13:24 :Voilà.Donc, on va le laisser pour les exemples.Donc, voilà.Là, on a une fonction qui utilise une fonction.Donc, là, tu vois, oui, tout à l'heure, tu me parlais de retourner quelque chose.
00:13:39 :Ici, je ne vais rien retourner.C'est juste une fonction qui exécute.Dedans, je vais exécuter une autre fonction.C'est tout.Alors, maintenant, on va aller s'amuser en envoyant un mail.
00:13:56 :Pour ça, pour le mettre un peu, pour que le mail s'envoie, je vais vous montrer autre chose.Donc, j'ai déjà fait un mentorat dessus.Ce soir, je vais peut-être faire un peu de comptant que d'habitude.
00:14:06 :On va voir.Pourquoi ça n'écrit pas ?C'est bizarre.Alors, c'est bon.Donc, on va utiliser les signaux de Django.Donc, j'ai déjà fait un mentorat dessus.
00:14:16 :Je ne vais pas passer trop de temps, mais c'est juste pour,on va regarder un peu ce qui se passe avec les signaux.Les signaux, en fait, c'est que vous allez avoir des événements qui vont se passer sur votre application.
00:14:26 :Et à certains événements, ces signaux vont être déclenchés.Et du coup, ils vont exécuter des actions.Donc là, par exemple, ils vont envoyer des mails.
00:14:36 :Donc, je vais vous montrer.Alors, com.django.models, je crois, .signals.C'est ça.On va importer postSave.Donc là, pour dire après chaque sauvegarde de l'instance.Ensuite, il nous faut Dispatch.
00:14:54 :Et on va importer ce vert ici, parce qu'on en aura besoin, sur le décorateur.Et ici, on va récupérer notre utilisateur.Du coup, on va récupérer la fonction GetUserModel.
00:15:08 :Je ne sais pas si tout le monde la connaît, cette fonction-là.Et j'ai fait une erreur quelque part.Pourquoi une bonne erreur ?Qu'est-ce que j'ai fait ?
00:15:24 :OK.Donc là, j'ai bien porté postSave.Et forcément, faute d'Apple, je suis maître.Je ne l'ai pas laissé.Voilà.Donc, maintenant, on va avoir besoin aussi de notre moduleoù on a nos fonctions de mail.
00:15:42 :On va faire ça.Je bug sur les imports.Et maintenant, on va récupérer notre modèle utilisateur.Vous m'arrêtez si jamais vous avez des petits blocages.
00:15:58 :Il n'y a pas de problème.Là, ça me permet juste d'aller récupérer le modèle utilisateur du projet.Et ensuite, on va aller créer un signal qui va déclencher l'envoi d'email.
00:16:09 :Alors, bien sûr, l'envoi d'email, vous n'êtes pas obligé de le...Moi, j'utilise des signaux, mais vous pouvez le faire quand vous voulez.Je ne sais pas.
00:16:21 :Quand vous exécutez une méthode, vous pouvez mettre votre sendEmaildans une méthode de modèle ou de vue.Je vous montre un exemple après, un autre exemple.
00:16:32 :Donc là, j'ai mon postSave.Et je vais dire que le sender, ça va être account.claim.Donc, ça va être ce modèle-là.Et on va lui dire de notifier du coup l'utilisateur.
00:16:49 :Donc là, c'est des paramètres qui sont dans la doc.J'ai fait un mentorat là-dessus, mais vous allez voir.Vous comprendrez mieux. Je vais le faire et vous comprenez mieux après.
00:17:01 :Et maintenant ici, je vais envoyer ma fonction qui va notifier les utilisateurs,qui va leur envoyer un mail pour leur dire que le statut de réclamation a changé.
00:17:16 :Donc, on va dire if not created, c'est-à-dire que si l'instance de claim,ici, claim est déjà créée, c'est-à-dire qu'il y a déjà une réclamation en cours,et qu'elle est resauvegardée, donc le statut change,et bien on va le notifier.
00:17:32 :Est-ce que ça va pour l'instant ou pas ?Vous me dites, hein ?Hop là.Claim est égal à l'instance.Donc en gros, ici, ça peut arrêter un peu avancer ce que je fais.
00:17:54 :Ici, on a cette fonction-là où on va récupérer du coup notre instance,qui est là dans le mail.Et en fait, l'instance, elle est ici dans le signal.
00:18:05 :Et on va la passer du coup à notre fonction email, ici, qui va envoyer l'email.Voilà.Donc maintenant, si je fais un test, je vais créer du coup une réclamation.
00:18:21 :Et il ne se met pas sur mon écran, c'est bizarre.Hop là.Dans la mine.Hop là.Et mon utilisateur, c'est quoi ? C'est lui, il me semble.
00:18:33 :Hop là.Une réclamation.Qu'est-ce qu'il fait ?Ok.Claim type.Qu'est-ce qu'il m'a fait ?Que je retrouve.Qu'est-ce qu'il m'a fait ?Modèle.Ouais, effectivement, ça n'existe pas, ça.
00:18:54 :C'est parce que j'ai foutu.J'avais préparé une...Voilà.Je reviens là.C'est bon, ça marche.Hop.Je vais me le supprimer.On peut le laisser, peu importe.
00:19:05 :On va faire une réclamation.Donc là, hop.Voilà, je le met à lui.Test.Hop.Voilà.Et donc, normalement, si ça marche bien...Quoique, il a quoi comme adresse mail, lui ?
00:19:16 :Gab.L'utilisateur là.Outlook.Ok.Donc, normalement, c'est bon.Retourne là.Hop.Et on va dire que voilà.On passe en résolution de son réclamation.Si j'ai mal fait, j'avais un bug.
00:19:28 :Ce qui m'inquiète, c'est que c'était un petit peu trop vite.Et j'ai l'impression que dès que je prends mon mail, c'est pas fait.Je vais aller voir sur ma boîte MagicFace si je le vois.
00:19:37 :Euh...Il est où ?Il s'est pas fait.Alors, attendez.Qu'est-ce que j'ai mal fait ?Euh...Je l'ai où ?Donc là, j'étais ici.
00:19:53 :J'ai mes settings effets.J'ai mon scène d'email qui s'est faite.Et ici, j'ai...Ah, eh bien, j'ai compris.Ok.Alors...Euh...Qui était là pendant mon Torah sur les...
00:20:11 :Sur les signaux comme ça ?Je sais plus qui y avait.Est-ce qu'il y en a qui se souviennent ou pas ?Non, pas pour moi.
00:20:20 :Ok.Quand vous importez des signaux comme ça avec Django...Donc...Euh...Je vais expliquer rapidement.Pour pas vous perdre.Euh...J'ai pas eu de message.
00:20:32 :Non, ok.Donc, ce que je disais, les signaux, là...Si ça avait fonctionné, si ça n'avait pas fonctionné...En gros, c'est que par rapport à cette instance-là...
00:20:40 :Par rapport à ce modèle-là...Après une sauvegarde d'une instance de ce modèle-là...Après chaque sauvegarde...Si c'est une instance qui est de l'existence,qui n'est pas créée pour la première fois...
00:20:54 :On va exécuter une action ici.Donc là, l'action, c'est envoyer un mail.Utiliser, en fait, cette fonction-là pour envoyer un mail.Sauf que pour utiliser les signaux,si vous mettez par exemple un fichier Signals.py ici...
00:21:09 :Il faut penser...C'est ce qui va faire un peu peur au début,qu'on n'ose pas trop toucher...À aller dans ce petit fichier-là, Apps...Et...
00:21:18 :Vous allez leur dire...Donc, on va utiliser une méthode, Ready...Et on va faire...Import account.signalsDonc, au final, je ne sais pas si ça inventera sur les signaux,sur les mails qu'on fait, mais...
00:21:33 :Du coup, c'est sur les deux.Et voilà.Donc là, logiquement,les signaux devraient se faire,l'envoi de mails devrait se faire.Donc, on recommence.Je suis ici.
00:21:43 :On va supprimer ça.OK.On va retester.Test.Donc là, première création de la réclamation.Rien ne se passe.Ça a été rapide, donc normalement rien.
00:21:58 :On passe en résolu.On va voir si on a un bug ou pas.Et voilà.Euh...OK.Pourquoi pas.Donc, si je reviens là,je regarde ce qu'il se passe.
00:22:11 :Et...Oula !OK.D'accord.Il y a un problème.J'avais créé deux fois ça.Alors, excusez-moi.Je débug en même temps.Hop.Maybe.Reclamation.Voilà.
00:22:24 :C'est peut-être ça qui l'a planté.J'avais fait deux fois le...Et si je recommence,si je reviens dans rien.Tac.Est-ce que si j'enregistre...C'est bizarre qu'ils ne prennent pasgetStatusDisplay,ce que je viens de dire tout à l'heure.
00:22:40 :Euh...Si je reviens là.Ah, c'est normal.Display.C'est pas display.OK.Ça n'a pas fonctionné.On recommence.Donc.Euh...Je suis là.Donc, il est en résolu.
00:22:56 :On va le recommencer.C'est pas grave.On n'est pas assez prêt.On va voir si on a encore un bug.On va recréer une réclamation.
00:23:02 :Je vois du live.Hop.On attend.Test.Enregistrer.Et maintenant,s'il n'y a plus de bug,ça devrait fonctionner.Si on a encore un,on va débugger ensemble.
00:23:13 :C'est pas grave.OK.Là, c'est un peu long.Donc, c'est que ça envoie un mail,je pense.Voilà.Donc, là, c'était fait.Euh...Maintenant, je vais...
00:23:22 :Donc, ça vous...Voilà.Donc, je ne sais pas si mon écran...Hop.Euh...Ici.Et là, vous voyez,on a reçu un mailavec marquéle status de la réclamationa été mis à jour résolu.
00:23:34 :Voilà.Très bien.Hop.Donc, là,on a bien envoyé un mail.Donc, ce qui s'est passé,c'est que le signal s'est déclenché.Puisqu'on a sauvegardéune instancede ce modèle-là,euh...
00:23:47 :qu'elle n'était pas crééepour la première fois,mais qu'on a...elle était déjà...qu'on l'a re-sauvegardée,donc, ça a envoyé un mail.Donc, du coup,à chaque fois,si vous la...
00:23:57 :si vous la modifiezet que vous la re-sauvegardez,c'est qu'on va avoirl'exemple.Donc, là,c'est pour vous montrerla fonction, du coup,scène d'email.
00:24:05 :Et c'est un peupour la mettre en perspective.Voilà.Pour la mettredans une...dans un signal.Mais, bon,les signaux,moi, je ne suis pas un grand fan.
00:24:14 :J'utilisais vraimentquand j'ai pas le choix.Bien souvent,vous allez avoir une vue,par exemple,une vue de contact.J'en parlerai après.Dans votre vue de contact,vous allez envoyer un email.
00:24:23 :Vous allez envoyer un email,en fait,par la vue de contactet faire votre scène d'emaildans la vue de contact.On va continuerjuste à regarderce qu'on peut avoir.
00:24:31 :Ma boîte mail,elle est où ?OK, je l'ai mis là.Donc, ensuite,il y a une autre...Hop là.Une autre fonctionqui peut être sympa,c'est...
00:24:40 :Elle s'appelleMail Manager.Voilà.Et là,on va aller voir un peula doc.On va aller voirun peu la doc.Donc, là,je vous ai montréscène d'email.
00:24:51 :Hop.Et voilà.En détail.Donc, scène d'email,il faut lui envoyerun sujet,un message.From email,si je le mets à None,j'utilise ce que j'ai dansmes settings,le défaut From email.
00:25:03 :Là, c'est à qui on envoie.File silently,c'est ce que je disais,c'est qu'il y a une erreur,on le met à Slew,c'est pour dire,en gros,tais-toi,s'il y a une erreur,c'est pas grave,ça passe.
00:25:14 :Et on peut aussienvoyer des messagesHTML.OK,des mails HTML.Ça, on verra.Donc, il faut très biendéfinir un HTML messageplus un messageen même temps.
00:25:24 :Et, en fait,c'est le client mailqui va faire le tri.S'il est capablede prendre du HTML message,il va le prendre.Sinon,il ira chercher ça.
00:25:32 :Voilà.Ou vous pouvez définirque du message standard.Donc,Send Bash Mail,on ne va pas le voir ce soir.On va voir aussiMails Adminet Mail Managers.
00:25:41 :En fait,ça, c'est sympa.Je l'utilise dans une applicationpour prévenirtous les modérateurs,entre guillemets.En gros,vous définissezdans vos settingsune liste de tuples,comme ça,avec le nomet les adresses mail.
00:26:00 :Après,vous pouvez le gérer dynamiquement.Moi, une fois,j'ai fait une compréhension de listeoù je voulais récupérertoutes les personnesqui sont super uséespour leurs mails.
00:26:08 :Mais, en gros,sur le principe de ça,ça va être une liste de tuples.Et donc,avec Mails Adminou Mail Manager,c'est exactement pareil,sauf qu'il va y mettreune constante admin.
00:26:17 :Ça sera une constante manager.Comme ça,on peut avoirdeux niveaux différents.Et bien, en fait,on va faireun envoi d'email,sauf que ça va envoyer,justement,à tous les managersque vous avez définis.
00:26:30 :Donc, par exemple,on va faire ça rapidement,celle-là.Et ce soir,on finira par une classequi permet d'envoyer des emails,d'envoyer du HTMLet, en plus,d'envoyer des pièces jointes.
00:26:44 :Donc là,on va utiliserNotification New Claim.OK.Comme ça,on va le dire au manageret une nouvelle réclamation.Merci.Hop.J'ai perdu personne pour l'instant.
00:27:01 :C'est bon ?Dites-le honnêtement,s'il y a...Non, non, c'est bon.OK.Super.J'ai vu qu'il y a Franck.Le pauvre,sa connexion ne tient pas.
00:27:14 :Il est déconnecté.Bon,on va voir la rediffusion.OK, je continue.Donc, pour les managers,ce qu'on peut faire,on va faire une nouvelle fonction.
00:27:27 :Je n'ai pas à l'écrire.Subject.Et là, on ne va pas s'embêter.On va mettreNouvelle réclamation.Et puis là,on va faire une petite string.
00:27:37 :Hop là.Et on va dire,pour vraiment envoyer,on peut faire des choses dynamiques.Claim.user.email.Réclamation 2.Voilà.Message.On va se dire quoi.Bon, vous avez compris.
00:27:52 :On met des dynamiques.On ne va pas tarder là-dessus.Donc là, je vais mettre le message.Voilà.On aurait pu lire,je ne sais pas,soumis par claim.user.username
00:28:06 :avec claim.descriptionpour avoir la description du...Allez, on va se le mettre.On va se le mettre.Hop.Message.Voilà.Et là, on va se le mettre.
00:28:17 :On va mettre claim.description.Ce sera plus cool.Description.OK.Voilà.Et maintenant,on va utiliser la fonction MailManagers.MailManagers.On va lui envoyer le subject,le message,et le message sur quoi,comme ça.
00:28:35 :Et on peut lui dire aussi,tais-toi,s'il y a une exception,si ce n'est pas grave, ça passe.Donc voilà.On ne dit pas,on envoie à TileMail,puisque là, on l'envoie vraiment au manager.
00:28:47 :Donc dans vos settings,ici,managers,ou j'aurais pu le faire avec admin,avec la fonction admin,mais on va prendre managers.Donc j'ai listé une liste de tuples.
00:28:57 :Donc on va avoirtag, hop,et Gabriel,entre 5,en bas,j'ai pas fait d'erreur,voilà.Je vais en mettre qu'un.Voilà.Et maintenant,on va utiliser un signal.
00:29:12 :On va prendre un signal,voilà.Ouais, on va utiliser un signal aussi,c'est pratique pour nos exemples.Donc on va notifier le manager.Hop.Ça va être le même.
00:29:27 :On va prendre le...Ouais,je pense qu'on va prendre le même.On va prendre le même.On va prendre quasiment le même.Hop.Donc là,si vous avez suivi,ici j'ai quelques petites choses,donc manager.
00:29:52 :Donc là j'ai ma fonction, du coup,à modifier,qu'on a appelée...qu'on a appelée comment ?Notification.Voilà.Et si vous avez suivi,ici il y a une chose à modifier du coup,puisqu'en fait on veut lui direqu'il y a une nouvelle réclamation.
00:30:11 :Est-ce que vous voyez où,dans cette fonction ?Ok.C'est ça.Donc,vu que c'estdès qu'il y a une nouvelle instance de créé,c'est dès qu'elle est créée,voilà,dès qu'il y a une...
00:30:30 :Comment dire ?Une réclamation qui est créée,on va avertir tous les managers.Donc là,on va montrer avec un exemple,on va regarder si...
00:30:39 :Je ne veux pas encore avoir un bug,mais on va bien voir,on fait une réclamation,pour moi-même d'ailleurs,ou pour Gatien.On la sent en attente,on lui en ditpas content.
00:30:50 :Est-ce que ça passe ?Pas content, voilà.Et donc ça l'envoie...Voilà.Et moi ça me prévient,parce que du coup,ce compte-là il est admin,enfin je l'ai mis,du coup, en tant que managers.
00:31:05 :Et là ça met bien,donc,une réclamation de machin,et donc message de pas content,voilà.Tout simplement.Donc là,on a utilisé le...MailManager.
00:31:20 :On a le sendEmailqui était le plus basique,on a le manager pour avertir les managers.Donc le mail,sinon,comme je disais,on ne pouvait pas bien avoir le mail admin.
00:31:29 :On aurait défini iciune liste de tuplesavec la constante admin.Mais on va...On va regarder...On va finir par...On va utiliser une classe maintenant.
00:31:46 :On va voir ce qu'on peut faire avec une classe.On va utiliser EmailMessage.On va utiliser EmailMessage,et je vais préparer un signal d'avance,comme ça lui il sera fait,et comme ça on pourra s'attarder plus sur la classe.
00:31:57 :On va faire en sorte d'envoyer un messagedès qu'un utilisateur s'inscrit sur le site.Ouais, ça me paraît pas mal ça.Donc...Receiver, c'est ça.
00:32:08 :Donc là, on fait un post saveaprès la sauvegarde.Qu'est-ce qui va nous l'envoyer ?Le sender,ça va êtrel'useur,parce qu'on a récupéré le modèle d'utilisateur.
00:32:18 :Donc dès qu'on a un utilisateur qui va s'enregistrer,donc,ici on va l'appelerDefSendWelcome, en gros.Voilà.SenderInstanceCreatedNoQuestionsHop.Et ici on va dires'il y a un nouvel utilisateur,donc s'il est créé pour la première fois,on va direMailNotificationet on va créer
00:32:52 :une fonction ici.Donc,je vais dire du coupqu'on va utiliserune classeEmailMessage.Donc on va faireune fonction,on va l'appeler comment ?
00:33:06 :On va l'appelerWelcomeMail.Voilà.Et on va faire quelque chose de simple.On va envoyer l'utilisateur.Voilà.Hop.Et on va l'utiliser ici.WelcomeMail.Et on lui envoie l'instanced'utilisateur.
00:33:25 :Pour ceux qui débutent,c'est comme si tu faisais ça.Hop.Tac.Donc,ici j'ai mis en paramètreUtilisateur.Utilisateur, en fait,on va récupérer par instanceet je lui envoie dans la fonctionWelcomeMail.
00:33:39 :Donc pour l'instant,elle est vide.Pour l'instant,elle est vide.Donc on va définircomme tout à l'heureun sujet.On va mettreSalut, Bienvenue, quoi.
00:33:49 :Voilà.On va maintenant lui donner,donc,on va utiliser du HTML.Donc pour ça,on va utiliserdans Template, ici,on va créer unnew...
00:34:01 :Bon, on va le laisser dans un code.On pourrait très bien créerun nouveau dossier.Ce serait plus propre.On va le fairee-mail.Voilà.
00:34:10 :J'ai un dossier e-mail.On va l'appeler maintenante-mail.html.Et normalement,je suis préparé un petit snippetsi je le retrouve quelque partsur mon PC.
00:34:19 :Un petit bout de code.Je vais prendre et le faire du HTML.Voilà.Hop.Hop.Donc,voilà.Donc là, on a un fichier HTMLet on va s'en servir, en fait,pour envoyer des e-mails.
00:34:32 :Hop.Donc, on continue.Je vais faire mon sujet.Salut.Voilà.Et on va lui direHTML.On va définirune variable.HTML nous dit.Et on va utiliserune fonctionqui s'appelledjango.template.
00:34:53 :C'est le loader qui est là.C'est ça.On va importerrenderToString.C'est ça.Voilà.Je suis là.Et donc, on va utilisercette fonction-là.RenderToString.
00:35:05 :Et on va lui direqu'on veut utilisernotre fichier HTML.Et on lui envoie en contexte.On lui envoie en contextel'user.OK.Ça va pour l'instant ?
00:35:23 :Je m'arrête pour une seconde.Vous me dites, hein,s'il y a un petit blocage.OK.Juste, en fait,par exemple,je reviens sur manager, là.
00:35:32 :Quand tu l'appelais,on est d'accord,tu es sous la même racine.Donc, tu n'as pas besoinde préciserque tu passes par setting.Il faut que tu aillesle chercher dans setting.
00:35:40 :Tu n'as pas besoin de le faire.Ça va directementchercher managerdirect, quoi.Ah, ouais.T'inquiète.Si j'arrive par django,quand tu faissi j'arrive par django,quand django s'initialise,se lance,tout ce qui est là,c'est chargé.
00:35:53 :D'accord.OK.Et il y a mêmebeaucoup plus de chosesqui sont chargéesque tu ne vois pasau niveau des settings.Ah, d'accord.Parce qu'il y a des chosesque tu peux redéfinir,mais il y a déjà des chosesqui sont par défaut.
00:36:05 :En fait,ils ont un fichier de settings,je ne sais pluscomment il s'appelle.Ça m'arrive d'y aller dedansde voir, en fait,tu vois toutes les constantesqui sont définies.
00:36:13 :Et toi,tu surcharges celles que tu veuxD'accord.Je ne précise pas.OK.Alors,imaginons que dans un fichier,tu aies besoin,à un moment donné,d'aller chercher spécifiquementune constante dans les settings.
00:36:24 :Je n'ai pas d'exemple,là,pourquoi je le fais des fois.Pour peut-être avoir des foisde prendre le mode debug.On peut très bien direque ce seraitfrom django.
00:36:32 :Alors,si je le trouve,c'est .core.Est-ce que c'est ça ?Non.OK.Alors,si je le trouve,c'est .core.Est-ce que c'est ça ?
00:36:42 :Non.Je ne sais plus.Non,c'est .contrib,je crois..contrib.Import settings.Hop là.Voilà.Ce n'est pas ça.Je ne sais plus..contrib.Je ne m'en souviens plus.
00:36:55 :Bon,je regarderai.Non,ce n'est pas grave.J'ai un exemple.Moi,je n'ai plus en têteun truc de mémoire,mais je le laissesur un autre projet,là,pour le voir à la fin.
00:37:07 :OK.Alors,si je le trouve,c'est .contrib.Est-ce que c'est ça ?Je le laisse sur un autre projet,pour le voir à la fin.
00:37:14 :OK.J'y pense.Donc,là,c'est .contrib.Je ne sais plus.Donc,on envoie du coup,dans notre HTML,ici,je reviens dessus,on utilise en faituser.userName.
00:37:27 :Donc,ça veut dire que c'est commeavec une vue de Django.On va lui envoyerle contexte,l'utilisateur,qu'on récupère ici.Donc,là,mon contexte,j'envoie l'utilisateur.
00:37:38 :Donc,ici,j'ai mon fichier HTMLqui est prêt à être utilisé.Et maintenant,ce qu'on va faire,c'est qu'on vas'instancier,ici,une instancede email message.
00:37:49 :Comment ça marche ?Donc,ça ressemble beaucoupà ce qu'on faisaitavec les fonctions.On va avoirun sujet.En body,on va utiliserle HTMLqu'on a défini.
00:38:00 :Et,on va l'envoyerà qui ?Qu'est-ce que j'essaie ?Qu'est-ce qu'il me fait ?Hop là.On va l'envoyeràuser.userName.Donc,user.email.
00:38:12 :Utilisateur.Alors,il faut préciser,quand vous envoyez du HTMLcomme ça,il faut bien préciser,heu...dire,en gros,ce qu'on va en rajouter,c'est ça,que ce que vous envoyezc'est du type HTML.
00:38:25 :Donc,ce qui est intéressant,quand vous passezpar une classecomme ça,EmailMessage,ce n'est pas justeune fonction,c'est vraiment une classe,vous pouvez la manipuleraprès en faisant instancecomme vous voulez.
00:38:37 :Donc,là,vous avez un fichierqui utilise du HTMLpour vos mails,mais en plus,après,je peux lui dire,email.Attach file.Donc,pour envoyer une page jointe,on va lui dire,ben,va me chercherdans Account,heu...
00:38:54 :je l'ai appelé comment ?Test.PDF.PDF.Donc,le fichier que j'ai mis là,je l'avais prévu.Test.PDF,ça.Mais,évidemment,bien sûr,que dans vos fonctionsou dans vos fichiers médiasqui vont être stockésdans vos instances,hein,des files fieldsou des images fields,vous pouvez très bien,
00:39:15 :ici,récupérer dynamiquement,en fait,les cheminsde chaque instance.Là,je l'ai fait dans l'URL,mais c'est juste pour vous montrerqu'on peut envoyerun email comme ça.
00:39:25 :Et donc,à la fin,qu'est-ce qu'on fait ?On l'envoie.Et comme avec les autres,on peut lui dire,tais-toi,si jamais il y aune CNTP erreur.
00:39:34 :Voilà.Donc,ça,c'est un emailavec une classeoù là,on peut fairedes choses un peu plus avancées.Bon,on va peut-être se le tester.
00:39:45 :On en a fait pas mal,du coup,de toute façon,j'ai peut-être oubliéquelque chose,mais on va voir.On va inscrire.Je vais peut-être passerpar le Shell,du coup,ça va peut-être mieux.
00:39:56 :Parce que ça,c'est le modèlede Bazeljangoet je ne pense pasque je puisse avoirl'adresse emailquand je l'ai inscrit.Ouais,c'est bien ce qu'il me semblait.
00:40:05 :Donc,on va faire autrement.Donc,j'ai toujours enregistré.Qu'est-ce que j'ai fait ?Hop là.On va créer un utilisateurcomme ça.Hop là.Je vais passer paren passant BT.
00:40:20 :Super.Je l'ai fait.C'est ce qu'il y ade plus rapide.Voilà.Donc,on va l'appeler,je ne sais pas,peu importe.On va l'appelertest,ce monsieur.
00:40:32 :On va l'appelerune adresse mailqui n'existe pasdans l'applicationqui sera à moiqui veut qu'on peut envoyerun mail.J'ai une Yahoo.J'ai une Yahoo.
00:40:41 :Je regarde rapidementce que c'estcomme adresse mail.Je ne sais pass'il est encore actif.Yahoo.Yahoo.Est-ce que j'ai encoreune Yahoo ?
00:40:50 :Tac.OK.On va regarder ça.Mail.Ouais,ça devrait marcher.J'essaie ça vite fait.Est-ce qu'il va me connecter ?Ouais,ça marche.OK.OK.
00:41:02 :OK.OK.Ma Yahoo,elle a fonctionné.OK.C'est comme adresse mailcomme je peux le voir.C'est où ?Yahoo.Là.Hop.C'est .com Yahoo,
00:41:20 :je crois.OK.Donc,c'est5hors baseYahoo.comVoilà,mot de passe.J'espère que je n'ai pasfait d'erreur.Hop.Donc,je suis l'utilisateur.
00:41:35 :Logiquement,on va mettrela Yahoosi elle va bien.Je ne sais pas si...Ouais,c'est bon.Hop.Et voilà.On voit qu'on a duHTML.
00:41:46 :J'ai bien écritbonjour test,merci,t'inscris sur notre site.C'est notre site.Donc,on a bien monutilisateur,monsite.Donc,on a bien mon site.
00:41:58 :Donc,on a bien mon site.Donc,on a bien monutilisateur,mon nom qui s'appelletest.On a le message.Et on a bien ici,c'est du H1.
00:42:08 :Et on a bien le PDFici,qui est un piège.Voilà.Hop.Donc là,on vient de voirla classemail message.Donc,je vais m'arrêter làpour les mails,juste.
00:42:21 :Je vous montrerapidement.Donc,vous avezscène d'email.Donc,on peut envoyerun messagetexte,ou du HTML.Nous,on a,donc,les mailings,sans la vue,sans la vue.
00:42:37 :On a aussi la classeemail message.Donc,ça qui permet,en fait,d'envoyer.Lui,donc,on l'a utilisé à l'instant.On envoie,soit l'un,soit l'autre.
00:42:49 :C'est du texteou du HTML.Et,il existe aussi,ils en parlent là,l'emailmulti-alternative,qui lui,en fait,permet d'envoyerà la fois du texteet à la fois du HTML.
00:43:01 :Donc,pareil,ça va être le clientmail qui va déciders'il va utiliserle HTML ou le texte.Voilà.Lui,il permet d'utiliser les deux.
00:43:10 :Donc,voilà pour les mails.Qu'est-ceque je voulais montrer d'autre ?Donc,là,j'utilisais ça pourles signaux,ici,pour avoir un peu de contexte.
00:43:20 :Mais,il y a,par exemple,une application.Je vaismontrer celle-là.Allez,hop.Je crois que j'ai déjàfait un système de contactavec lui.
00:43:31 :Est-ce que je vais faireun système de contact ?Donc,est-ce que j'aiune vue de contact ?Yes.OK.Donc,là,par exemple,c'est ça.
00:43:42 :Là,j'ai une vue de contact,ici,une contact view.Et quand on va allersur le site,ça va afficherun formulaire,le contact form.
00:43:51 :Contact formqui est ici.Donc,là,c'est pour vous montrerune session plus normalequ'avec les signauxparce que ça faisaitun peu...Voilà.Ça faisait beaucoup de choses,mais sinon,simplement,ici,j'ai un formulaireavec un contact form.
00:44:07 :Donc,j'ai email,sujet,et puis le texte.Voilà.Et j'ai un recaptcha.Et je désactive,bon,ça,on s'en fiche,mais en gros,j'ai un recaptcha.
00:44:19 :Ça,ce n'est pas le sujetdu jour.Ah bah,tiens,voilà.Oui,j'utilise pour utiliser,en fait,test mode.Comme ça,quand je suis en test mode,en fait,je n'utilise pas le recaptchaparce que c'est chiantà tester,ça,je n'aime pas.
00:44:37 :Donc,j'ai email,sujet,texte,et sécurité.Voilà.Et après,j'utilise une petite fonction.Je suis où ?Elle est où,ma fonction ?Dans mes vues.
00:44:49 :Voilà,elle est là.Process contact form.Elle est là.Et en fait,ici,pour ne pas avoir trop de logique,en fait,dans ma vue,j'ai cette fonction-là.
00:44:59 :Et qu'est-ce qu'elle fait ?Hop là.Et en fait,je fais deux scènes d'email.J'ai un scène d'email.Donc,mon formulaire,ici,mon formulaire,je le traite.
00:45:09 :Je récupère l'email de la personnequi écrit,le sujet,le texte.Donc,email,sujet,texte.Donc,je récupère ces données-làdans des variables.Hop.Et le sujet,j'envoie comme ça.
00:45:23 :Tac.J'envoie l'email de la personnequi envoie le message.Et je me l'envoie à ma propre boîte mail.Voilà.Donc,comme ça,en fait,la personne,elle l'écrit,elle met son adresse email,elle met son sujet,le texte.
00:45:40 :Et du coup,je sais ce qu'elle m'envoieet je sais qui me l'envoie comme ça.Je me l'envoie à moi-même,le message,mais je sais qui me l'envoie.
00:45:46 :Et j'envoie un message ensuiteà la personne.Je dis,votre message a bien été reçu,machin.Et donc,je l'envoieen mail.J'envoie le messageà cette personne-là.
00:45:56 :Voilà.Donc,ça,c'est une utilisation assez standard.Est-ce que ça,ça va ou pas ?Oui.Voilà.Là,on est vraiment dans un trucun peu plus standard.
00:46:07 :Un formulaire de contact,en fait.On récupère les informationspuis on fait un signe d'email.Voilà.Donc,voilà comment on peut l'utiliser,basiquement.Je me suis bien embêté,aussi,par exemple,à...
00:46:19 :Parce que ça,c'est une grosse applicationoù j'envoie des e-mails,en fait,quand il y a des changementsde statut des commandes,s'il y a des réclamations,si c'est une nouvelle commande,ainsi de suite.
00:46:29 :Voilà.Donc,je fais des e-mails,en fait,au manager.Après,j'envoie des e-mails au client,tout simplement.Et pour info,pour ceux qui connaissentun peu les signaux,bon,là,j'avoue que c'est déjàplus avancé,en fait,j'ai un modèle de commandeDonc,si la commande,elle est créée,
00:46:52 :pour la première fois,j'envoie des e-mailset des notifications.Et,sinon,si elle n'est pas,si ce n'est pas la première foisqu'elle est crééeou qu'on l'a modifiée,par exemple,donc,si elle est modifiée,en fait,je préviens pour dire,en gros,que le statut de la commande
00:47:08 :a été changé.Mais,à savoir que,voilà,je le montre comme ça,à savoir que,quand j'envoie des e-mails,à savoir que,quand vous utilisez,quand vous sauvegardezune instance,par exemple,vous pouvez juste sauvegarder,mettre à jour,en fait,les champs qui vous intéressent.
00:47:25 :Quand vous faites un save,vous pouvez spécifierupdate fields,je ne veux pas tout sauvegarder,je veux sauvegarderque le montant totalet que le totaldes objetspar rapport àles articlesqui sont dans une commande.
00:47:36 :Donc,on peut faireun update fields.Et,en fait,dans vos signaux,vous pouvez les récupérerpar Quark,ici,aller récupérer,voir s'il y a,justement,ce paramètre.
00:47:49 :Et donc,ça me permet,après,de traiter la logique.Donc,par exemple,moi,je vérifie que si,dans ce paramètre,il y a çaqui a été sauvegardé,s'il n'y a que çaqui a été sauvegardé,eh bien,je ne veux rien faire,je ne veux pas envoyerd'e-mails.
00:48:06 :Donc,voilà,c'était juste un petit rebondpar rapport au mentoratsur les signaux,qu'on peut faire des chosesvachement avancées,comme ça,et après,aller faire des comparaisonscomme ça,avec un Setou un Frozen Set.
00:48:19 :Ça,c'était juste le petit motde la fin.C'était surtout pour ceuxqui avaient suivile mentoratsur les signaux,qu'on pouvait fairece genre de choses-là.
00:48:28 :Voilà.Merci.J'espère queça vous a plu.C'était peut-êtreun peu long,maisj'ai juste,en fait,mais l'histoiredes signaux,c'était justepour envoyerdes e-mailsaux genspour envoyerdes e-mails facilement,mettre un peu en pratiquel'envoi d'e-mail,maisje vous dis,l'envoi d'e-mail,basiquement,vous faites un formulaire
00:48:52 :de contactet vous faites votresigne d'e-mailà un formulaire de contactdéjà,pour commencer.Merci Fabrice,c'est gentil.Donc,voilà.Est-ce qu'il y ades questions ?
00:49:04 :Ou pas du tout ?Oui.Non,j'avais une petite.Oui.Django,maisil a des systèmesde validation ou pas ?Django quoi,t'as dit ?
00:49:15 :Enfin,le module mailde Django,est-ce qu'il ades systèmesde validationpour avoirun e-mail valideou ce genre de choses ?C'est-à-dire,si t'envoies çasur une,enfin,si t'envoies çasur un e-mailtout pourri,est-ce qu'il l'envoiequand même ou pas ?
00:49:33 :Alors,j'aidéjà envoyésur des e-mails,comment dire,c'est dese-mailsqui n'existaient pas.Donc,tu prends justeun e-mail,en gros,délivré système,je ne sais pluscomment ils appellent ça.
00:49:48 :Ok,d'accord.Je n'ai plus le nom,mais tu voisce que je veux dire ?Oui,je vois tout à fait.Oui,tu prends ça,sinon,je n'ai jamaisvu d'autres spécificités.
00:50:00 :Merci.Oui,j'ai essayéde structurerun maximum.Je me faismes petites plansdans ma têteavant de fairele projet du mois.En plus,j'ai fait un gros crochetsur les signaux,du coup,en même temps,je faisais un peu les deuxen même temps.
00:50:17 :C'est juste parce queles signaux,en fait,ce que je fais làavec les signaux,moi je les faisdans une applicatione-commerceparce que c'estle plus simple à faire.
00:50:27 :Donc,voilà.Donc,voilà.Pour ceux qui fontle projet du mois,du coup,je pense que ça peutvous servir pourenvoyer des notificationsde l'herbe de stock,d'ailleurs.
00:50:39 :J'ai l'idée,du coup,là,prochainement,d'émail comme çaou sans plus.Oui,ça peut êtrevraiment intéressant.Moi,ça serait dans le cadre,si je dois,d'utiliserdes rapports,tu sais,avec des clients.
00:50:55 :Tu finis ta journée,en fait,et tu dis,voilà,donnez-moi votre mailet j'envoie de suite,quoi,tu vois.Ça va être ce genre-là,quoi.
00:51:05 :Exactement.Sachant quevous ne faites que,imaginez,vous ne faites qu'une API,donc,avec Django REST Framework,parce que j'ai bossé,moi,je ne faisais que çaet je bossaisavec que les seniors,après qui,eux,faisaient du JavaScriptet ils faisaient du front-end.
00:51:22 :Et ils me disaient toujours,donc,c'est logique,les envois d'emails,surtout,vous les gérez,vous,en back-end,en Django.Donc,même si c'est du DRSque vous faites,les emails,c'est vous qui gérezles emails.
00:51:37 :Voilà.Et ça,j'étais assez à cheval là-dessus,c'était surtout le back-endqui doit gérer les emails.Justement,ta question,enfin,c'est assez intéressant.La frontière du front-end,elle est où ?
00:51:48 :Et du back-end,c'est quoi ?Enfin,c'est où la frontière,en fait ?Je ne sais pas,par exemple,quoi,ton back-end,il va s'attendreà recevoir des données,tu vas prévoir des champset,le front-end,il va s'attendreà recevoir des données,et le front-end,lui,il va créer des formulaires,
00:52:08 :il va avoir ses validationsà lui,bien sûr,mais il va créerdes formulairesqui sont prêts,en fait,à envoyer des informationsau back-end.
00:52:17 :En fait,c'est eux qui créentles signauxou c'est à toi,en back-end,de le faireet de le remettreà disposition,quoi,si je...
00:52:27 :Non,c'est toi qui faisle tour en back-endet puis,non,c'est toi qui fais en back-endet puis,c'est à euxde les afficher,quoi,mais...
00:52:38 :Voilà.Ok.Donc,voilà.Bah,écoutez,je ne sais pass'il y a d'autres questions.De rien,Arsène,merci.Bah,s'il n'y a pas d'autresquestions,du coup,je vais vous...
00:52:54 :Je vais vous laisser,alors.Merci,tout le monde.Bah,ça fait plaisir,en tout cas,de...D'être là.C'est sympa.Je vois que Django,ça intéresse beaucoup de monde,en plus.
00:53:07 :C'est marrant.Ça intéresse beaucoup,beaucoup de monde.Bah,écoutez,on se revoit jeudi prochain,du coup,pour un nouveau Mentorat Longo.Je ne sais pas encorequel sujet on va avoir,mais...
Aucune occurrence trouvée pour « ».
00:03:24
configuration de settings.py
00:07:59
import des fonctions et classe pour l'envoie d'e-mail
00:08:58
Le plus commun = send_email
00:25:54
mail_managers / mail_admins
00:31:47
La classe EmailMessage : la classe pour une personnalisation plus poussée