Session du 16 décembre 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 continuer avec DRF et les vues
00:00:00 :et d'autres.On dirait que le mardi dernier, tu étais aussi en petit comité.Voilà, on voit mon écran, c'est bon ?Oui.Oui.Walid, tu n'es pas là.
00:00:17 :Fabrice, j'ai éclandré aussi là, c'est le mardi dernier je crois.Oui, j'étais là.J'ai éclandré aussi, mais le mardi dernier.Oui.Oui, c'est ça.C'est une affaire d'équilibré.
00:00:32 :OK.On avait fini.Alors pour Walid, si tu m'entends.Oui, je vous entends très bien.Super.Nickel.Désolé, tout à l'heure, j'ai dégagé, il y avait un autre takeur, je peux le remettresi tu veux.
00:00:52 :Je croyais que c'était un spam, mais je pense que c'était toi qui avais dit un autre takeur,je peux le remettre, il n'y a pas de problème.
00:00:59 :Il n'y a pas de problème.Voilà.On avait commencé, oui, à créer une API, Django REST Framework.Je ne sais pas si tu en as déjà fait, Walid.
00:01:12 :Bon, j'ai déjà commencé à utiliser un peu de Django, mais pas trop.OK.D'accord.Alors là, du coup, c'est Django REST Framework.C'est, on va dire, une surcouche de Django pour faire des APIs.
00:01:26 :Et donc, on est parti assez simple, avec deux, trois modèles vraiment très, très simples.Le but, c'est de faire du REST Framework sans se compliquer.
00:01:36 :Parce que c'est très complexe.Mais de voir un petit peu, faire un tour d'horizon.Il faut savoir, pour récapituler, qu'avec Django REST Framework,on n'a pas vraiment de formulaire.
00:01:47 :Et on a des serializers.Donc, en gros, en général, c'est ce que va envoyer le front-end.Dans l'interplication de Django, ça va être traité par des serializers.
00:01:57 :Voilà.C'est le front-end qui aura ses formulaires à lui, entre guillemets.Et nous, derrière, ça va passer à travers des serializers,qui va sécuriser la formation, entre guillemets, ou la traiter.
00:02:05 :Donc, le but, c'est de recevoir du JSON,de transformer les objets Python en JSON,et de les envoyer au front-end.En gros.Mais après, je te laisserais voir.
00:02:16 :Il y a du faire diffusion des semaines d'avant.Là, on fait une série de Montauras sur Django REST Framework.C'est le quatrième, je crois, d'ailleurs.
00:02:24 :Il me semble que c'est le quatrième.Je pense qu'après, il y en aura encore deux.À l'aise.Donc, voilà.On avait vu les serializers.Et maintenant, on passe sur les vues.
00:02:35 :Je ne reviens pas sur les serializers.Du coup, Fabrice et Jacques-André, c'est bon ?On avait parlé beaucoup, je pense que...Oui, c'est bon.Ouais ? OK.
00:02:43 :Oui.On avait évoqué rapidement une...On avait dégagé les APIs Vue, avec les décorateurs APIs Vue, là.On les avait enlevés, pour créer une première API Vue.
00:02:54 :Donc, ça, c'était pour une...Je vais relancer Vue, ce que je viens de mettre dedans, aussi, parce que...Je ne fais pas tout de REST Framework, à part ce...
00:03:02 :Je vais relancer Vue, en ce moment.Il faut que j'y remette un peu, là, parce que...Hop.Non, ce n'est pas la même que je veux.
00:03:09 :L'URL, c'est quoi ?C'est...Auteurs.OK.Merde.Désolé.Hop, là.OK.Qu'est-ce qu'on faisait, là, du coup ?On renvoyait la...Liste de tous les auteurs.
00:03:30 :Et, en poste, on pouvait créer un auteur.Un auteur.OK.Donc, on s'est réalisé.On renvoyait tous les champs.Direct.Sans filtre.Allez, boum.OK, super.
00:03:44 :Donc, on avait l'auteur.On avait l'ID.En même temps, il n'y a pas d'émission.Et on pouvait, du coup, en créer un...Et c'est la semaine dernière que j'avais eu un bug.
00:03:53 :Qu'est-ce que j'avais fait ?J'avais dû mettre les virgules.Ça, on s'en fiche.Hop.Test.Reprise.OK.C'est bon.On l'a bien enregistré.Donc, j'ai bien...
00:04:08 :J'aimerais être en guette.Ici, boum.Ça y est.Un auteur.OK, super.Maintenant, du coup,on peut repartir sur un...Comment dire ?Un...Une vue de détail.
00:04:21 :Pour voir l'exemple avec une vue de détail.Hop.On va aller là.Et on va se créer, du coup...Euh...On va l'appeler...Alors, je vais juste enlever ça pour l'instant.
00:04:35 :Parce que...Je vais me faire truquer.C'est pas quoi que j'ai envie, je pense.On va se faire un...Tour.Detail.Pfiou.Tac.Et on va toujours arrêter de appeler vue.
00:04:48 :Voilà.Et donc...Comme...Notre vue de dessus.Ici, il faut redéfinir à chaque fois chaque...Chaque méthode.Donc là, on va se faire un...Juste un exemple.
00:05:02 :Assez simple.On va se redéfinir ici.Une métal get.Ou on va vouloir récupérer un...Comment dire ?Euh...Merci.Un auteur.Et on va s'amuser, d'ailleurs, à utiliser...
00:05:16 :Si vous faites du Django, vous connaissez sûrement ça.Hop.On va récupérer le...GetObjectArc804.Je sais pas si vous le connaissez.D'accord.Et d'ailleurs, est-ce que c'est pratique de l'utiliser ici ?
00:05:34 :Ouais, parce qu'on renvoie une 404 direct.Ouais.Donc, oui.Euh...On va se faire ça.En gros, si l'auteur...N'existe pas...Donc on va récupérer son PK, hein.
00:05:49 :Si l'auteur n'existe pas,eh ben en gros, on renvoie une 404 directement.Euh...On peut faire ça.On aura pu faire directement...Un .get pour récupérer l'auteur.
00:06:01 :Le Serializer...Serializer...On va utiliser du coup notre...Serializer.Hop.Et on envoie notre auteur.Donc là, vous voyez, surtout quand on envoie une instance,il y a besoin du menu, hein.
00:06:17 :Parce que par défaut, il est à false.Donc, quand on a une seule instance,on envoie le menu.Et qu'est-ce qu'on fait ?On va retourner ici.
00:06:26 :Une response...Avec...Les infos...De l'auteur.Les datas du Serializer.Et ce qui est intéressant avec...Avec une API comme ça,c'est qu'on peut aller faire différentes méthodes.
00:06:39 :On pourra très bien...On pourra tout faire...Définir une méthode PUT, ici.Donc...Il y aura quoi ?HTPK...On peut aussi définir...Une...Une patch.
00:06:52 :Hop.Euh...Enfin, voilà.La différence...Vous connaissez un peu entre PUT et patch, ou pas ?Euh... Non.Alors...En fait, on peut en modifier, non ?
00:07:04 :Ouais.Quand on fait du Django traditionnel,on va utiliser du GET et du POST.Mais avec des APIs,ça marche beaucoup avec du POST,PUT, patch.
00:07:11 :Euh...En gros...Patch, c'est pour une modification partielle.Et PUT, c'est pour...On va dire...Un remplacement complet de tous les champs.Voilà.Euh...Attends.
00:07:24 :PUT et patch, c'est partiel.J'ai pas de bêtises.Euh...Donc, voilà.C'est juste...En...En travaillant avec des APIs,comme ça, c'est...Comment dire ?
00:07:33 :C'est très commun,genre, PUT et patch.Euh...J'ai cru comprendre.Enfin...J'ai pas assez fait longtemps de DRF.J'ai pas assez vu le projet DRF.
00:07:45 :Euh...Pour dire que...Le...PUT est peut-être moins utilisé que les patchs.Voilà.J'ai l'impression que le patch est plus utilisédans un peu plus de...
00:07:57 :Dans plusieurs circonstances, on va dire,que le PUT.Parce que le PUT, lui, c'est vraiment un remplacement de tout.Donc, euh...Ouais.Il n'est le patch qu'on remplace,sous guillemets, que les parties que l'on veut pas.
00:08:07 :Euh...Bon, on peut se faire une PUT, une patch.Euh...On va se faire une...Ouais, on va se faire une patch.On va se faire une patch.
00:08:17 :Euh...En gros...Dites-vous que quand vous allez être du poste,vous allez créer une ressource avec le poste,vous allez modifier les ressources avec patch ou PUT.
00:08:26 :Et on verra qu'il y a une autre méthode,qui s'appelle DELETE.Et DELETE, c'est pour supprimer.Ça prend bien son nom.Euh...Ok.Bon, on va se faire une...
00:08:36 :Une PUT.Ouais, on va se faire une PUT.Ah.Donc, on va...C'est parti.On va récupérer...Hop là.On va faire comme tout à l'heure.
00:08:45 :On va récupérer l'auteur.Hop.Hop là.Hop là.Et on va tenir là.On va voir ce qu'il va me proposer.Hop là.Serializer.Tac.
00:09:00 :Ok.Je suis d'accord.Si il est valide, ça me va.On le sauvegarde.On renvoie la data.Et sinon...Ok.On envoie une bonne request.
00:09:13 :Ok.Donc, c'est assez standard.Donc ici, en cas de...Comment dire ? De...De modification.On va prendre...Si la modification l'est faite, on renvoie les datas.
00:09:24 :Sinon, on renvoie les erreurs du Serializer avec la base request.Avec la réponse base request.C'est un JTP.Le métier de JTP, je veux dire.
00:09:32 :Hum.On pourrait déjà, ici, aller se faire...Bon, on va s'enlever rien d'ici.Tac.Ok.Detail view.Ok.Ouais.On pourrait, ouais, se mettre hauteur comme ça.
00:09:46 :Tac.Ouais.On va se faire ça.Tac.On va essayer de se l'afficher déjà.Hop.On veut le PK.On avait qu'en PK4, par exemple.
00:09:59 :Hop.Et donc, voilà.Ici, on est bien sur le GET.On affiche.Et donc, voilà.Ici, on est bien sur le GET.On affiche.Ici, je modifie.
00:10:15 :Autre.Modif.Hop.Là, il a bien été modifié.Ok.Hop.Là, tout change.Et donc, on est en GET.On affiche simplement l'info.Juste vérifier un truc.
00:10:32 :Vite fait.Hop là.Qu'est-ce que j'ai vu dans la...Qu'est-ce que j'ai vu dans la...Non, c'est bon.Donc, voilà.Donc, là, on a fait une modification.
00:10:43 :Le truc le plus basique.On a modifié une instance existante.Du coup, on va aller se faire...Regardez.Il est ici.Hop là.Vous allez voir qu'elle est sympa, la...
00:11:01 :Comment dire ?La payée navigable, on va dire, de DRF.Donc là, on se le récupère.Ok.Je suis plutôt d'accord.Parce qu'en général, c'est ce qu'on fait.
00:11:12 :On envoie un no content, ici.On fait un délai d'instance, simplement.Et puis après, on envoie un no content.Une réponse HTTP de no content.
00:11:23 :Donc, par exemple, on est ici.Ici, il actualise.Regardez bien.Non, il n'est pas lancé.Ici, il est lancé.Je n'ai pas lancé le serveur.
00:11:30 :Ça ne fonctionnera pas.Hop là.Hop.Nickel.Donc maintenant, vous avez bien le bouton déleté.Donc, elle est sympa, cette API de DRF,parce qu'en fait, vous pouvez tester directementen faisant le navigateur.
00:11:44 :Vous n'avez pas besoin d'aller faire du postman,ou ainsi de suite.Hop.On peut se dire ça.Boom.Et là, no content.Rien à fichier.
00:11:52 :On a juste écrivé.Voilà.Ok.Ça va pour l'instant, ou quoi ?Oui ?C'est bon.Ok.Bon, on fera rien de fou pour l'instant.
00:12:02 :On regarde juste un peu les façons de faire les vuesavec les différentes classes dont on peut hériter.Ok.Ça, c'est pas mal.Je réfléchis.
00:12:15 :Est-ce qu'on pourrait pas...Est-ce qu'on pourrait pas...Est-ce qu'on a utilisé quoi comme modèle ?Ouais.On a utilisé quoi comme modèle ?On a...
00:12:37 :Ils sont dans les modèles.Hop là.On a fait...On a le book...Title.Autorecita Killone.Ok.Je voudrais bien que je rajoute un champ de descriptionsur le book.
00:12:53 :Ouais.Je vais faire ça vite fait.Je vais faire un test vite fait dans l'API.Dans le...Description.Serializer.Il est où ?Book.Lister.
00:13:10 :Create.Update.Ok.Ok, ok.Description.Ok, merci.Hop.Et on va aller dans une vue ici.On va se faire une book...Details.Details.Hop, et qu'est-ce qu'il me propose ?
00:13:34 :Ok, je fais tout pour moi.Et si j'ai envie de changer, cette fois je vais me faire une patch par exemple.Hop.Ok.Voilà, c'est ça.
00:13:52 :En fait, quand on passe une patch...C'est ça que j'ai pas expliqué.Tout à l'heure j'ai fait une poutre.Ouais, alors c'est bon.Normal que je l'ai pas expliqué parce que je l'ai pas fait.
00:14:00 :On va préciser ici que c'est un remplacement partiel ici parce que c'est une patch.On remplace pas tout.Le poutre il est fait pour tout modifier.
00:14:08 :Donc on va envoyer ici partiel à celui-ci.Ok ?Euh...Hop.Ici je fais une poutre.Ici tac.Je vais voir s'il faisait l'erreur.Non, c'est bien.
00:14:19 :Donc il me le remet pas ici.Donc là poutre c'est un remplacement total.Ok.Et j'ai juste relancé le...Détail de vue ici.Hop là.
00:14:29 :Ok.Hop.Et on va relancer le serveur.Tac.Est-ce qu'on a un livre ?On va le créer.Voilà.Tu vois pas ?C'est un livre.
00:14:55 :Voilà.Tu vois pas ?C'est normal.J'ai pas fait de migration.Il y en a...Je vais mettre la chaîne ici.Hop là.Ok.Le run serveur, je sais pas.
00:15:13 :Il est où ?Il est là.Hop là.Ok.Description, là j'ai rien.Euh...Ok.On va essayer de se faire une petite modification ici du livre.
00:15:24 :Hop.On va mettre...Description.Reste ici.J'ai pas fait gaffe.Ah oui, d'accord.Ok.Euh...Ouais, parce que je suis dans les imbriqués là.J'ai mis quel serializer dedans ?
00:15:47 :Euh...Dans vue, bouclier réaliste et serializer.Alors bon.On va se prendre un...Book crate update.Ah ouais, donc il attend quoi comme information lui ?
00:16:03 :Euh...Il attend que...L'id, title, author, description.Ok.L'id, title, author, description.L'id.Ok.Title.Author.Ça, il le veut pas.Euh...Là, on va encore s'amuser.
00:16:23 :Je le sens.Pas se gourer avec.Euh...C'est l'id 8 ici.Hop.Ok.L'id, title, author, description.Ok.On va se le copier comme ça.
00:16:40 :On va vérifier s'il n'y a pas d'erreur.Test.Ok, c'est bon.Euh...Donc vous voyez, ça c'est un exemple typique où...Il faut savoir que...
00:16:52 :Il attendait...Euh...Non, c'est...On regarde s'il va afficher ce serializer là.Par contre, il faut savoir du coup...Concreate et update ici, il va utiliser ce serializer là.
00:17:04 :Voilà, c'est ça qu'il faut savoir.Du coup, il m'a affiché un truc.Du coup, j'ai copié bêtement.J'ai embrouillé sans faire gaffe.C'est de ma faute.
00:17:11 :Mais il attend bien ce format là.Donc là, je vais le reprendre juste ça.On va faire quoi ?On va...Ici, on met un champ.
00:17:21 :Hop, vous voyez, il vous le dit ici.Ce champ est requis.Donc vous voyez qu'on a des champs qui sont requis...Euh...Directement par Serializer CLV.
00:17:32 :Ok ?Comme ça, au moins, il n'y a pas de...Même s'il fronce ce gourd,vous, avec votre application DRF,vous lui renvoyez l'erreur quoi.
00:17:42 :Hop là !On était du coup...Dans Serializer, ici, qui est Book.Create Update.On est sur un modèle Serializer.Le titre ici, on voit qu'il n'y a pas de blanc.
00:17:57 :C'est obligatoire.Ok ?Et d'ailleurs, si...Je dis ça, mais on va faire un dernier test.Voilà.Je suis bien sur la guette là.Peut-être...
00:18:15 :Non, c'était sur Book.Pardon.Donc...Ok, on était là sur lui, je crois.Une guette en...8...Ok, description test.Alors, je suis au niveau du comportement.
00:18:34 :Si j'oublie le test, logiquement...Ok, là, j'ai fait une put.Il m'a remis la même valeur qu'il y avait avant.Voilà.Donc, je n'ai rien mis.
00:18:48 :Ok ?J'ai vraiment...Ici, omis le champ, complètement.Et quand on fait ça...Hop, il nous remet la même valeur.Il faudrait que je voie comment...
00:19:00 :On pourrait faire...Je réfléchis à un truc.Ouais, non.Si tu changes juste le title...Est-ce qu'il va...Après, oui.Tu voulais faire quoi ?
00:19:15 :Juste changer le title et voir s'il garde la description.En fait, tu supprimes la description.Ouais.Et dans la nuit des temps, tu mets peut-être un 1 ou un 2.
00:19:24 :Je ne sais pas quoi.Autre chose.Là, genre comme ça ?Ouais, tu fais un put.Juste pour voir si la description...Ok, attends.Hop là.
00:19:34 :Tu vois ?Il te laisse...Logiquement, tu fais un patch, mais...Ça fait un put, quoi.Ouais, là, j'ai fait un put.Et par défaut, il te garde le...
00:19:43 :Il te garde la valeur de l'ancien champ.Bon, ce comportement, c'est comme ça.Après, c'est normal.Tu n'es pas dans le modèle de supprimer la valeur.
00:19:54 :Non, non, non.Il te garde l'ancienne valeur.J'avais juste un doute, en fait.Je ne sais plus.J'avais un doute une fois.Je ne sais plus ce que j'ai fait.
00:20:04 :J'ai été allaitement touché une fois, à un de mes série-liseurs,que j'avais un comportement si bizarre.Et je voulais être sûr que ça ne m'arrive pas.
00:20:09 :Et je crois que j'avais un problème avec un champ comme ça.Mais là, c'est bon.J'ai bien ce que je veux.Tout reste comme il faut quand on ne le renvoie pas.
00:20:16 :Ouais.OK.Donc, là, on s'est amusé.On était où, d'ailleurs, dans nos...Tac.On avait...Non, lui, on a fait un put.OK.Ici, on avait quoi ?
00:20:32 :On avait un put aussi.Et patch, c'était pour le partiel.Donc, bon.Le patch, il vous reste que vous l'utilisez.Là, maintenant...Ce qui m'intéresse, c'est qu'on va s'amuserà utiliser des choses qui vont s'être plus intéressantes.
00:20:44 :Jean-Baptiste, suis-moi.Ça va, en fait ?Ouais.Bonsoir.Un peu en retard.Ouais, pas de problème.Félicitations pour la certification.J'ai cru voir que tu avais une certif'.
00:20:59 :Ouais.Ouais.Cérébini, ouais.Nickel.Ça a été galère ou ça va ?Ça a été galère.Nickel.Ça a été galère ou ça va ?
00:21:08 :Oh, ça va.On va dire que c'est une initiation à la cybersécurité.Ouais ?Ouais, c'est intéressant.Bon, ben nickel.Nickel.Avec Jean-Baptiste, on s'est croisés une fois en vrai.
00:21:22 :C'était à la PyCon à Strasbourg, l'année dernière.Oui.C'était l'année dernière.C'était l'année dernière.OK.Maintenant, on a fait de l'API View.On va redéfinir un petit peu toutes les...
00:21:40 :Comment dire ?Toutes les méthodes.Alors, attendez.Pour l'instant, on va importer rien du tout.On importera après ce qu'on veut.OK.Alors, on va commencer à taquer les vues génériques.
00:21:59 :Là, ça commence à être assez sympa.Vous allez voir.On va voir.On va faire ça.Réfléchis.C'est là-dedans, je crois.C'est ça.OK.Ils ont prévu ici déjà, par exemple, des listes créées d'API View.
00:22:28 :Déjà, sympa.Donc, en gros,on va se faire une listecréée d'API View, ici.Et on va arrêter de cette liste créée d'API View.Et là, en fait,là, où tout à l'heure, on redéfinissait du get, du put, du patch, ainsi de suite,qu'est-ce qu'on va faire ?
00:22:49 :On va lui envoyer un QuerySet.On va prendre tous nos auteurs,que l'on faisait tout à l'heure,pour notre liste.Tac.All.Et vous donnez, en fait, le nom du Serializer activé.
00:23:02 :Là, on va le voir ici.Auteur Serializer, c'est ça.Et ensuite,on va allermodifier l'URL.Donc, c'est AuthenticRadio, tac.Allez, on va faire ça.
00:23:19 :J'ai l'impression que je n'ai aucun tac.Hop.AuthenticRadio, hop.Hop.Et maintenant, si je relance mon serveur,hop.Donc, vous voyez, il me faisait la même chose.
00:23:39 :Sauf que tout à l'heure, dommage, on aurait pu laisser l'exemple.On avait,je ne sais plus combien de lignes de code,je ne suis que là pour avoir tout.
00:23:46 :Sauf que là, ici,en deux lignes de code, là, trois lignes de code,on a tout fait, entre guillemets.Et ce qui est sympa,alors, attendez, je réalise quelque chose.
00:23:56 :J'ai bien mon GET, j'ai bien mon POST.OK.Ce qui est sympa,c'est qu'on a en fait la structurequi est déjà, entre guillemets,pré-créée ici.
00:24:05 :Attends, je vais faire une POST.L'API de Django, en fait, là,il doit carrément nous pré-construire,en fait.Entre guillemets, le modèle directement,lui,je ne sais pas, en tête,je ne sais pas comment dire, pré-chargé, là.
00:24:21 :Et il est capable de nous dire,c'est ce champ-là qu'il faut.Donc là, c'est tout bête,on n'a pas besoin d'aller, entre guillemets,mettre nos accolades, machin, ainsi de suite.
00:24:28 :Tout est prêt.Donc là, c'est ce qu'on veut,on fait une POST.Hop.Et voilà, c'est créé.Tac.Donc c'est pas mal,on voit que c'est une couche d'infractionbien sympathique,et très plus ligne de code,et en plus, on a ça qui est généré automatiquement.
00:24:42 :Ça va pour l'instant ?Ça va pour ça ?Oui ?Pour cette petite vue générique.Il y a d'autres vuesgénériques sympas,parce que du coup,en fait, ce qui est génial,c'est que ça nous...
00:24:56 :notre code est récupéré,on a la sérialisation qui va être gérée,les validations qui sont gérées aussi,les status codes qui sont gérés en interne,par cette discrète APU.
00:25:08 :Alors,maintenant, on pourrait...Je réfléchis.Euh...C'est évident.C'est Retrieve,c'est le R dans Train.C'est Retrieve.Donc, il va nous falloir ici,pour faire comme tout à l'heure,on va se récupérerune Retrieve Update Destroy APU.
00:25:32 :C'est un peu des noms à rallonge,mais vous allez voir, c'est bien sympa aussi.Hop.So.Tail.View.Destroy APU.Pas de problème.Qu'est-ce qu'il me fait ?
00:25:45 :On récupère du coup...Euh...Alors là, on a un chorister complet,on récupère tous les auteurs.Euh...Pourquoi on fait un .all ?Parce qu'en fait, au final, derrière,Django va aller chercheruniquement les...
00:26:01 :Comment dire ?L'utilisateur...L'auteur avec le pépin qu'on va envoyer.On va regarder ça tout de suite.Hop.On va se regarder ici.Tac.Tac.
00:26:13 :Retourne dans le view.Pas de problème.Hop.On va voir un exemple.C'est la même syntaxe que quand tu fais un shell.Tu dis quoi ?
00:26:30 :C'est la même syntaxe que quand tu fais unmanage.py shell en Django.Le author.object.all.Ah, quand tu...De toute façon, oui.Quand tu fais un shell, oui,tu fais exactement la même chose dans tonprojet en Go.
00:26:44 :Exactement.Et...Alors là, vous voyez,ce qui est bien, c'est que j'ai envoyé le pket directement, il vient me chercher le bon.OK ?
00:26:51 :Et il m'a tout de suite mis la bonne structureau cas où si on veut faire une modification.En fait.On n'a pas allé s'embêter,comme je disais tout à l'heure,avec copier-coller comme un...
00:27:01 :Hop.Là, non.Il a déjà prévu tout ce qu'il faut.Il a prévu le delete.Voilà.Tac.Hop.Il envoie un no content.OK.Il a tout prévu.
00:27:11 :Alors, on pourrait modifier ici...Euh...Comment dire ?Le query set pourl'autoriser l'accès que sous certaines conditions.Par exemple,imaginons que dans hauteur,on pourrait avoir un champ,je ne sais pas, isactive.
00:27:27 :C'est un peu débile ce que je dis,mais ce n'est pas grave.Imaginez qu'on a un champ isactive.L'auteur, il est actif ou pas.Euh...
00:27:34 :On pourrait dire ici,faire un point filter.Ici, on repasserait directement sur un point filter.Hop.Et on aurait un isactive à son nom.Et comme ça,en fait,si on cherche à aller récupérer un PK dans l'auteurqui n'est pas actif,eh ben, ça ne marchera pas.
00:27:50 :Voilà.On peut comme ça, en fait,limiter l'accès aux auteurs,par exemple,à n'importe quelle instanceque le modèle qu'on utilise.Euh...Alors, il y a plein de...
00:28:06 :Je réfléchis parce que...Il y a plein de vues génériques.J'ai arrêté RF.Je ne peux pas toutes les faireparce qu'il y en a beaucoup.
00:28:19 :Hop là.Euh...On est là.Ouais.Donc liste APV,retrieve,destroy, update,destroy,retrieve, update,retrieve, destroy,APV,et c'est celle-là qu'on a utilisé,la complète.
00:28:34 :Retrieve, update,destroy, APV.En fait, ils ont faittoute une composition de mixins.Là, vous avez tous les mixins,en gros.Et là, vous avez toute unecomposition de mixinsqui est préfaite, en fait.
00:28:44 :Genre là,retrieve, update,destroy, APV,en héritage,j'imagine qu'elle a,du coup,retrieve,update,et destroy.Voilà.Ça me paraît...logique.Voilà.Retrieve,update,destroy.
00:29:00 :OK.Je préfère aller gérer ici,au cas où je donne une bêtise,mais...Voilà, quoi.Il faut savoir aussiqu'il est possible,en fait,de personnaliser assez facilementles vues.
00:29:17 :Les vues, en fait.Par exemple,imaginons,tout à l'heure,si je reviens ici,on avaitun book list serializeret un bookcreate update serializer.
00:29:30 :Alors, juste en vuede son description,on peut dire que celui-là,il ne s'agira pasà leur dire le code.Hop là.Tac.Ils ont le modèle,il était où.
00:29:42 :Voilà.Il doit restersimple.Bien sûr.OK.Hop là.Le plus simple possiblesur les modèles.On mettra ce qu'on a besoinsur la mesure.
00:29:59 :OK.Hop là.Donc,on a des deux serializerspour les books,pour les vues.Un plus pour l'affichageet un plus pour ce qui estmise à jour,les créations.
00:30:11 :Alors, imaginez iciqu'on va y créerje ne sais pas si je vaispouvoir faire ce que je veux.On peut se créer iciune booklistcreateview.
00:30:30 :Et là, on va du couputiliser la listecreate apiview.Le problème, c'est qu'ici,tout à l'heure, on faisaitnotre code reset.Déjà, mettre notre codeici.
00:30:39 :Code reset.Objects.All.Et tout à l'heure,on faisaitserializer class.Ici, on va mettre unserializer.Peu importe.Le problème, c'est que là,on va pas mettresoit on va mettrecelui-cisoit on va mettre celui-ci.
00:30:55 :En gros, ce qu'on peut faireicipour plus de personnalisation,c'est-à-dire qu'avec unevue générique, on n'est jamaisbloquépour définirune méthodequi s'appellegetSerializerclass ici.
00:31:10 :Hop là.Et on pourrait très bienlui diresihop là.Donc là, si on a vraimentque dans unenon, c'est requesthop là.
00:31:21 :Si on est sur une méthodepost ici,qu'est-ce qu'on fait ?On va lui retournerle bookcreateupdate serializeret dans tous les autres cas,on retourne icien booklistserializer.
00:31:39 :OK ?Donc comme ça, vous n'êtes pas bloqué.Vous allez avoirle serializer adaptéà chaque méthode.Par exemple,si je veux un trucque je fasse en postici,je vais vous montrer comme ça.
00:31:54 :C'est booklist create.Tac.Booklist create view.Je vais enlever moncopilot.Il va me servir.Tac.Hop.OK.Si je vais dans books maintenant.Bon, ça va.
00:32:16 :Il est là.Hop.Donc là, on voitque je suis dans books.Je fais une get ici.On a des quoi en getqu'on avaitperdu.
00:32:30 :Get là.En cas de get,on va avoir le booklistserializerqui est bien là.Et qu'est-ce qu'il fait,le booklist serializer ?Oui, si on se souvient bien,on pouvait vérifiersi on l'avait empruntéet il envoyait aussipour l'auteurun autre serializer,un serializer imbriqué.
00:32:47 :Donc celui-ci.Donc on a bienle serializer imbriquéen fait de l'auteur.Sauf que du coup,pour le book,entre guillemets,pour le...excusez-moi,le book,pour l'update,je veux dire,il faut ça,ici.
00:33:06 :Ce createUpdateSerializer.Donc ici,il ne faut quel'ID,title et auteur.Et donc,je vais regarder rapidement.OK.L'auteur,il me l'avait mis ici.Et en fait,il me l'a jeté à la structure.
00:33:22 :Title,je crois qu'on va mettre...On est sûr de...Par contre,il y a un truc qui paraît bizarre.Oui, pour la création,je suis sûr de bon.
00:33:32 :Et qu'est-ce qu'il me dit ?L'ID, forcément,il ne l'a pas.Non, c'est bon.Donc title,on va mettre,par exemple,on va mettre l'auteur 8parce que je sais qu'il y aune pécanie qui existe.
00:33:42 :On va mettrecréation depuis...On va appeler comment un vieux.Hop.Une liste de vieux.Voilà.Une liste.OK.Tac.OK.Donc là,il me l'a bien créé.
00:34:00 :Et vous voyez,ce qui est balèze,c'est que là,il me retourne bienla structurede mon serializer,heureusement.Et qu'ici,il me pré-remplitma structureen fonctionde ce serializer-là.
00:34:16 :On a bien le titre.L'ID, on n'en a pasparce que forcément,pour la création,on n'en a pas.Mais on a bienle titleet l'auteur.
00:34:24 :Le title et l'auteur.OK ?C'est bon, ça, du coup ?Oui.OK.Tac.C'est ça que j'adore,c'est qu'en fait,il peut carrémentme créer la structuremême avec des conditionsdans les vues et tout.
00:34:43 :C'est vachement cool.On verra,au dernier mentorat,je pense qu'on verraun coup de DjangoDeath Stranding.Spectaculaire.Il prend bien son nom.Dernier petit trucqui peut être sympa.
00:34:58 :Je réfléchis.On va carrémentse définir par les 7.Ouais, ouais, ouais.On va se faire ça.On va se faire ça.Est-ce que j'ai déjàretiré notre modèle ?
00:35:21 :On a le modèleLone Serializer ici ?Ça me paraît pas mal.Et on a bien le modèle Lone.Bon, allez.On va se faire ça.
00:35:30 :Imaginonsqu'on se fasse iciunUser Lone View.Je vais faire ma façonpour l'instant.Tac.OK.Serializer Class.On va bien utiliserce Serializer là.
00:35:51 :Et ici,on pourrait très bienredéfinir le Query Set.Tac.Alors, on pourrait faire comme ça,mais on va le fairede manière plus explicite.
00:36:00 :Hop.Donc là, par exemple,on vauniquement retournerles empruntsdu utilisateurqui est connecté.OK.Donc,en gros,le Query Set,on peut le redéfinir ici,comme ça, directement,en faisant une méthode.
00:36:21 :GetQuerySet.Je ne sais plussi on pourrait,comme je l'ai dit tout à l'heure,le redéfinir directementdans le Query Set.Parce que normalement,c'est la méthode qui prend le dessus,ça, c'est sûr.
00:36:37 :Est-ce qu'on pourrait fairepour un objetqui se situe directementsur le casqu'on s'attaque ?Je pense que oui.Normalement.Je pense que oui,parce qu'en Excel,c'est comme ça.
00:36:50 :C'est bon.Alors...Normalement...Ah, mais oui,mais non, forcément.Je ne sais pas si t'as créé...Non, il n'y a pas de self,en tous les cas,puisque je suis surun attribut class,donc je n'aurai pas accèsà mon self ici.
00:37:09 :Peut-être qu'il faudraitça au tour,ou PK,si on parle de PK,de l'auteur.Ouais, mais là,en fait, je veux les emprunts...Alors, par rapport à l'auteur,c'est par rapport vraimentà l'utilisateur de tout ce que lui,il emprunte, connecté.
00:37:28 :Non, je ne sais pas si...Je ne pourrais pas...Ce n'est pas une statut,on va demander à un ami,un petit cloude,par exemple.
00:37:40 :Parce que request,on n'a pas,de toute façon,en tous les cas,on va le commenter.Hop là.Parce que oui,je suis bête,self,on ne pourra pas passer par self,puisque self,c'est pour nos instances,et ici,on est dans la statut class.
00:37:58 :Donc forcément,ça ne va pas marcher.On va regarder quelque chose.On peut faire...Je ne pense pas,parce que je réfléchis,s'il n'y a pas un moyende le détourner,mais ça me paraîtparce qu'on a vraiment besoinde l'instance pour moi.
00:38:23 :C'est que le niveau de l'instance.Ah non,je cherchais s'il n'y avait pasun autre moyen possible,mais non.Tu n'as pas accès,en tous les cas,à ton instance,mais il n'y a même pasun autre moyen.
00:38:42 :Bon,ce qui me paraît logique,mais on va lui faire confiance,s'il dit qu'il n'y a pasd'autre moyen,en tous les cas.Je prends une secondeen mettant ce que je disaisà l'instant.
00:38:53 :Vu que j'ai besoinde mon selfpour accéder à l'instance,ça va aussi.Voilà,là, vraiment,la personnalisation,ici, on définitle serializer en fonctionde la méthode qu'on utilise.
00:39:18 :Et ici,on va définirle query set.Là, par exemple,on ne filtrerait quece qui esten rapportavec le setter connecté.Même si c'estde la vue générique,c'est un peu ce que je voisaussi souvent,ce qu'on a déjà dit,avec la vue génériqueet le Django.
00:39:39 :J'ai fait un mentoratune fois,je crois que c'étaitle mois de mai,dessus,où je montraisqu'une vue générique,on peut la personnaliserun peu comme on veut.
00:39:48 :Je pense que,maintenant,on vase réserver à la suitepour la prochaine fois.Je n'ai pas fait gaffeà l'heure.Et on continueraun petit peusur...
00:40:03 :Est-ce que je l'ai faitun peu ?Ouais,je l'ai fait un petit peu.Non,je pense qu'on vaavoir,on a vu assezsur les...
00:40:16 :C'est bon pour le principede vue générique,ça va ?Ouais,c'est intéressant.Ouais ?Bah,cool.On a fait la mistake,on a fait la retrieve ici.
00:40:27 :La prochaine fois,on va passer directementà un trucun peu plus violent,on va dire.Vous allez voir,là,c'est carrément autre chose.J'utilisais assez rarementquand je faisais du DRS,parce que,niveau personnalisation,moi,j'aimais bien l'entre-deux,soit de l'API View,soit de la vue générique.
00:40:45 :Mais la prochaine fois,on verra autre chosequi fait carrémenttout pour vous.Donc,voilà.Et,je crois qu'on prévoitune petite sessionsur...spectaculaire,mais avant,je pense qu'on va avoirun petit peu tout ce qui estles systèmes de fil,de recherche,de pagination,d'authentification,de permission.
00:41:04 :Oh,il y aura plusquelques mentorats.Donc,voilà.Est-ce qu'il y a des questions ?Ça va,ou... ?Moi,j'avais juste une question,et c'est plus Django.
00:41:15 :Ouais ?Par exemple,description,tu avais renseignéune valeur,et ensuite,tu l'as enlevé du modèle.Ouais...Moi,je pensais que ça allaitplanter,mais en fait,tu peux le faire.
00:41:28 :Regarde.Il n'y a pas trop de liens.Regarde,j'avais une valeur en plus.Oui,tu avais une valeur,mais tu n'as rien diten plus comme ça.
00:41:36 :Non,non,c'était sur quoi ?C'était sur le bookque j'avais discuté.Description,book.Ouais,regarde,book.C'est pas dur,de toute façon,tu vas aller,regarde,on va dans librairie,ici,migration,on va faire ce que j'ai fait,hop,modèle name,book dans book,c'est bien book.
00:41:58 :Book,et le nom de l'attribut,c'est description,je l'ai dégagé.Donc,en fait,ce qu'il a été me faire,c'est que la table,il ne rigole pas,il a été me prendre la table,book,t'es où ?
00:42:10 :Hop,et je n'ai plus la colonne,description,elle est effacée,hop,tu ne la voyais plus.Ouais,on fait gaffe,alors,au tout début,quand j'étais vraiment,tout débutant,débutant de Tango,je ne sais plus,j'ai voulu faire une modification,comme ça,et une application,je me suis dit,
00:42:28 :je suis content de la mettre en production,après,il n'y a pas de client,c'est vraiment pour moi personnel,mais j'étais fier de la présenter,et je ne sais plus,en une minute,deux temps,j'ai tout planté comme ça,en supprimant une colonne,et puis rien ne marchait,j'en pouvais plus,
00:42:40 :j'en faisais marre.Mais,c'était en ajoutant une colonne,et tout,par défaut,qu'il fallait mettre,alors,j'avais nul et trous,nul et blank à trous,ça m'avait planté une erreur,j'ai dit,merde,bon.
00:42:53 :Ouais,alors,il faut vraiment faire gaffe à ça,c'est,la procédure,c'est de se mettreune valeur par défaut,tac,on fait la migration,une fois que tout est fait,machin,on peut aller supprimer,comme ça,par défaut,et refaire la migration.
00:43:08 :Mais,ouais,toujours,valeur par défaut,c'est plus simple,je trouve.Ok.Donc,voilà.Bah,écoutez,s'il n'y a pas de questions,pour moi,c'est nickel.
00:43:22 :J'espère que c'était pour vous.Ouais.On est resté simple,ce soir,voilà.Mais,moi,le but,ce que j'aime bien avec DRF,c'est que je fais,quand même,des choses simples,comme ça,c'est assez parlant,c'est,le code,j'aime bien,c'est adapté,quoi.
00:43:41 :Ouais,mais on verra un truc encore pire,encore mieux,avec la page web.On verra,enfin,je pense qu'on se tiendra par ça,d'ici,ouais,allez,encore au moins,deux ou trois mentorats.
00:43:53 :Ok.Au moins,je pense.Donc,voilà.Ça marche.Il n'y a pas d'autres questions ?Moi,c'est bon.Ok.Bah,écoutez,bonne soirée,tout le monde,et puis,on va faire une annoncepour les mentorats,ça va reprendre,si jamais j'en fais un,la semaine prochaine,je préviendrai,je préviendrai sur le,
00:44:15 :comme d'hab,sur le Discord,mais,normalement,ce n'est pas prévu avant,bah,la reprise,quoi,le début janvier,enfin,après le réveil,on va dire quoi ?
00:44:27 :Le 6.Je crois que c'est ça,je ne sais plus,je n'ai pas l'argent d'insuler.Le 23,c'est mardi prochain.Ouais.Mercredi 24,ça m'étonnerait que t'aies fini.
Aucune occurrence trouvée pour « ».
00:00:16
Récapitulatif des sessions passées
00:04:16
Retour sur les APIView
00:21:40
Vues génériques
00:30:13
Personnalisation des vues génériques