Session du 09 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 Rest Framework
On va continuer sur les serializers
00:00:00 :Qui sait qu'à tester Django 6 ici?Django 6 on va jouer à le testerEt alors il y a beaucoup de changements?Alors je n'ai pas encore essayé les tasks, les tâches.
00:00:26 :Sur les projets actuels j'utilise Celery et Redis.Donc il faut que je regarde. Attends, je vais accepter Fabrice.Fabrice...Et... Salut Fabrice!Salut tout le monde!
00:00:43 :Du coup j'ai testé le système de template Partials, qui est pas mal.J'ai un lien sur le Discord.Que j'ai mis où? Je ne sais plus.
00:01:00 :Alors...Copie le lien du message dans le chat.J'ai fait une petite vidéo dessus.C'est une vidéo qui sera sur Dogstring dans un article.Il faut que je finisse l'article sur Django 6.
00:01:19 :Mais ouais c'est sympa.Le template Partials.Je vois que ça va être sympa.Ça va éviter de faire 3000 fichiers.Je vais le tester en production.
00:01:41 :Parce que j'en pense vraiment.Déjà pour l'avoir testé le template Partials c'est quand même pas mal.En ce moment il n'y a pas grand chose qui a été posté.
00:01:54 :Mais sinon on a une section ressources sur Discord.C'est le lien que j'ai envoyé là.Une section ressources et puis on peut poster nos vidéos, nos articles qu'on a trouvé.
00:02:03 :C'est pas mal.Et comme il y avait longtemps que j'ai fait une vidéo dessus, je l'ai posté dedans.Ça marche quand vous cliquez sur le lien Discord depuis Google Meet.
00:02:15 :Ça va bien.Oui ça marche.Donc voilà.Ce que je disais c'est que le template Partials surtout avec HTMLX.Je pense qu'ils suivent le fil.
00:02:41 :Parce que le template Partials maintenant on peut déclarer carrément une portion de HTMLdirectement dans un fichier lui-même et ne rafraîchir qu'une partie.C'est assez balèze.
00:02:56 :Je pense qu'on pourra...Je crois qu'il y a le lien vers la vidéo au pire.Peut-être que je ferai un mentorat dessus à part.Je vais quand même me concentrer sur le mentorat Django Rest Framework.
00:03:07 :Et normalement j'espère que je vais pouvoir bien avancer demainpour faire un article complet sur Django 6.Je suis dessus là.Les templates Partials comme ça j'avais un peu testémais qu'en développement c'est pas mal.
00:03:26 :Ça évite de répéter plein de choses.T'as essayé avec l'ancienne version de Django en version 5 ?J'étais en 5.3 ou je sais pas trop combien.
00:03:36 :Donc tu faisais des includes en fait je pense.Ou un truc dans le genre.Je sais plus exactement comment je faisaismais j'avais des templates Partialsqui me permettaient de pouvoir intégrer des morceaux de codeet éviter du HTML et HTMX et éviter de le répéter 20 000 fois à 20 000 endroits.
00:03:56 :Donc tu utilisais à mon avis un fichier HTMLtu crées un autre fichier HTML Partial plus petitque tu pourrais réutiliser ailleurs.Tu devais te faire un include plus template là.
00:04:09 :Je pense, j'imagine.Et en fait là avec Django 6il n'y a plus...Alors j'ai fait un repo au pire.Je vais partager mon écran vite fait.
00:04:25 :Et on va attaquer quand même.Avec Django 6 il n'y a plus besoin de faire d'include en fait.En fait c'est un peu différent.Il faudra que je me renseigne dessus.
00:04:40 :J'ai fait...Je m'envoie dans le chart sur 6.Ils l'ont marqué dans la documentation de Django ça ?Ouais ouais ouais, c'est arrivé là.C'est arrivé récemment.
00:04:54 :J'ai regardé ça demain.Et en fait ce qu'on peut faire dans l'index HTML iciOn voit c'est grand mon écran ?Personnellement je suis sur PC donc ça va mais après...
00:05:07 :Là ça devrait aller.En fait ça c'est Django 6, c'est tout nouveau.Ça vient d'arriver.Donc ici on définit un petit template partiel en fait.
00:05:18 :Un morceau de HTML partiel.Donc on le définit mais en fait il n'est pas utilisé.Là il n'est pas lu par le navigateur.C'est juste on le définit.
00:05:30 :Et après pour l'utiliser par exempleon va l'utiliser ici comme ça dans une boucle.On va l'appeler partiel card.Parce qu'on l'a bien appelé.Partiel définition, on a fait un partiel def pour définir.
00:05:41 :On l'appelle card.Donc on ne l'utilise pas, on le définit juste.Et ici on l'utilise.On boucle dessus.Et on peut le définir dans un fichier à part aussi.
00:05:52 :Ouais ouais.Et on l'index pareil en fait.Par exemple là ce que j'ai fait c'est que je suis sur une page à part.Mais je fais bien ici blog slash index.html dièse card.
00:06:03 :Pourquoi?Parce que je suis bien ici dans mon index.html dièse et le nom card.Ça marche comme ça en fait.Ouais.Voilà.Et dans vos vues.
00:06:15 :Pour les rendre en fait.Maintenant plus besoin d'appeler un include, un fichier HTML à part.On peut appeler le fichier HTML principal.Là j'ai mon fichier.
00:06:23 :Quand j'arrive dessus, j'ai mon index.html.Mais je peux très bien dire appeler directement ce petit morceau de HTML avec le dièse card ici.Il y a juste ce code là en fait.
00:06:33 :Ça ne sort pas les autres codes.Ça sort juste la card.C'est tout.D'accord.C'est pas mal.C'est intéressant.Ouais.Et ça c'est vraiment tout nouveau.
00:06:42 :Ça vient de sortir.Donc ce que je disais c'est que ici on définit sans l'afficher.Mais il est possible quand même de faire les deux à la fois.
00:06:50 :J'ai vu ça.De le définir et de l'afficher en faisant partial def card et rajouter ici inline en plus.Et du coup en plus de le définir on peut l'afficher.
00:06:59 :Voilà.Comme ça il est défini et il sert à la fois dans le code.Ouais.J'ai testé ça ce matin.Donc voilà.Il y a un certain nombre de lignes de code des fois.
00:07:18 :Ouais carrément.Je viens de le tester avec htmx et ça marche très bien avec htmx sans problème.Donc voilà.Alors.On va reprendre notre projet DRF.
00:07:34 :Je crois qu'on aurait du mal à me remettre dedans.On avait vu les modèles serializers quand même.On a déjà eu pas mal de choses.
00:07:41 :Qu'est-ce qu'on avait fait ?On avait vu qu'on pouvait envoyer la requête en contexte.La dernière fois on s'est arrêté là-dessus.Est-ce que tout le monde était là la dernière fois ?
00:07:52 :Oui, il y en avait qui n'étaient pas là.Non, tout le monde était là je crois.J'étais là aux deux.J'aurais aimé aussi.Johanna tu étais là.
00:08:03 :Peut-être pas au premier mais au dernier.Jérémie tu étais là je crois.Oui.Fabrice aussi.Eric aussi.Et Johanna je crois que tu étais là au dernier.
00:08:13 :Donc normalement c'est bon.Parce que là j'avoue pour refaire un recap je m'y perds.J'étais là au deuxième.Donc j'étais là au dernier.C'est nickel.
00:08:21 :Alors, on était avec nos serializers.Qu'est-ce qu'on faisait déjà ?Je vais juste relancer le serveur.J'avais tout mis dans quoi ?Je n'avais pas payé.
00:08:42 :Je ne sais plus dans quoi j'avais fait les routes.Dans l'URL direct.Ok.Je n'avais pas fait des API au Torz.Je l'ai fait directement au Torz.
00:08:55 :Et j'avais quoi comme serializer ici ?J'avais un book serializer.J'avais un loan serializer.Ok.Et je voulais au Torz détail.Alors qu'est-ce qu'il n'y a pas cette fois ?
00:09:15 :Ah oui, parce que j'ai fait des modifications qui n'existaient pas.J'avais écrit une connerie.Je l'avais mis où ma connerie ?En exemple, j'ai dû écrire un get full quelque part.
00:09:25 :Je ne le trouve pas.Je ne l'ai pas fait ici dans la vue peut-être.Ou dans le modèle.Tac.Modèle.Bizarre.Qu'est-ce qui me sort du coup comme erreur ?
00:09:44 :Autor serializer.Have no object.Get full.Ok.J'ai défini ça où ?J'ai défini ça où ?J'avais fait un truc en exemple, en fait,juste pour montrer.
00:10:02 :Sauf que je ne me souviens plus où.Dans l'erreur, il ne me dit pas où c'est exactement.Ah, dans la vue.Ok.Author list and create.
00:10:15 :Ok.Author list and create.D'accord.Ok.Alors, j'ai fait une connerie.D'accord.Ok.D'accord.Ok.Donc ça ne me reste pas plus là par contre.
00:10:35 :List and create.Serializer.Autor serializer.Modèle.Fields.Et dans le modèle, ouais, j'avais rien.Quelqu'un se souvient de ce que j'ai fait la dernière fois ?
00:10:54 :Je vais le recharger et là ça me paraît bizarre quand même.Je ne me souviens pas de ce que j'avais fait du tout.Ok.Si j'ai laissé...
00:11:14 :Pas dans le début, tu avais touché quelque chose,tu avais montré quelque chose et tu avais mis des points à la place.Je ne sais plus.
00:11:21 :C'est bizarre, c'est que je ne le retrouve plus.Je vais essayer de recréer l'erreur, voir.Pourtant quand je regarde le debug, là,autors, ok.Pas de problème.
00:11:31 :Ouais, c'est vraiment là dans le serializer que ça merde.Autors, il savait bien mon auteur serializer qui est là.Lui.Pourtant j'ai bien tous mes fields ici.
00:11:50 :Et mes modèles d'auteur ici.Et mes modèles d'auteur ici.Je ne sais pas.Je ne fais rien de fou.Ah !Non.Non, ce n'est pas ici.
00:12:01 :Ok.Alors là,de toute façon c'est un truc tout con.Je vais envoyer voir mon IA là.Si elle me trouve...De toute façon c'est plus efficace.
00:12:15 :Voilà, ouais.C'est un truc tout con.Il y a un truc, je vais me dire.Mais oui, mais quelle connerie.Hop.Prouve-moi ce bug.Hop.
00:12:29 :En plus je l'ai mis en mode agent,donc normalement on va aller me le corriger direct.Mais je veux voir où...Ah, ok.Ah, mais oui.
00:12:50 :Je viens de voir.D'accord, j'ai passé Gaspard.D'accord, je n'ai pas fait Gaspard.Ok, c'est bon.Pas besoin de m'embêter.Hier, en fait, c'était juste sous mes yeux.
00:12:57 :C'était ici.Je n'ai pas fait Gaspard, je l'ai regardé.Hop, j'avais fait un truc, une connerie.Ok.Ça me rassure.Je ne comprenais pas du tout ce qui passait.
00:13:04 :Je n'ai pas...Je n'ai pas les IA en face des trousparce qu'il y avait un attribut ici qui...C'était le bazar.Nickel.Bon, c'est bon.
00:13:13 :Bon, vous voyez.Ce n'était rien de grave.Je m'en doutais parce que je...Parce que...Quand je voyais GetFoo, c'est que c'est moi qui avais dû cacher quelque chose.
00:13:23 :Vu que j'avais défini un champ qui n'était pas dans le modèle, en fait,dans le serializer Foo,lui, il s'attendait...Parce que je l'avais appelé, j'imagine,SerializerMethodField, j'imagine.
00:13:32 :C'est ça.En fait, on l'avait déjà vu,il s'attendait à ce que j'aie une méthode...Une méthode spéciale.Je ne sais pas si j'en ai gardé.
00:13:41 :Si.MéthodeField.Get isBorrowedByMe.Donc, c'est...On crée l'attribut.Je ne sais pas si vous vous souvenez.On utilise le SerializerMethodField.Et ici, on utilise une méthode pour, en fait, afficher dans le serializer.
00:13:55 :Voilà.On peut voir un peu comme un champ calculé, par exemple.Bon, là, j'allais montrer un exemple comme ça.C'est que je ne l'avais pas enlevé.
00:14:04 :OK.On va couper pour l'instant.Je l'enregistre.C'est bon.Ben, écoutez, je vais continuer.Alors.Le serializer...Alors, j'ai juste relancé la vue.Le serializer, ici, par exemple,on va prendre le serializer.
00:14:25 :On va prendre les books, ici.Hop.On est sur les livres.Et on est d'accord ici que l'auteur, à chaque fois, par exemple,il va nous afficher la clé primaire.
00:14:36 :8.Donc, pour ça, il faudra aller à la base données.Où, en front,ils peuvent récupérer facilement.On pourrait récupérer facilement, en fait,l'auteur par son PK.
00:14:53 :On aurait une autre routeoù on ferait un get sur ce PK-là.Voilà.Hop.Et donc,c'est bon pour ça.Pour le petit rappel,la série serializer,on a fixé les PK.
00:15:06 :C'est une clé étrangère.On clé sur la clé étrangère.Hum.Alors.Donc.Ce qu'on pourrait faire,ici,c'est...On pourrait...Comment dire ?Ce champ auteuraller...
00:15:26 :avoir plus de contrôle dessus.Donc, par exemple,on est sur notre book serializer.On va aller sur le champ auteur,le redéfinir comme ça.Et qu'est-ce qu'on pourrait faire ?
00:15:35 :On pourrait direserializer.OK.Et donc, là, ici,alors, avant de le faire, peut-être,on pourrait...Regardez, ici,il y a un petit boutonqui ditserializer.
00:15:56 :Et là,il y a un petit boutonqui ditregarder quelque chose, ici.Donc, on a, par exemple,on va prendre une structure de dossier.
00:16:05 :Ah, je n'ai pas autorisé du poste dessus.Bon, ce n'est pas très grave.Sur les livres,ce n'est pas très grave.Donc, en gros,imaginons qu'on pourrait créer, ici,avec une méthode poste.
00:16:16 :Est-ce que je peux réutiliser ça,dans ma vue ?Book serializer.Est-ce que je me lance là-dessus ?Box...Ouais.On le fera peut-être avec un CRUD,en fait, après ça, je pense, plutôt.
00:16:31 :Ouais, plutôt que de surdéfinir.On verra ça plus tard.On va en parler,mais on fera l'exemple plus tard.Parce que j'en ai marrede taper des API views.
00:16:39 :C'est un peu chiant.Je vous montrerai un truc beaucoup mieux plus tard.Pour l'instant, on vaêtre plus dans la théorie du serializer,on va dire.
00:16:45 :Donc,ici,donc,maintenant, ce qu'on peut faire, ici,c'est avoir plus de contrôlesur cette clé primaire.Donc, on pourrait très bien dire, ici,read only,hop,à ce coup.
00:17:00 :Et comme ça,notre clé, ici, qu'on a,qu'on a dans notre serializer,elle est juste en lecture seule.Voilà.On n'est pas là pour la modifier.
00:17:12 :On peut faire aussid'autres choses.On pourrait, par exemple,réfléchir à ce que j'avais préparécomme exemple pour mon prochain article.On pourrait se dire aussidéfinir un filtre, en fait.
00:17:31 :On pourrait très bien créer un filtre, ici.Donc, par exemple,on va se faire un petit peu reset.On pourrait se dire,on n'a pas de,alors, imaginez, on va supposer,imaginez que sur l'auteur,on a un filtre isactive.
00:17:48 :Savoir si l'auteur est actif ou pas, quoi.On imagine qu'on pourrait le désactiver.Donc, imaginons un champ, ici,comme ça,isactive,ou ça serait un modèlepour un boolean field.
00:18:02 :Donc, ce qu'on pourrait faire,ici, c'est qu'on pourraitautoriser queles auteurs actifs.On pourrait aller se faire un truc, genre,auteur.object.filter,ici, et on se mettraitun isactive,un slow.
00:18:22 :Ok, et comme ça,pour attribuer un,comment dire,on choisit,en fait,quels auteurs sont autorisés,pour la création ou la modificationd'un livre.Donc, le query set qu'on met ici, il n'est pas là pour filtrerles livres, mais bien, en fait,les auteurs, ici.
00:18:44 :Donc, on n'autorise que les auteursqui sont actifs.Vous avez bien compris que c'est pour l'exemple,mais si on avait un champ comme ça, on pourrait faire un truc comme ça, ok ?
00:18:52 :Ça va, ça ?Oui.Oui.Ok, je continue.Il n'y a pas de messagedans le chat.Ok, alors,on pourratester les serializers après, si on veut,mais je suis presséde passer en modèle du set, parce quemême vous, vous allez bien aimer,vous allez voir.
00:19:20 :Maintenant,imaginonsqu'on veuille réfléchir.Je pense que c'est bien pour la suite de faire ça.Alors ça,je vais le nettoyer, parce qu'on ne l'a pas.
00:19:32 :Je ferai un repo, et puis je vous le partagerai,vous pourrez vous amuser avec, si vous voulezfaire des petits modifs.Ici, l'auteur, on pourrait utiliserautre chose. On pourrait faire un string
00:19:42 :related field,ici.On va renfermerle serveur.Regardez bien, je suis en auteur, ici.On voit bien, en fait, là, ou pas ?Oui, on voit bien. Ça va ?
00:19:58 :Oui.Si j'actualise, hop,on voit le nom des auteurs, d'accord ?Donc déjà, en fait, là, avec les modèlesserializers, on fait des trucscomment dire,assez cool, entre guillemets,pratiques, juste en définissantdes champs comme ça.
00:20:18 :Je suis assez fan de DRF.D'ailleurs, en ce moment, je ne fais que des missions Django,mais une mission DRF, c'est vrai que ça me manque.
00:20:26 :J'ai vraiment adoré le framework.Ensuite,là, on a fait notre string related field,et si je reviens dans le modèle de l'auteur,on a le self.name.
00:20:38 :En fait, il va utilisercette methodstring ici, pour l'afficher.Hop là.Donc là, on anotre string related field.Ensuite,je pense queon va pouvoir se faire du nested serializer,parce qu'on a vu que j'ai pas mal de chosessur les serializers.
00:21:08 :Ah oui,juste pour info, quand vous faites ça, bien sûr,c'est pas mal,mais le problème, c'est qu'après, c'est en lecture seule,au niveau du serializer. On ne peut pas
00:21:18 :créer le livre comme ça. Il faut avoir la backuppour créer les livres.Donc ça, vous l'utilisezpour les serializers, pour l'affichage, entre guillemets,pour du get.
00:21:28 :Et aussi, du coup,on pourrait,donc là, je pense qu'on vaon vase créerun nouveau serializer,peut-être que ça sera plus pratique.Je réfléchis.
00:21:52 :Je penseque ouais.Je pense que ouais,ça sera mieux. On va aller ici.On va se créer un serializer ici.Je vais plutôt que de tout faire dans le mêmesystème à chaque fois.
00:22:08 :Ça sera peut-être mieux.Quoique.Quoique, quoique.Non, on va garder le même.Hop, on va garder le même.OK.Donc, pour l'autre,on va garder le même.
00:22:26 :Ça sera mieux, parce que je ne vais pasmultiplier les serializers.Ici, le champ hauteur,on va pouvoir s'amuseravec,voilà, on va réutiliser, je l'ai ici.
00:22:38 :Donc, on va réutiliser ce serializer-là.Alors, celle-là,ça c'est un truc qui est vachement cool.Hauteur, qu'est-ce qu'on va faire ?On va direhauteur serializer ici.
00:22:52 :Je vais vérifier que ça fonctionne avant.Et hop, ici,j'ai un serializer imbriqué.Donc, en gros, ce que je fais, c'est quej'envoie mon serializer qui est icipour afficher les hauteurs.
00:23:06 :En plus, je réutilise dans mon book serializerle champ hauteur, je lui envoiemon hauteur serializer.Du coup, au lieu d'afficher qu'un PK,j'ai carrément son IDet son name.
00:23:18 :Et si j'avais d'autres champs,j'aurais les autres champs avec.Ça va, ça c'est bon ?Oui.Donc ça,c'est le principe du nested serializer.Du serializer imbriqué.
00:23:32 :Avec Longo, ça existe.C'est assez puissant à utiliser.Est-ce queje pourraisarrêter ces clavules ?Je réfléchis un peu.Est-ce que du coup, si on fait ça,on pourrait se définir ?
00:24:06 :Parce que là, j'enchaîne un peules choses comme ça. Après, dans la logiquedu projet, il faudrait qu'on ait quand mêmeun serializer à la limiteexprès pour le create et l'update.
00:24:16 :Donc celui-là,par exemple,on pourrait l'appelerbooklist serializer.Je vais dans les vues.Il est au booklist serializer.Je vais l'utiliser où du coup dans le projet ?
00:24:32 :Ici.Hop.Booklist serializer.Puisque là, on est vraiment plussûr de l'affichage quand je fais ça.Et je pourrais me direaprès, ce qui se fait souvent, c'est d'avoir desserializers, par exemple, exprèspour le create et l'update.
00:24:50 :Donc là, on pourrait se dire, on va se faire un bookcreateupdateserializer.Hop.C'est comme les formulaires en fait.Ouais, des fois,on veut tout faire avec un seulserializer,mais c'est pas malde séparer ici.
00:25:12 :Et puis, on ferait comme on aplus haut, casemetamodèle.On aurait notre modèle bookfil ici.Je vais un peu filmerle début du Montaura sur ceprojet là.
00:25:28 :On avaitet tac.Ça me suffirait. On s'en fout en fait.C'est juste pour l'affichage. Là, comme ça, on auraun serializer pour la création.
00:25:38 :Ce qui ferait quemaintenantdans Views,ça faitun peu bête d'aller dans Booklist.Une vue qui s'appelle Booklist,on pourrait l'appeler autrement.Mais en gros, on pourrait se dire...
00:25:56 :Je pose un commode vue.Ouais, bon.On pourrait se créer une nouvelle vue, exprès,juste pour faire du...du poste, quoi.On va laisser dans la liste ici.
00:26:12 :On peut ici se dire, allez hop,on va autoriser les méthodes poste.Ici,qu'est-ce qu'on fait ?On va vérifier icisi la méthodehop, c'est du get.
00:26:26 :Tac.Je suis là.Hop. Je sais pas ce que je voulais faire.Et ici,on pourrait se direifrequest.méthodec'est du poste.Poste.
00:26:48 :Et là, qu'est-ce qu'on ferait ?On utiliserait notreserializerici, qu'on importeraithop.Donc c'est bien d'avoir desserializers différents.Parce que l'un est vraiment plus pour rendredans l'information que l'autre. Et ici, on en aurait
00:27:10 :un, du coup, qui nous servirait vraimentà la création de données. Donc on lui envoie lesdatas reçues parla requête poste.Et s'il est valide,du coup,si le serializerest valide,qu'est-ce qu'on fait ?
00:27:30 :Comme on a déjà fait pour d'autres serializers.On fait un return.Un return.La response ici.Hop.Serializer.datanickel.Et on fait un status ici.
00:27:48 :On aurait un statusHTTP.On aurait un created ici.Voilà. Et puis on vagérer en cas d'erreur, on pourrait avoirici, uneresponse ici, avecle serializer, ses erreurs.
00:28:04 :Hop.Et qu'est-ce qu'on pourrait lui envoyer ?En plus, c'est le même schéma en fait.Ça se revêt chaque fois. C'est toujours la même chose.
00:28:12 :.Une 400 par exemple.Une mal réqueste quoi.Donc là maintenant, si je retournesur mon projet.Hop.J'aila méthode poste qui apparaît ici.
00:28:28 :Donc je peux faire une getou je peux aller faire une poste ici.Donc il faudrait que j'envoie que les champs.Du coup, j'ai dit quoidans le serializer ?
00:28:40 :ID, title et auteur.Voilà, pour faire de la création.Doncpar exemple,je pourrais dire quoi ?Hop.L'ID, on s'en fiche.Title,tac.On met la nuit en mettant un peu au hasard.
00:29:04 :Auteur ici,on avait...Alors attendez,que je ne me fasse pas de conneries.Tac.On pourrait mettre un pk existant.Je crois que le 8 il existe.
00:29:18 :C'est ça.Et on pourraitenvoyer ça du coup.Et normalement, s'il n'y a pas d'erreur.De toute façon, on aura un message d'erreur.Ah voilà.
00:29:32 :Ok, qu'est-ce qu'il me dit ?Alors.Qu'est-ce qu'il est lui ?Ok.Qu'est-ce qu'il me fait lui ?Hop là.Voilà.Alors.Ce n'est pas le formatage comme ça,normalement.
00:30:14 :Je fais juste un test comme ça rapidement,mais c'est bizarre.C'est bizarre quand il me rend mon...Attendez, je vais juste aller sur mon...Auteur par exemple.
00:30:24 :Comment c'était ce qu'il me le rend ?Comment lui ?Ah.Bah pourtant,ouais ouais ouais.Tout à l'heure, j'avais bien ce genre de là.
00:30:36 :Tac.Name.J'avais bien, ouais.C'est bizarre qu'il me...Vas-y, Romain.Euh, j'étais où, là ?C'est après le 8 qu'il y a une guerre.Ah.
00:31:00 :J'ai pas enlevé les deux.C'est pour ça que j'avais enlevé que celle-là.Hop, c'est bon. Parce qu'en fait, j'avais enlevé...Alors, un coup j'ai testé,j'ai enlevé celle-là, j'ai pas enlevé celle-là,et après j'ai retesté, j'ai enlevé celle-là et pas celle-là.
00:31:12 :C'est bon. Non, j'ai eu un coup de pression.Je te le mets là, mon Serializer, il doit fonctionner.Ok.Bon. Vous voyez, du coup,il a bien pris que mes deux champs.
00:31:22 :On a bien un Serializerde Createet un Serializer, en fait, pour l'affichage.Il est souvent d'avoir les deux, ça paraît.Ok.Maintenant,on va pouvoirterminer par une introductionaux vues.
00:31:44 :Bon. On a déjà parléun peu des, comment dire,des API Views, mais ça, on va viteles dégager.Ah, je dois jouer à la tiseuse en même temps.
00:31:54 :Et en fait,ce qu'il faut savoir, c'est qu'avecDjango REST Framework, vous avez plusieurstypes de niveaux d'abstractionconcernant les vues.Donc là, on a vu les API Views.
00:32:06 :Donc c'est,c'est simple.Oui, c'est simple, mais c'est à la fois un peu chiant, on va dire.Il y a pas mal de codes.On a vu à quoi ça ressemblait.
00:32:18 :Et maintenant, on va passer aux autres choses.Alors.Euh.Moi, ce que je,je vais donner un projet,moi, tant qu'à définir, ouais,tant qu'à définir les,toutes les méthodes HTTPcomme ça,je préfère limite à travailleravec des classes.
00:32:40 :Je pense qu'on va,ouais, on va faire des exemples, en fait,assez simples.On vatout dégager. Hop.API View.J'en veux plus.Response, on va le garder.
00:32:56 :Status, on va le garder.Nos modèles,on va les garder.Et on va garder les serializers, ouais.Ok.Je repars le terrain pour la prochaine fois.
00:33:08 :Donc là, j'ai fait un peu le ménage.Euh.Et là, du coup, on va faire unevue simpleavant de, comment dire,avant de se quitter et on verra pour la suite.
00:33:20 :On pourra très bien icise créerune listeCreate View comme on a déjà fait avanten API View. Sauf que là, on va utiliser
00:33:30 :une classe qui s'appelleAPI Viewet qu'on va aller importer.Euh.J'ai pas encore le module, donc non.C'est dans REST Framework.Views, ici.On va importer API View.
00:33:46 :Donc là, on est vraiment sur la passerelleentre l'API View qu'on a vu avanten fonction et l'API View en classe.Là, ce que je vais vous montrer, il y a encore quand même pas mal de codes répétitifs,c'est juste une passerelle. C'est vraiment juste
00:33:56 :pour vous montrer l'API View.Mais on va vite passer àautre chose que l'API View, honnêtement.On va vite passer sur les vues génériques.Mais en gros, l'API View, c'est un peu commece qu'on a vu avant au niveau des fonctions.
00:34:08 :En fait, c'est un peu comme quand vous faites desvues avec des fonctions, ouais.Oui, c'est...C'est une vue basée sur une classe, en fait.
00:34:16 :Ouais, c'est une vue basée sur une classe, mais...Comment dire ?Ce n'est pas encore une vue générique, vraiment.Là, on va devoir toujours définir.
00:34:24 :Par exemple, ici...Alors par contre, dans mes URL, elles n'avaient pas de comptesi je ne dégage pas tout pour l'instant.On emportera ce qu'il faut après.
00:34:32 :Ouais, bah, du coup, on va tout dégagerà la même occasion.Et ça, ouais, pour l'instant, on va dégager.Hop là.OK.C'est un peu ménage.
00:34:44 :Donc, par exemple, ici, on va aller redéfinirune méthode get.Hop.Notre requête.Et là, c'est parti.Donc, on va icichercher...Si, je l'ai importé, l'auteur ? Ouais.
00:35:00 :.object.all.object.allOK. On va récupérer notreSerializer, ici.Et qu'est-ce qu'on va faire ? Eh bien, on va allerrécupérer l'auteur Serializereton lui envoie notrehop là, notre Queriesetet, du coup,comme c'est une liste, il faut le spécifiercomme dans la vue qu'on avait avant.
00:35:24 :Et, comme on l'avait fait avant,on faitune response avec le Serializer.dataDonc là, en fait, il n'y a pasgrand-chose qui change par rapport à avant.
00:35:36 :On va juste finir la vueet, en fait, vous allez redéfinirune méthodepar...par type de requête.Donc là, c'est pareil.Hop. On va utiliser notre
00:35:50 :Serializer, ici.Voilà.Le SourceSerializer.data, ça va être les...notre request,plutôt. Ce sera mieux, voilà.Hop.Et, comme tout à l'heure, on va faire unif Serializer.is
00:36:10 :valide. Donc là, vous allez voir qu'en fait,il n'y a pas énormément de choses qui changent.On le sauvegarde.Hop. Et qu'est-ce qu'on fait ?
00:36:18 :On retournela réponse,ici. Et donc, ça va être quoi ?Serializer.dataet le statut ?201.Oui.On ne va pas oublier, quand même. On va envoyer une...
00:36:36 :On va géreren cas d'erreur, ici. Tac.Errors.Status. Et on va mettreun...400.OK. Donc là,je sauvegardais.Maintenant,on peut aller dans les URL.
00:36:58 :On ne fait plus rien. Du coup, on a tout dégagé.Hop.Euh....views. Non, je ne suis pas dansle bon... On va appeler comment le livrer ?
00:37:08 :.views.On va importeret je vais appeler comment...Tac.Comme ça.Hop.Euh... Copilot, fais-moitoute la suite, s'il te plaît.Tac.Voilà.Je mélange le serveur, ici.
00:37:31 :Et normalement, si je vais dans Autors,sauf si j'ai une erreur, on débloquera.Voilà. Donc, vous voyez, là,j'ai exactement comme on avait tout à l'heure pour les auteurs.
00:37:39 :Donc, on ala version qu'on avait avant.On avait une version, entre guillemets,AP et VIEW avec une fonction.Et là, on a une VIEWen mode classe, avecchaque méthode pour redessinerla fonction. Alors,
00:37:55 :je préfère largement cette façon de faire.Mais, euh...On verra, pour la prochaine fois,qu'il y a encore, euh...La... Comment dire ?Il y a encore plus...
00:38:07 :Ouais, on pourrait y en avoir une abstractionencore un peu plus poussée.Mais on va en voir plusieurs.Et la prochaine fois, on verra comment faire, du coup,pour faire laDETAILS VIEW pour ça.
00:38:19 :On sera, du coup, euh...Ouais, est-ce qu'on...Ouais, est-ce qu'on...Lance la listeCREATE. On se fera une GETavec un objet.Ouais. On... OK.
00:38:33 :Je vais m'arrêter là. La prochaine fois, on continueraun petit peu sur les AP et VIEW.On en fera une dernière.AP et VIEW. Juste pour vous dire,
00:38:41 :différencier, en fait, les vues de détails et une vue de liste.Et après, on passeradirectement sur les vues génériques.Et là, vous allez voir qu'on vapouvoir réduirele code, par exemple.
00:38:53 :Genre...Allez, à peu près...On va pouvoir dégagertout cette code, et tout ce qu'on fait là,on pourra le faire en deux lignes de code.
00:39:03 :Ça me paraît pas mal. On fera ça.Ça a été, du coup, ou pas ?Oui.C'était bien.Nickel.Je suis allé un peu vite. Désolé, des fois,
00:39:15 :je ne fais pas gaffe. Dites-le moisi, des fois, je parle trop.Si, Johanna,j'ai entendu ton message.N'hésitez pas à me couper la parole.
00:39:25 :Il n'y a pas de problème.On a fini, en gros, sur lesserializers. Tout ce qu'on a vu depuis le début,on a fait au moins deux, trois...
00:39:33 :C'est le troisième mentor. On a faitdeux mentors et demi, voire plus, sur les serializers.Après, vous allez encoredécouvrir sur les serializers, mais là, on a vu plusque les bases.
00:39:43 :Et là, sur les vues, on a introduit les AP et VIEW.Enfin, pas en décorateur,mais vraiment en classe.On fera une vue de détail la prochaine fois en AP et VIEW.
00:39:51 :Et on attaquerales vues génériques.Et je penseque peut-être pas la prochaine fois,on fera...La prochaine fois, on fera les vues génériques.Et la fois encore d'après,je pense qu'on fera les modèles VIEW 7.
00:40:09 :Voilà.Et les modèles VIEW 7, vous verrez que c'est encore...C'est bien tant qu'il ne faut pastrop de personnalisation.Et puis, on verra d'autres choses.
00:40:19 :On verra les tokens et tout.Tout ce qui est JWT et tout.Mais ça, je pense qu'on a au moins...Je pense que je vais prévoir encoreau moins trois mentors qui vont suivre,peut-être cinq même, sur DRF.
00:40:31 :On va se faire une longue série, je pense.Si ça vous va,si vous voulez changer de sujet, vous me le dites.Si ça vous va.
00:40:39 :C'est intéressant.Ça changera de...On va faire du Django.Django, j'adore, mais ça changera un petit peu.On va faire une grosse série DRF.C'est pratique pour faire desjournaux de log et tout ça aussi.
00:40:53 :Ouais, tes API.Après,c'est vraiment pratiquepour tout dans le sens oùtu branches ce que tu veux dessus.Tu l'appelles où tu veux.C'est ça.
00:41:07 :Si tu veux du BGS,tant mieux.J'utilise Streamlit avec...J'ai déjà fait un front.On peut dire ça.J'avais mon application Streamlitet qui appelait des vues DRF.
00:41:21 :C'est possible aussi, par exemple.Donc, voilà.Je ne sais pas s'il y a des questions.Non, c'est bon.C'est bon ?Ok.Écoutez, on se retrouvela semaine prochaine.
00:41:39 :Non,on se retrouve la semaine prochaine, il n'y a pas de problème.Juste,on doit annoncer que Thibault...Il faut que je revienne avec lui.
00:41:49 :J'annonce rien sans lui.Il risque d'y avoir une pause d'une semaine ou deux.La semaine du 24...Les vacances d'une semaine.Ouais.La semaine du 24décembre.
Aucune occurrence trouvée pour « ».
00:00:10
Introduction Django 6.0
00:09:26
Le bug était juste sous nos yeux :)
00:15:18
PrimaryKeyRelatedField : contrôle sur les relations étrangères
00:19:28
StringRelatedField : représentation str de la clé étrangère
00:22:25
Serializers imbriqués : Nested Serializers
00:31:43
Introduction à l'APIView : première CBV