Session du 26 juin 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
On va découvrir Django Factory Boy !
00:00:00 :Bonsoir tout le monde, ce soir je disais qu'on allait parler de FactoryBoy.C'est un peu bizarre comme nom, je le sais.Du coup, pour ceux qui sont arrivés, il n'y a jamais personne qui l'utilisait FactoryBoy ?
00:00:18 :Non.Ok.Ce n'est pas hyper connu.Et c'est Thierry Chapuis qui m'en a parlé une fois.J'ai testé et franchement c'est assez cool.Vous allez voir.
00:00:36 :Alors pour ça, déjà partager mon écran c'est une bonne chose.Vous me dites quand c'est bon, quand vous voyez mon écran.On le voit.Ok, super.
00:00:49 :Bon je disais, on part sur l'exemple bidon du blog comme d'hab.Mais là on va modifier, je crois que la dernière fois j'avais pris ça, j'ai un doute.
00:00:57 :Sauf que là on va se faire de la relation étrangère.Pour que ça soit intéressant et voir que ça marchera très bien avec des relations étrangères.
00:01:04 :Est-ce que je parle maintenant de FactoryBoy ?FactoryBoy en fait, ça va vous permettre de créer des usines à modèles.Parce que je ne sais pas qui fait encore bien les tests avec Python et surtout Django.
00:01:20 :Mais c'est très important de faire les tests.Il ne faut peut-être pas tout tester non plus.Mais surtout quand c'est des fonctionnalités de Django, moi je ne les reteste jamais.
00:01:30 :Je teste vraiment ce que je fais moi-même.Attends, je vais couper mon téléphone.Du coup je disais, ce qui peut être fastidieux c'est quand il y a des projetsoù vous allez devoir vous créer des fixtures pour vos tests.
00:01:44 :Créer des instances.Et ça, ça peut être très long.Parce qu'il faut vous retaper à chaque fois un produit, trois, ainsi de suite.Et ça, ça peut être long.
00:01:53 :Et il y a un moyen très rapide de faire ça avec FactoryBoy.Alors déjà, j'ai un projet de bloc basique.Je vais couper pour Python, je vais le garder pour le HTML parce que ça ira plus vite.
00:02:09 :Donc déjà, on a bien Moezef qui est importé.Salut, on commence tout juste.Tu voulais dire un truc du coup ?C'est dans le micro.
00:02:36 :Bon du coup, je disais, si tu m'entends, ce soir on fait du FactoryBoy.Alors je ne sais pas si tu connais.Mais pour ça, on repart sur le modèle basique de blog.
00:02:48 :Mais qui va être très bien pour expliquer ça.Du coup, on va importer la fonction.Ah, il y a quelqu'un qui arrive encore.Je vais redétendre un petit peu.
00:03:01 :Je vais redétendre un petit peu peut-être.Voilà.Salut.Salut Gaby.Salut Lito et moi.Bon Lito, je te redis vite fait, ce soir on fait du FactoryBoy.
00:03:15 :On va voir en quoi ça peut être pratique.Donc pour ça, je repars sur un projet de blog assez basique.Mais qui est très bien pour l'exemple.
00:03:26 :Et je vais dire quoi.Et on va s'amuser justement à faire des modèles imbriquéspour montrer l'efficacité du FactoryBoy.Donc on va avoir un premier modèle.
00:03:40 :On va se dire que pour un blog, on va avoir des auteurs.Ok.Et les auteurs, forcément ça va être une one-to-oneavec le modèle user de Django.
00:03:55 :Merci.Voilà.One-to-one.Donc l'utilisateur ici.Et on va mettre un OneDelete.OneDelete.OneDelete.Models.Cascade.Ensuite, on va lui mettre une bio.Ouais, on va lui mettre une bio.
00:04:14 :On va lui mettre quelques petits...Il faut donner coup de la consistance pour notre factory.Et il va avoir aussi une...Allez, une birthdate.Une birthdate.
00:04:29 :Et ça va être un DateField.Voilà.Ensuite, on va avoir un modèle qui va être...Bon, on va avoir deux modèles.C'est bien en fait.
00:04:40 :On va faire que deux modèles.Comme ça, il y a de l'abrication.Ça suffit pour montrer l'intérêt du factory aussi.J'ai un problème avec les pompes.
00:04:47 :Assoir.Modèles.Ici.Sur l'article, on va justement créer des images.Enfin, on va donner un attribut images.Vous allez voir, je fais ça volontairementpuisque je vais vous montrer un truc qui est assez sympa avec...
00:05:02 :Une technique assez sympa avec les...Comment dire ?Avec les tests et les images.Parce que sinon, vous allez tomber un jour ou l'autre sur un piègequi va, je pense, un peu vous saouler.
00:05:14 :Vous allez vous retrouver avec je ne sais pas combien d'articles...Je ne sais pas combien d'images dans vos dossiers.Quelqu'un ?Oui, Caroline.Peux-tu juste montrer d'où vient le user ?
00:05:26 :Le modèle de user ?Il est là.Tu vois ?Mais le get user model, c'est quelque chose qui a été écrit dans un autre...
00:05:34 :Oui.Alors, en fait, ça vient...C'est interne à Django.Ça fait partie du framework Django.Ah, OK.En fait, ce qu'il fait, quand tu regardes, quand tu rentres...
00:05:48 :On peut toujours rentrer dans le détail du code.Quand j'ai commencé Django à l'époque, je faisais beaucoup çapour comprendre un peu ce qu'il se faisait.
00:05:54 :En fait, lui, il va chercher le hot user models'il y a cette constante qui est définie dans les settings.Moi, là, je ne l'ai pas définie parce que j'utilise le modèle user Django de base.
00:06:08 :Du coup...Il crée une table de users ?Non, elle est déjà créée avec Django.OK.Je me suis mal exprimé.Je n'ai pas redéfinie cette constante-là.
00:06:20 :Du coup, il va prendre la valeur par défaut qui est le modèle Django de base.OK.Donc, nos auteurs sont considérés comme étant des utilisateurs.
00:06:28 :Oui, c'est ça.C'est le modèle utilisateur.OK.C'est beau.C'est intégré à Django, en fait.Merci.C'est normal.Moi, j'aime bien faire ça parce que c'est assez propre de faire comme çaparce qu'en fait, tu n'as pas de risque.
00:06:42 :En fait, ça va forcément chercher ton modèle utilisateur.Je ne l'appelle jamais dans le dur.Je prends toujours la fonction qui est ici.Comme ça, c'est une habitude et au moins, il n'y a pas de problème.
00:06:52 :Les images, on va voir pourquoi.Je mets exprès une image parce qu'on va faire du factory boy,mais on va aussi montrer une technique avec les images dans les testsqui peut être assez sympathique.
00:07:02 :On va mettre un titre.Du coup, ça va être un Kerfil ici.Voilà.On va mettre un MaxLen.On m'a parlé ou pas ?Oui.
00:07:14 :Oui.J'ai l'idée.Tu m'entends ?Ouais, vas-y.Vas-y, tu entends ?Oui, je disais, avec la façon d'importer les users,il n'y a pas moyen de les personnaliser.
00:07:30 :Il n'y a pas quoi, t'as dit ?Le moyen de les personnaliser et changer,d'ajouter des champs ou de les personnaliser d'une autre manière.Vous voyez sur mon écran, là ?
00:07:43 :Là, vous voyez bien mon écran ?Oui, l'écran, je vois.Oui.Alors, regarde.Parce que toi, tu demandes, c'est ça ?Oui, c'est ça.Oui.
00:07:55 :Alors, regarde.Parce que toi, tu demandes si on peut rajouter des champs sur le modèle utilisateur, tout ça.Avec la façon dont tu as importé.
00:08:03 :Ah ben, en fait, là, je ne fais juste importer le modèle utilisateur de mon projet.Donc, par exemple, sur ce projet-là, ici,j'ai un modèle utilisateur customisé.
00:08:15 :Il n'est pas beaucoup customisé parce que je n'ai pas rajouté de champs,mais j'ai prévu de rajouter des champs.J'ai quand même fait un modèle custom qui hérite de l'abstract user.
00:08:25 :Et, en fait, dans les settings, ici.Alors, ne faites pas gaffe.Moi, j'ai plusieurs faits de settings.C'est normal.Dans les settings, j'ai tout en bas, je crois.
00:08:38 :Je l'ai mis tout en bas.Il est où ?Voilà.J'ai redéfini, ici, cette constante-là.Et cette constante-là, en fait, ça va pointer vers l'application account et le custom user.
00:08:50 :Donc, si on regarde bien, j'avais bien l'application account, modèle, custom user.Et donc, je lui dis, en gros, le projet, maintenant, c'est ce modèle utilisateur-là.
00:09:02 :Donc, comme ce qu'on fait tout à l'heure, ici, quand on regarde.Ça, c'est simple à comprendre.Quand tu lui dis settings.outUserModel, ici.Eh bien, en fait, lui, tu lui dis d'aller chercher ce qu'il y a, ce qu'il y a, ce qu'il y a, ce qu'il y a.
00:09:19 :Je ne sais plus.Ce qu'il y a là.Voilà.Est-ce que c'est bon ou pas ?Ah ouais, je comprends.Je comprends.Mais là, je pensais qu'il y avait pour importer l'utilisateur comme ça.
00:09:31 :Faut seulement utiliser là-bas les users par défaut de Django.Là, je comprends mieux.Non, non, non, non, non.Non, non, non.Et ouais, au début, c'est un peu l'embrouille.
00:09:43 :Donc, on va finir rapidement notre...On ne va pas remettre trop de champs.On va mettre un champ, du coup, une relation.On va avoir, du coup, ici, une foreign key.
00:09:52 :On va pointer vers l'auteur.Et on va...Pareil, des lettres, on ne va pas s'embêter.Le but, ce n'est pas de faire des modèles.On ne va en faire que deux.
00:10:02 :Hop, cascade.Et je voulais rajouter un champ ou deux.Ou alors, on va en rajouter un qui peut être intéressant.Published at...Donc, on va mettre un...
00:10:16 :Qu'est-ce qu'il s'appelle ?Un...DateTimeFill.Voilà.On va dire ici, auto no add through.Donc, ça, ça veut dire que dès que le modèle est sauvegardé en base de données,ce champ-là, je ne vais même pas le remplir.
00:10:31 :Il va automatiquement se renseigner à la date de création.Ensuite, on va se mettre un...IsPublished, ici.Donc, on va se faire un...GoldenField.Là, à défaut, on va mettre...
00:10:48 :Non, à défaut, on va mettre false.Et je pense qu'on a assez de matière.On va se mettre un dernier.Avec des...Avec un integerField.
00:10:59 :Voilà, allez.Un positive integerField.IntegerField.Voilà, ça me paraît pas mal.Et à défaut...Défaut, on va le...Est-ce que c'est slang ?Oui.Ça veut dire quoi, slang ?
00:11:12 :T'es où ?Slang, le troisième.Ah !OK.Tu vois sur mon écran.Par exemple, je vais être sur mon dernier article.Le slug, c'est ça.
00:11:25 :C'est dans l'adresse, en fait, dans l'URL.Toi, c'est le...C'est cette partie textuelle de l'URL.OK ?Donc, ça veut dire que...Imagine, tu vas créer un article.
00:11:39 :Tu vas l'appeler, je ne sais pas,les bases de pitons.En slug, tu vas mettreles-bases-de-pitons.Ah, OK.Et c'est ce qui apparaîtra là,tu vois, dans la barre d'adresse ici.
00:11:50 :OK.Alors que le titre, ça va êtreles bases de pitons sans tirer, genre.Ben, tu...Ouais, en fait,t'as une fonction avec Djangoqui permet de slugifier, en fait,automatiquement.
00:12:00 :En gros, slug, à la limite,toi, tu le remplis jamais.Mais tu peux faire en sortequ'il crée un slug en fonction de ton titre.
00:12:06 :Et il va le créer tout seul.Oui.Il y a une fonction.Je te la montrerai, si tu veux.C'est rapide.Parfait, merci.Je te montrerai ça.
00:12:13 :Euh, voilà.Je ne fais pas de propriété.Ah, ben, allez.Tant qu'on y est,on va faire un test là-dessus.OK.On va faire une propriété.
00:12:22 :Très rapide, hein.On va récupérer le tempsque met à lire un article,un temps estimé, hein.Alors, j'avais lu,je me suis fait renseigner là-dessus.
00:12:30 :Donc, if not self, point,minus, point, content.Voilà.S'il n'y a pas de contenu dans l'article,eh ben, en fond, zéro.En gros, le but, c'est de direle nombre de mots,ça va être,en gros, la longueur de la listequi va être retournée parcontent, point, split.
00:12:51 :OK.Parce que si ça va retourner une listeavec tous les mots de l'article,on va compter combien il y a de mots.Et on va dire,on va retourner ici, words.
00:13:00 :Hop.Et en gros, il y a à peu près,je ne sais plus,c'est une minute pour 200 mots,je crois, un truc dans le genre.
00:13:08 :Donc, voilà, on fait un calcul rapide.Bon, je ne sais pas si c'est exactement ça,mais pour l'exemple, ça sera ça.Voilà.Donc là, on a un modèle,deux modèles très basiquesqui vont nous permettre de travaillerjustement avec Factory Boy.
00:13:20 :Alors, c'est parti.On va se faire l'émigration.Make me a chance.J'ai cru qu'il allait me dire« erreur », mais peut-être pas.S'il vous plaît.
00:13:31 :Hop.Lumière, lumière.Tac.Donc là, on a émigré.On va se faire aussi un...un super utilisateur.J'aurais pu le préparer avant, ça, d'ailleurs.Je crois que je le fasse après une fois.
00:13:44 :Hop.Je vais m'adresser à Electronique Bitcoin.Electronique Bitcoin.Quelqu'un a une question?Non?Oui.Encore moi.Vas-y, vas-y, vas-y.Dans GetTime, que tu viens d'écrire,les deux « slash », c'était quoi?
00:14:03 :Non, attends.Hop là.Tu as dit quoi?Dans GetTime, que tu viens d'écrire,les deux « slash ».Ok.« Slash, slash », deux « slash ».
00:14:14 :Excuse-moi, excuse-moi.Regarde.Si tu fais, par exemple,3 divisé par 2.Oui.C'est 1,5.Ok.C'est un modulo?Non, c'est une division.Et là, en fait, ça me retourne, en fait,la partie...
00:14:31 :Ah, la partie entière.Ok?Ok.Voilà.Tout simplement.Ok.Merci.Ok.Mais t'as raison.Parce que reste pas sur des bloquissages,des trucs comme ça,parce qu'après, si...
00:14:43 :si ça te travaille,pose la question maintenant, c'est mieux.T'as raison.Maintenant, je serais pour qu'on fasse un...Ouais, on va faire ça,parce qu'on fera un test de vue.
00:14:56 :J'ai un truc très intéressant à vous montrer avec...Ouais, on va peut-être durer un peu plus longtemps que prévu,comme d'hab',mais je vais vous montrer un truc intéressant avec Factory Boy.
00:15:04 :On va se créer un dossier de template, ici.On va l'appeler « article.html ».Voilà.Euh...Et on va s'écrire, du coup, un template tout bidon.
00:15:18 :« html ».Alors, qu'est-ce qu'il me propose?Euh...Article, ok.« For article in article », ok.Donc, j'appelle le contexte « article ».On avait bien un titre.
00:15:31 :On avait un contenu.Donc, ça ira.Ok.Ça devra aller.Alors, on va se créer une vue.On va se faire juste une vue simplequi nous permettra, en fait, de...
00:15:43 :de faire un test simple pour les vues.C'est parti.Donc, on va avoir besoin de quoi?On va avoir besoin d'une vue générique.Tout le monde les connaît, les vues génériques, ou pas?
00:15:55 :Oui.Pas.Pas non.Ok.Tu as commencé le Django, Caroline?Oui.J'en suis encore dans la formation de Thibault.Ok.En fait,souvent, tu écris des vues...
00:16:13 :Tu vas écrire tes vues en fonction,peu importe.Tu les déclasses avec des mixins.Mais il faut savoir que tu as des vuesqui sont déjà toutes faites avec Django.
00:16:20 :Et ça, c'est balèze.Par exemple...Par exemple...C'est bien.Comme ça, ça fait une partie...Débutons aussi.On va montrer des choses de base.Par exemple, on va créer une vue.
00:16:29 :ListArticleView.On va l'arrêterde la ListView.Et là, on va dire...Eh bien, on va utiliser le modèleArticle.Ok.On va dire que le template utilisé,ça va être...
00:16:45 :Je l'ai appelé comment?Donc, il est dans...C'est dans Blog.Et je l'ai appeléArticle.Article.HTML.New Folder.Hop.Voilà.Parce que Django, lui, dans les applications,il reconnaît à partir de templates.
00:17:06 :Quand il y a des templates HTML.Oui, oui.Ok.Ok, c'est bon.Donc, voilà.Et puis, on va mettrele contexte ObjectName.Ici, on va dire,ça va êtreArticle.
00:17:18 :Pourquoi je dis ça?Parce qu'ici...Je suis un boulet.Parce qu'ici, on ditArticle.Ok.Sinon, ça seraitObject,ou je ne sais plus,un truc dans le genre.
00:17:29 :Je vais le refaire toujours.Donc là, c'est bienArticle.On va...Ce qu'on va faire...Avant ça,on va aller...On va aller...Il y a Article.
00:17:46 :Il y a Autor.Ici.Tac.Et comme ça, on va pouvoirles utiliser dans l'illustration.Donc, admin.site.register.Hop.Tac, tac.Hop.Et Article.Ok, c'est parti.
00:18:06 :On va commencerà se lancer un peusur du Factory Boy.On va passer 5 minutes,je pense.Allez.Tac.On va sur l'admin.Tac.
00:18:23 :Ok.Il y a moi.Alors, on va...Un auteur.Donc, on va en créer un.Hop.De base.Hop.J'ai la flemme.Voilà.Ça, c'est un super auteur.
00:18:35 :Maintenant, en article.On va en créer un bidon aussi.Je n'ai pas d'image.La flemme.On va mettre, genre,super article.Le slug, on va mettre,par exemple, super article.
00:18:45 :On vient que moi,je fais en sorte qu'il soitrempli automatiquement.Un super contenu.Voilà.L'auteur, ça va être lui.Publier, non.Je n'ai pas envie d'enregistrer.
00:18:56 :Et forcément,j'ai oublié de faireun truc très important.C'est que...Il n'y a pas d'URL.Il n'y a pas d'URL.Donc,from blog...Non, pas bleach.
00:19:09 :.views.C'était...C'était ça ?Je l'ai appelé comme ça ?OK.OK.Donc, c'est ça.Et ici, du coup,on va se faire une vue.
00:19:26 :Ça va être notre page...Ouais.On va se faire une...Hop.OK.On appelle une méthodeparce que c'est une classe.Ici, et en nom,on va mettre...
00:19:38 :Voilà.Je n'ai pas à réfléchir.L'article, c'est très bien.OK.Donc, maintenant,est-ce que j'ai un bug ou une erreur ?Effectivement.Ah oui, forcément.
00:19:50 :Mais ça, je m'en fiche.Donc, je vais l'effacer.Je vais l'effacer.Hop.Lui, il me cherche une URLpour cet article,mais je n'en ai pas créé de vue.
00:19:58 :Hop.Voilà.Donc, bon,je n'ai pas de lienparce qu'il n'existe pas vraiment.Mais voilà.Donc, on a bien notre archivequi s'affiche.Donc, on a une vue qui fonctionne.
00:20:08 :Déjà, c'est bien.Maintenant,on va s'attaquer à...On aura plus besoin d'un navigateur.À Factory Boy.C'est complètement documenté.Vous avez de quoi fairesi vous voulez aller voiraprès la documentation.
00:20:28 :Mais en gros,nous, on va s'intéresser...On va aller créer déjà des factories.Et vous allez voirque c'est très, très sympa.Donc, en fait,moi, comment je fais,c'est que dans chaque application,ici, je crée un fichier.
00:20:42 :Un fichier.Hop.Factory.Donc, en fait,je vais avoir les factoriesqui correspondent au modèlede mon application en cours.Donc, là, par exemple,on va dire...
00:20:58 :Enfin, on va importer déjàun factory.Un factory.Est-ce que vous connaissez, vous,Faker ?Ou pas du tout ?Non.Pas du tout.Il en parle ?
00:21:13 :Oui, il en parle.Il en parle.Parce que, en fait,quand vous installez Factory Boy,il y a Faker installé avec.Vous allez voir pourquoi.
00:21:21 :Je vais vous montrer directementune version avec Faker,en fait.Après, vous pourrez l'utiliser,mais on va partir là-dessus.Je ne vais pas vous refairel'explication de la doc.
00:21:30 :Là, justement,on va partir directementavec Faker.Du coup, ce qu'on va faire,c'est qu'on va...Comme tout à l'heure,on va...Django.contrib.On va en avoir besoin.
00:21:42 :.host.Ici, on va importer...Euh, si, si,je vais en avoir besoin.Euh, si, si,ben oui, forcément,je vais avoir besoinde créer l'utilisateur.
00:21:52 :Et on va...importer les modèles.On avait dit quoihauteur et...Particle, c'est ça.Hop là.Il y en a dix.User.Non, c'est pas ça.
00:22:06 :Ah oui, forcément.Voilà.Voilà.OK.Donc là, le modélisateur,il est prêt aussi.Donc maintenant,en gros, le but,c'est de pouvoir, du coup,créer,de se faire des usinespour nos modèles.
00:22:23 :Donc, on va d'abordfaire une pournotre utilisateur.Donc,on va faire une user factory.Et en fait, ça va...Donc, ça marche très bienavec Django.
00:22:33 :C'est pas spécifique à Django,mais ça marche super bienavec Django.Parce qu'il y a,vous voyez,ce qu'il faut, factory,.django,.django,modèle factory.
00:22:42 :Donc, en fait,ils ont vraiment prévuavec Django,et je pense que c'estbeaucoup, beaucoup utiliséavec Django,comme les librairies.Et vous allez voirque c'est très facile.
00:22:51 :On va dire le modèle,ça va être...User.User.Ici.Et l'utilisateur,il a quoi en champ à Django ?Donc là, c'est le modèle de base.
00:22:59 :Donc, pour ceux qui ne savent pas encore,au-delà du firstnameet du lastname,il y ale username.OK.Et on peut direfactory.faker.Faker.
00:23:12 :Ici.On tire la classe fakeret on va lui direqu'il faut...D'accord,ce qui me fait...Je vais cliquer quelque part.Hop là.User.
00:23:21 :C'est username,je crois comme ça.Donc en fait,ça va direà Faker,génère-moi un username.Voilà, aléatoire.Ensuite,email.Ça va être égal àfactory.faker.
00:23:36 :Et là, ça va êtreemail.Ensuite, on va avoir le...Ils ont même prévupour les passwords.C'est factory.Non, je suis en colère là,c'est parce que je faisFaker.
00:23:52 :Tac.Et on va direpassword.Non, non, non, je travaille,s'il te plaît.Excusez-moi, attendez.Excusez-moi, je m'appuie,attendez 30 secondes.Excusez-moi.Tac.Je suis là.
00:24:16 :Donc,hop là.Donc là,j'ai...Du coup, je me suis carré tout seul.Je disais quoi ?J'étais sur mon modèle...J'étais sur ma factory, du coup,d'utilisateur.
00:24:32 :Donc vous allez voir.Je vais vous montrer maintenantcomment ça fonctionne.On va utiliser le shell de Django.Donc là,on peut direfrom...C'est quoi ce blog ?
00:24:44 :From factory.Non, on va...Ouais.Si, si, on fait factory,on fait comme ça.On va importerl'useur.J'ai fait une erreur.Factory, non.C'est l'useur factory.
00:25:03 :Non, ouais.Non, c'est bon.OK.Alors,pourquoi je dis que c'est très simple ?Parce quevous allez avoir plus intérêt pour les tests.Imaginez que là,je me dis l'utilisateur,ça va être égal àl'useur factory.
00:25:18 :Factory.OK.Donc là,quand vous faites un utilisateur,en général,vous allez remplir les champs.On crée une instancequi va remplir les champsusername, password,ainsi de suite.
00:25:30 :Maintenant, si je fais ça,voilà,on voit qu'il s'appelle en usernamemichelgraveu.email.Je vois qu'il a un email.Donc en fait,là, j'ai crééun utilisateur,mais genre sansrien remplir,juste avec ma fabrique.
00:25:44 :Et si jamaisje refais par exempleu2qui est égal àuser factory.OK.Eh bien,il va être différent.Voilà.Donc lui,il s'appelle Jason Marshall.
00:25:57 :Donc,alors,oui,juste le problème,enfin le problème,je vais vous montrer quelque choseau passage.Ce n'est pas un problème.Il faut savoir que ça fait ça.
00:26:08 :J'aurais dû rester ici.Vous allez voir tout l'intérêtaprès.Pour l'instant,on n'est pas encoredans les tests.Le problème,c'est que si je vaisdans l'admin,logiquement,voilà,il me les a créés.
00:26:23 :Il me les a créés.Donc,ça ne peut pas être forcémentun problème,sauf si vous voulez des donnéesde test comme ça dans la base.
00:26:29 :Ce n'est pas un problème,c'est le but recherché.Mais moi aussi,je ne veux pas forcément avoir ça.Donc,je n'aurais pas dû le fairedans le shell,mais je le fais,ce n'est pas très graved'avoir des utilisateurs.
00:26:39 :Mais il faut savoirque vous pouvez créerdes instances,en fait.Je ne vais pas prévenirde le montrer,je ne sais plus.Il y a un moyen de créer.
00:26:48 :Il y a un moyen de créer.Je lis juste unOh no, new insert.Ouais,mais...Je te recherche ?Non, ce n'est pas ça.
00:27:01 :Non,en fait,tu as un moyen d'utiliserune méthode sur ta factory.Donc,tu vas créer l'objet en mémoire,mais tu ne vas pasle sauvegarder en base.
00:27:09 :Je ne sais plus.Après,je ne voulais pas vous le montrerce soir de toute façon.Je vais avancermais en gros,juste pour vous direque si vous le faites comme ça,à l'arrache,ça vous créevos utilisateurscomme ça en base.
00:27:21 :Donc,vous voyez,c'est très très rapide.Une fois que vous avez créévotre factory,après,ça envoie la voléecomme ça.Donc,ça peut être voulu.
00:27:31 :Vous pourrez très bienavoir une enviede faire ça.Si,par exemple,je vous montre...Ah ouais,ça va être rigolo.Allez,je vais vous montrerquelque chosed'encore plus cool.
00:27:43 :Je vais vous montrer.Ok.Alors,que je me souvienne,en gros,il est possibleavec,je vous explique rapidement,avec Factory Boyde créer,en fait,beaucoupde donnéesd'un coup.
00:28:07 :Normalement,on peut utiliserdirectement...Alors,je trouve mon...C'était Create.Il n'y a pas un Batch.On va essayer.On va se dire...On va repartir là-dessus.
00:28:20 :Être égal àUser Factory.Et là,normalement,on peut faireun Create.Comme ça,si vous voulezdonner un test,ça peut vous aiderpour un Create Batch.
00:28:32 :Je ne sais pas...Bon,allez,on va faire des fous.Je ne sais passi ça va passer.Alors,ce n'est pas Create.Je ne sais plus.
00:28:44 :Create.Je le ferai après.J'ai prévu de vous le montrer après.J'irai sur la doc après,peut-être.Ah,bonne question.Peut-être que je peux le faireen...
00:29:00 :Ben non,oui.Est-ce qu'il ne faut pasdirectement...Non,sur la classe,ça me parait bizarre.Create.Batch.Comme ça.OK,ça a marché.C'est ça.
00:29:16 :Je vais l'appeler sur la classe.Donc là,vous voyez,j'ai créé 100 utilisateursd'un coup.Et donc là,si je repars ici,je n'ai pas d'utilisateurs.
00:29:28 :Donc,vous voyez,si vous avez besoind'avoir des données testpour votre application,là,je vous ai donné un moyenen partie de faire çatrès rapidement.
00:29:38 :Là,j'ai créé du monde,beaucoup de monde.Donc,c'est possiblede factorise.Maintenant,je vais vous montrer aussipour les tests,surtout.Moi,ce qui m'intéressait,c'est çaet sur les relations étrangères.
00:29:52 :Du coup,j'en étais où ?Factorise.Alors,OK,on a l'user factorise.Donc,on avaitla classeAutor.Ici,je fais ça.Factorise.Ici.Et on va se dire,c'est pareil,ça va êtreFactory.
00:30:10 :DjangoModel Factory.Hop,et ça,c'est comme tout à l'heure,on va se dire,classe Meta,on va aller rapidement.Metaégalemince.Voilà.Et donc,on avait plusieurs champs.
00:30:24 :On avaitun champ Userparce qu'on avait une floor NK.OK,vous vous souvenez ?Je le remets là,si vous voulez.Hop,on avait iciUser,1 to 1Ksur utilisateur.
00:30:36 :TextFieldet BurstDate.Donc là,en fait,ce qui est pratique,c'est que Django Factorypeut gérer ce cas-là.En fait,on peut lui direFactory.
00:30:47 :SubFactoryet il va aller nous gérer,en fait,avec l'User Factory.Donc là,maintenant,si on a besoin de ça,il va aller utilisercette Factory-làpour créer automatiquementune instance User.
00:30:59 :Voilà.Donc,imaginons un des projets,vous avez plusieurs clés étrangères,vous gagnez un temps fou comme ça,vous créez des Factoryqui appellent d'autres Factory.
00:31:08 :Donc,on va continuer.Pour la bio,on va se direFactory.Fakeret après,on va passer au test comme ça.Donc là,ça va être du texte.
00:31:19 :On avait un champBurstDate.Hop,on va direFactory.Faker.Fakeret ici,c'était,je crois que c'est dateavec Faker,c'est DateOfBirth.
00:31:37 :Voilà.De toute façon,si je me gourre,il me relèvera une erreur.Et le dernier modèle,hop,on va avoir ici,et là,vous allez voirc'est la puissance du truc,Factory.
00:31:49 :Voilà.Et donc,c'est pareil,ici,on vahériterde notreDjangoModelsFactory.Toujours pareil,une classe méta,le modèle,l'articleet ici,ça vous le dira mêmesi vous voulezdes fichiers médias.
00:32:07 :Donc,par exemple,une image,vous pouvez très bien direFactory.Alors,c'est dans le Django.ImagesField.Et en fait,ça va vous gérer les images tout seul.
00:32:18 :Donc,vous pouvez dire,je ne sais pas,mettre,je crois,une couleur,un truc comme ça,mettre une image bleue,on peut direla largeur,la hauteur,donc,je ne sais pas,imaginez 800.
00:32:32 :On peut même lui donner un nomsi on veut.Voilà.C'est vraiment customisable.C'est vraiment paramétable,plutôt.C'est mieux.Et encore mieux,on peut dire,le format,ça va être quoi ?
00:32:44 :Eh bien,du JPEG.OK.Donc,voilà,je trouve ça vraiment balèze.Et là,c'est pareil,on va dire,l'hauteur,ça va être quoi ?Donc,une Factory,une subFactory,ici,qui va être,en fait,ça sera Factory.
00:33:02 :Et donc,vous voyez,derrière ça,entre vos modèles qui tournent,vous allez avoirtoutes vos Factoryqui vont être reliéesentre elles.Et vous pourrez créerfacilement un article,comme ça,en appelant l'article Factory.
00:33:14 :Et hop,ça va vous créertout ce qu'il faut derrière.Donc là,j'ai l'hauteur.Je finis juste,je mets les trois derniers champsqui doivent manquer.
00:33:22 :Factory,point,Faker,je vais aller plus vite.C'est une phrase,je ne sais plus,une centaine,c'est une phrasequ'on peut mettre.C'est un titre,c'est ça.
00:33:33 :Alors,au cas où,je ne sais pas si vous savez ou pas,ici,on pourrait être,je crois qu'on peut dire ça.Ouais,je crois qu'on peut faire ça.
00:33:43 :Avec Faker,on peut faire ça,dire le nombre de mots,par exemple.On pourrait très bien dire,si on veut que ça soit en français aussi,aucun problème.
00:33:50 :Le Slug,c'est pareil,on va se faire un petit coupde Faker.Hop,on va mettreque c'est un Slug,tout simplement.Et une phrase.
00:33:59 :Une phrase qui manque rien.Une sentence qui manque rien.Merci.Cool.J'ai l'impression que j'aurais eu un buget ça m'aurait saoulé.Je l'aurais peut-être trop vite fait,mais c'est toujours bien de les voir avant.
00:34:12 :Merci beaucoup.Ici,on va mettre quoi ?Du texte.Du texte.Et on peut préciser ici.Alors,pareil,si on a une méthodequi nous permet de créer des,de compter,en fait,le temps de lecture.
00:34:26 :Donc,il y a max,je crois que c'estle nombre de caractères,il me semble.On va mettre10 000.Voilà.Et,pour finir,View.
00:34:38 :Count,ici.Voilà.Et on va dire que ça va être unRandomInt.Et,pour la petite info,ici,vous pouvez faire pareil.On peut dire très bien,très bien dire que c'est minimum 0,maximum,je sais pas,est égal à10 000.
00:34:59 :Voilà.Voilà,on a créé des Factories,mais là,au moins,on a créé 3 Factories complètesqui sont reliées entre elles,avec des Sous-Factories,ici.
00:35:08 :Et on a utilisé Faker.Maintenant,là,là,là,là,là,où c'est intéressant,ça va être dans les tests.Il est quelle heure ?OK.
00:35:19 :Est-ce quejusqu'à 21h50,22h,c'est trop tard pour vous,ça va aller ?Dites-moi,je vais dans le chat,si vous voulez,mais...Pour moi,ça va aller.
00:35:30 :Oui,c'est bien.OK.OK, OK.Parce que du coup,on va faire le plus intéressant,on a commencé là avec les Factories,mais ça va être dans les tests.
00:35:38 :Dans les tests,c'est très,très utilisé.J'ai pas l'impressionque ce soit ultra connu,Factory Boy,mais je trouve ça vraimenttrop,trop bien.Alors,on va installer,parce que,vous savez,je sais pas,moi,mes tests,je les fais toujours avec PyTest et Django,pas avec Unitest,voilà,
00:35:57 :avec PyTest et Django.Et pour initier,du coup,on va,pour initier,pour configurer,c'est PyTest.On initie.Voilà.OK.Donc là,je sais pas si vous avez l'actualitéavec Django ou pas.
00:36:15 :Avec PyTest.Tac.Et on va dire,Python Files.Qu'est-ce qu'il me propose ?Test.Test.Ouais,on va faire avec ça,c'est bien.Tac.OK.
00:36:34 :On a un fichier de init qui est ici.Maintenant,on vase créer un dossier test.Alors,on a un dossier test.Dedans,on va pas faire grand-chose,on va juste créer trois fichiers.
00:36:48 :On va créerle package.Ici,là.On va se créer un fichierqu'on va appelerconf test.Ça,ça va être les fixtures.Pour ceux qui avaient vu le mentorat sur lesPyTest,je pense que ça vous rappelle quelque chose.
00:37:10 :Ou ceux qui l'utilisent,de toute façon.Les tests.C'est un four to test all.C'est tous les tests.Voilà.Donc,voilà.Alors,je commence par quoi ?
00:37:22 :Est-ce qu'on va se faire un petit testpour commencer ?Non,on va commencer gentiment.Ouais,on va commencer par ça.Donc,je viens dans le chat.
00:37:34 :Je disais du coup,il y a des messages,je n'ai pas vu.Je n'ai pas vu,c'était quand même tout à l'heure.PyTest,ça va pour tout le monde ou pas ?
00:37:43 :Oui.Génial.Cool.OK.Donc,on va importerdu coup,PyTest.On va,on va s'apporter quoi ?OK,on va,j'hésite.Ouais,si,on va faire comme ça.
00:38:09 :Hop,on va importer nos factories.Donc,on va avoirles Artfactories.C'était comment ?C'était Artfactories,ça.Et,Artifactories.Voilà.On va partir sur une première fixture.
00:38:22 :Pas la plus intéressante,mais une première fixture de base.PyTest.Fixture,ici.Voilà.Def.On va l'appeler utilisateur.C'est un utilisateur.Et donc là,hop,qu'est-ce que je peux faire ?
00:38:39 :Eh bien,on va dire Artfactories,boum.Et,on va retournernotre utilisateur.Voilà.Donc là,on a créé du coupun utilisateursans avoir à besoinde se taper tous les champs.
00:38:51 :Il est créé.Donc,si je reviensdans le test,ici,euh,ok.J'ai du mal.PyTest.Hop.Euh,je vais les importer maintenant.J'aurai besoin de plusieurs choses.
00:39:04 :On va importer le Django.On va tester la vue.Donc,je me prévois maintenant.On va importer Reverse.Et,comme tout à l'heure,on va se prévoir Django.
00:39:12 :Mince.Donc,on va testerla vue.Donc,je me prévois maintenant.On va importer Reverse.Et,comme tout à l'heure,c'est quoi Reverse ?C'est pour les URL.
00:39:25 :Je vais te montrer juste après.T'as quel code,tu vas comprendre.Tu vas voir.C'est super pratique.Tu vas voir.Mince.On importele GetUserModel.
00:39:35 :Alors,importez-moi trois foisdans le projet,celui-là.Euh,ok.Allez,c'est parti.On va se faire un premier testbasique.Hop.Donc,vitest.marque.djangodb.
00:39:56 :Ok.Alors,euh,on va faire un test bidon.On va utiliser,on va tester la fixtureen elle-même,en fait.Comment dire ?On va utiliser la fixture Userqu'on a créée ici.
00:40:07 :Et là,vous allez voir,comme ça,euh,on va faire un assert.On va se direuser.object.all.Hop.Pour un count,ici,count.
00:40:21 :Et on va voir si mon test,il passe.C'est juste pour faire un test basique.Je n'ai pas un problème de,ok, voilà.Donc, en gros,vous voyez que là,ça me dit,il est bien d'accord pour direque dans la base donnée,il y a un utilisateur.
00:40:35 :Ok ?Parce que j'utilise un,ma fixture qui est ici,donc il y a un utilisateur.Donc, vous voyez que là,j'ai bien créé un utilisateurqui est,qui fonctionne,c'est fonctionnel.
00:40:45 :J'ai un utilisateur.Et j'ai rien,ici,j'ai rien à écrire.J'ai ma factory qui est faite d'avance.Maintenant,je n'ai plus rien à écrire.Maintenant,euh,ce qu'on va faire,c'est qu'on vase créer,ouais,on va faire exprès de,de tomber dans un petit piège,voilà.
00:41:03 :On va se créer deuxautres features.Allez.Ouais,on va faire ça.Hop.On va se faire ça.Et on a une qu'on va appeler,euh,def,article,ici.
00:41:15 :Il peut être votre article,voilà.Et on va se dire,euh,ben l'article,ça va être,euh,son grande surprise,la factory article.Et on retourne l'article.
00:41:27 :OK.Ensuite,on pourrait très bien aussi,je vous le mets pour,ouais,on utilisera après,mais on peut très bien faire ça aussi.Ça peut être pratique aussi,c'est-à-dire,euh,une fixture.
00:41:38 :On va appeler ici,on va l'appeler article,factory.On va voir comment l'utiliser après,mais,et en fait,on peut très bien,euh,retourner juste,la factory article.
00:41:49 :Et en fait,dans les tests,comme ça,vous avez juste à,à mettre dans,votre fixture,et puis vous avez juste à faire,article, factory,euh,entre parenthèses,ça vous crée des objets dans les tests.
00:42:00 :Voilà.Vous pouvez faire ça aussi.Euh,mais bon,là on va,euh,on va se faire un petit,on va se faire un test assez,assez,assez cool.
00:42:10 :Euh,on va se faire un test assez cool,où on va,bon,en fait,le get read time,j'aurais même pas besoin de le tester,on s'en fiche,on va passer directement sur internet,le test de la vue.
00:42:21 :Ok.Donc,imaginez,on va avoir,euh,marqué,point,Django DB,ici,voilà.Euh,on va tester,donc,la,là,l'article,vivre.Donc là,Caroline,par rapport à temps reverse,tu vas voir ce que je vais,je vais vous montrer.
00:42:43 :Donc,on va importer la fixture client,que je n'ai pas créé,mais qui est disponible,euh,built-in,en fait,avec PyTestDjango,et ma fixture,article factory.
00:42:53 :Bon,du coup,je ne vais pas utiliser,euh,celle-ci,mais,euh,voilà.Sinon,là,je crée un article rapidement,mais on peut très bien créer,ici,une article factory en fixture.
00:43:07 :Et en gros,ce qu'on va faire,on va se dire,imaginez,pareil,si vous avez besoin de beaucoup de,je ne sais pas,dans votre test,beaucoup de données,et bien,on pourrait très bien dire,euh,on pourrait très bien dire,euh,allez,article factory,voilà,point,euh,comment ça s'appelle,
00:43:27 :comme j'ai fait tout à l'heure,voilà,et comme ça,on se dit,ben,on aura au moins 50 articles à tester,voilà.Et ici,on va se dire,hop là,on va se dire,on va aller faire une get,sur notre vue.
00:43:40 :Alors,en gros,le reverse,je suis où ?L'URL,elle est là.Ma vue,elle s'appelle,listarticleview,l'URL,elle est là,et elle s'appelle article A1S,hein.
00:43:53 :Donc,dans reverse,ce que je peux faire,c'est,article A1S.En fait,ça va aller me,me construire mon URL,comme ça.Je n'ai pas à taper le,le chemin de l'URL,en fait.
00:44:05 :Je mets juste le nom.Ce qui est très bien,parce que,vous savez sans doute,mais,toi Caroline,tu commences,par exemple.Imagine demain,tu es amené à changer,je ne sais pas,ton URL.
00:44:17 :Si tu l'avais tapé dans le dur,et bien,tout casserait,que là,en fait,elle passera toujours,puisque tu passes par le nom ici.C'est dynamique,quoi.
00:44:26 :Voilà.C'est bon ou pas ?Euh,oui.OK.Je ne sais pas si,euh,bon,je pense que du coup,c'est bon.Euh,OK.Du coup,ce qu'on va faire,on va se dire,donc,on va tester la,mince,on va voir s'il n'y a pas de bug,de toute façon,
00:44:46 :on va se tester la réponse.Et là,vous verrez,j'ai créé un truc pas cool,volontairement.Euh,voilà,et on va se dire,euh,article,mince.
00:44:57 :On va se dire quoi ?Euh,article,non.Qui est où ?Ah,euh,je vais l'importer le modèle,ce sera mieux.Fromblogpointmodèle,on importearticle,ici,voilà.
00:45:15 :Hop,on va se dire,point all,pointcount,oh là,oh non,qu'est-ce que je fais ?Point count,ça part en vrille.Euh,et on va se dire,euh,bah,j'ai créé combien là ?
00:45:32 :50 ?Allez,on va en créer 100.Comme ça,je vais me créer un petit bug,euh,hop là.Donc là,je vais exécuter mon test,si ça passe,et je vais vous montrer quelque chose.
00:45:43 :Mince,j'ai fait un truc qui n'est pas cool.Hop là,qu'est-ce que j'ai fait ?Euh,c'est ouf.Ah,j'ai fait un truc,euh,c'est au niveau de ma size.
00:45:56 :C'est mon factory qui va pas ?Euh,pourtant,il me paraît pas trop mal,euh,qu'est-ce qu'il y a ?Factories ?Il me paraît pas trop mal.
00:46:08 :Ah,non,ok,je les ai mis en,bah non,oui,je les ai mis en,en chaîne de caractère,c'est de l'entier,c'est pour ça qu'il me ressort en erreur.
00:46:18 :Ok.Je pense.Ok,on va relancer le test.Est-ce qu'on a une autre erreur ?Ok,donc là,j'ai créé mon test,mais j'ai lancé mes tests.
00:46:30 :Euh,bon,déjà,ici,on a une centaine de données de testsdans le test.Euh,si on a besoin,on peut aller créer des contests,euh,ici,directement,sans avoir tout à,tous les choix à définir.
00:46:46 :Donc,c'est un temps de gagner.Est-ce que,pour l'instant,ça va ?Et est-ce que vous êtes d'accord avec moi ?Est-ce que vous êtes convaincu par factory ou pas ?
00:46:53 :Ou sans plus ?Oui,c'est bon.Ok,c'est cool.Donc,c'est cool,mais le but,c'est pas de faire les tests,c'est de vous montrer factory,quoi,parce que,vraiment,que ça peut être ultra puissantet ultra pratique.
00:47:11 :Euh,ok,maintenant qu'on a fait ça,donc là,on est d'accord que dans mon modèle,j'avais des images,ici.Voilà.Dans ma factory,je lui ai dit de me,de me gérer les images.
00:47:22 :J'ai lancé mon test,j'ai créé,sans article,ici.Sauf que là,on a un petit problème.Alors,ça n'a rien à voir avec factory en lui-même,mais,il y a un moment que je ne l'ai pas,et que,ça serait cool.
00:47:34 :Non,il est où ?Si,voilà.Ok.Donc,vous voyez,il m'a créé mon fichier de médias,parce que,par défaut,je n'ai pas de constante.
00:47:45 :Enfin,je lui ai dit de mettre ça dans,dans article.Et ici,j'ai,une centaine d'images.Si je relance le test,hop,il m'a recréé comme ça.
00:47:54 :Donc là,j'ai 200 images.Donc,vous voyez que c'est juste pas possible de faire ça,en fait.Vous ne pouvez pas,vous retrouver comme ça,avec,autant d'images,qu'il y a d'instances créées.
00:48:04 :Donc,petite technique.Dans votre conf test,ici,en fait,ce que vous pouvez faire,c'est vous créer une,comment dire,une fixture,qui va,en fait,modifier votre,votre dossier de médias,pendant les tests.
00:48:18 :Parce qu'en gros,si je retourne,je dois bien avoir un exemple ici,avec mes,mes,mes,mes,mes,mes,mes,mes,mes objectifs.Je vais avoir un exemple ici,avec mes fichiers à moi.
00:48:32 :Si je vais dans les Settings,c'est où?Quelqu'unvu que c'est projet.Voilà.Je ne vais pas me faire chier,j'ai copié ce que j'ai là,pour tout le monde.
00:48:41 :On va refaire le test ici,voilà.Hop.Ok.Je me copie ça.Je vais dans mes,séttings,ici.Donc,bonne pratique à faire,dès le début du projet.
00:48:54 :Vous définissez vos,vos dossiers statiques ici,Ok?Vos dossiers statiques et médias,voilà.Donc là, j'ai bien,normalement,voilà,mon dossier MediaFiles,avec dedans les articles,et là, il y a tout,tout ce qui vient d'être créé.
00:49:08 :Bon.Hop.Une chose qui est très pratique,et,qui serait bien,bien, bien,de penser à le faire,avant de faire ça.Ici,il faut aller vous créer une fixture.
00:49:21 :Donc, hop.Vous allez voir,la technique,elle peut paraître un peu compliquée,comme ça,premièrement,mais vous allez voir,c'est assez simple.On va se créer une fixture.
00:49:32 :On va dire ici,qu'on l'applique,en fait,à tous nos tests.Donc là,je l'applique,je veux dire que,pendant tous mes tests,il y a des moyens de l'optimiserun peu plus,ouais.
00:49:43 :Simplement,on va dire que,pendant tous nos tests,notre dossier de médias,sera un dossier temporaire,qui sera suppriméà la fin des tests.Hop.
00:49:51 :Donc,on va se dire,hop,le média,on va l'appeler,média folder route,par exemple.Voilà.Et en fait,avec PyTest,il y a ça qui est fourni,un répertoire temporairepour les tests,en fait,et qui sera suppriméà la fin des tests.
00:50:07 :Donc,ce qu'on va faire,c'est que,on va déjà s'emporter,ici,from Django,non,from,si,c'est ça.Ah oui,d'accord.Donc,on va dire,on va dire,on va dire,on va dire,on va dire,from,j'ai du mal,Django,c'est .conf,
00:50:30 :.config,je ne sais plus,il y a conf,c'est ça,.On va importersettings,ici.Ok.Donc,on importe settings.On va importer,aussi,autre chose,.core,
00:50:45 :.size,.upload,je ne peux pas avoir un,c'est ça,c'est .size3,on va importer.je crois qu'on peut importer,il y a un simple,voilà,c'est ça.
00:50:59 :Voilà.Donc là,on va,vous allez voir à quoi ça va servir.Donc ici,on va se dire,le fichier,pour faire propre,on va dire,l'original,média,route,donc le,le,le,le,le répertoire de base,d'original,des médias,on a dit tout à l'heure,il était,ici,
00:51:21 :c'est media files.Ici,on va lui dire,en fait,euh,donc on va lui dire que du coup,on est bien dans le fichier settings.py,
00:51:29 :et c'est,média,route.Donc ça,on récupère du coup,notre,notre,euh,dossier de base.Et là,on va lui dire,maintenant,settings,.média,route,on va lui dire,et bien tout simplement,tu vois,ça va être pendant les tests,le fichier,le,le dossier temporaire créé par PyTest.
00:51:55 :Vous m'arrêtez si ça devient un peu bizarre.Et on va lui dire,ici,hop,notre,euh,que ça va être notre,on va retourner notre fichier temporaire.
00:52:06 :Et à la fin du test,pour faire les choses propres,on va restaurer la valeur initiale de,de média route.Donc,ce qu'on fait,on va rendre ça un peu plus clair ici,tac,hop,ça c'est avant le test,et ça c'est à la fin du test.
00:52:19 :Oui ?Vas-y.Le Yield,le Yield,c'est,euh,putain,y a-t-il un Yield ?En fait,euh,dans le cas de PyTest,comment expliquer ?
00:52:32 :En fait,donc,quand t'es dans le cas ici de PyTest,le,le Yield ici,c'est que,c'est pas vraiment un retour,en fait,c'est,en gros,quand tu es pendant ton test,quand t'es pendant ton test,tu lances ton test,ça va te retourner ça,d'accord ?
00:52:47 :Et une fois que ton test,il est terminé,ça va exécuter ça.Ok.Donc,en gros,tu fais tes actions avant ton test,ce que tu veux retourner,et à la fin de ton test,tu fais les opérations de nettoyage,tu fais ce que t'as juste après,ce que je vais faire juste après.
00:52:59 :Donc ici,par exemple,je dis,mon fichier de médias,je remets le dossier original.Bon,après,vous inquiétez pas,hein,ça va pas,euh,c'est juste pendant les tests,du coup,c'est fait exprès,ça va pas vous abuservotre fichier médias,hein.
00:53:16 :Donc,euh,maintenant,j'ai pas besoin d'utiliserun article,par exemple.Ok.J'ai pas besoin d'utilisercette fixture-làdans les tests,ici.Si je reviens là,que je relance en PyTest,mais,hop,ils vont se faire,et on voit bien,j'ai pas de dossier de médiasde créer.
00:53:35 :En fait,ça va,PyTest me créele répertoire temporaire,je l'utilise pour mes médias,pendant le test,hop,je retourne,et à la fin,je supprime tout.
00:53:45 :Enfin,je remets le bon fichier de médias,mais ça supprime tout,donc,quand TMP passe,c'est,comment dire,automatiquement suppriméà la fin des testspar PyTest.
00:53:55 :Voilà,c'est ce que je veux dire.C'est cool, ça.Voilà,la petite technique,je tiens ça aussi de Thierry,pour ceux qui le connaissent.Ouais,j'ai trouvé çavachement cool comme technique,c'est vraiment pas mal.
00:54:06 :Donc,voilà.Puis,question.Oui.C'est le auto-usequi fait en sorteque t'as pas besoinde mettreton médiafor the rootà quelque part ?
00:54:18 :Ben,en fait...Il l'appelle automatiquement ?Voilà,pour tes tests,ouais,c'est ça.En chaque test,ça va être automatiquementappliqué,au lieu de te taper,enfin,tu vois,donc,si tu veux être sûrde sécuriser tes tests,au moins,tu peux faire ça,t'es sûrque dans tous les tests,
00:54:38 :ça sera utilisé.OK,cool.Donc,voilà,donc,pour récapituler,donc,vous créezune factory par modèle,vous pouvez utiliser,donc,du faker,utiliser des sous-factories,c'est ça,pour les relations étrangères,OK.
00:54:55 :Et,ben,après,il n'y a plus qu'à les utiliser,ben,dans vos tests,voilà.C'est très rapide,hop.Je crée çasans même faire de...
00:55:06 :Je ne vais même pas me mettreun point de create,ça ne sert à rien.Je fais juste plusieurs factories,je ne remplis rien à l'intérieur.
00:55:11 :Dans mes tests,si j'avais besoin de 100,eh ben,j'en crée 100 d'un coup,comme ça,voilà.Donc,si vous n'avez pas besoinde données avec des champs,des,comment dire,des données de tests très précises,eh ben,en fait,ça,c'est largement suffisantet Factory Boy va vous faire gagner
00:55:28 :un temps fou.Donc,voilà.Je ne sais pas si c'est bonpour tout le monde,si ça vous a plu,convaincu,ou,mais,c'est ce que je voulais vous montrerce soir.
00:55:39 :C'est bien convaincu.Ouais,cool.Je trouve,en fait,que c'est,c'est vraiment intéressant,surtout,pour des tests en local et tout,parce qu'il y en a,j'ai souvent l'habitudede créer des,des,des faux profils,des tests tout simplementet tout.
00:55:55 :Mais,avoir quelque chosequi génère automatiquementet tout,ça,ça pourrait êtrelargement intéressant.Ben,c'est pas mal,ouais,de,de,d'avoir des petits factoriescomme ça dans son projetet puis de se dire,tiens,en fait,ben,c'est un beau boulot,quoi.
00:56:15 :Ouais.Il y a,je pense que j'en parleraila prochaine fois,il y a un truc encore plus simple,mais,pour certains,ça pourrait peut-êtremême être trop simple,mais ça pourrait répondreà certains besoins.
00:56:26 :Modèle batterie.Mais,voilà.Je ne sais pas si il y ades questions spécifiques,mais en tout cas,t'as l'air,Florian,t'avais une questionsur Reverse,mais je t'ai pas entendu,je sais,je sais pas si t'avais vumon explicationentendue ou pas.
00:56:41 :Ah non,j'étais,j'ai eu un appeljuste à ce moment-là,que j'ai juste reverré dehors,mais,ouais,j'ai pas entendu.Désolée.Eh ben,tu l'aurasen rediffusion.
00:56:53 :J'ai eu peur,j'ai cru que j'avais oubliéd'enregistrer,mais en fait,non,c'est bon,j'ai enregistré.Ok,ok.Donc,ben,écoutez,s'il n'y a pas de questionspour moi,c'est tout.
Aucune occurrence trouvée pour « ».
00:00:34
Introduction
00:01:59
Mise en place des modèles
00:05:21
get_user_model
00:14:57
Mise en place de la vue
00:20:21
Factory Boy
00:24:40
Création d'une instance avec Factory Boy
00:29:06
Création de masse avec Factory Boy
00:30:51
SubFactory
00:35:37
Factory Boy et Pytest
00:47:39
Utiliser un dossier media temporaire pour les tests