Session du 02 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
Session de mentorat Django Rest Framework (drf). On va continuer sur les ModelSerializer
00:00:00 :Et on va partager l'écran.Ça enregistre. Nickel.Et on voit mon écran.C'est assez zoomé là ou pas ?Oui.J'avais fait quoi comme route déjà ?
00:00:40 :Je ne me souviens plus.On avait des vues pour les auteurs,des vues pour la liste,pour le create.On avait le détail.On utilisait AutorSerializer.
00:00:57 :Ok, c'est ici.Il est là.Ça va Thomas ?Allo Thomas ?C'est le père bleu.Du coup, on avaitles bouches Serializer.On n'avait pas encore utilisé dans les vues.
00:01:28 :On verra après ça.Ok, nickel.Là, c'est vraiment monté sur les Serializer encore.Vous vous souvenez quand c'étaitarrêté à ça ou pas ?Vous parlez des modèles Serializeravec le drone Serializer ici ?
00:01:44 :Ou pas ?Du tout.Je continue de faire la lancer sinon.Oui, c'est bon.Même moi, je viens de l'y remettre avec vous.Nickel.Pour l'instant, on n'avait que nos vuespour les auteurs.
00:02:07 :On avait commencé à créer les Serializerpour les livres ici etpour les emprunts.J'avais créé une méthode validateici, sauf qu'on l'avait déjà vupour les méthodes pour les Serializernormaux.
00:02:21 :Les Serializer et pas les modèles Serializer.J'avais mis plein de choses icimais vu qu'on l'avait déjà vu, on va juste faireun exemple de méthode de validationà la limite.
00:02:31 :Pour revenir un peu dessus.La validation,elle est hyper pratiquedans le senspar exemple, on ne va pas faire tout ça.On va se mettre...
00:02:43 :On peut vérifier si la date de retourest entre guillemetsbien après la date d'empruntpar exemple. On peut faire ça.On va juste en faire une.
00:02:53 :Donc, toujoursce que je fais, c'est que je retourne toujours les données.Je retourne toujours les données.Et hop là, on va se faire...Je ne sais pas si c'est faire ce que je veux.
00:03:03 :On va se diresion a une instancedéjà crééeetqu'on aon récupère du couple returndate. Donc, le return date, ça va être
00:03:23 :notre date de retour ici.Qu'on récupère quand il y a une soumission.Qu'est-ce qu'on peut faire ?On peut se direhop, on peut se diredata icireturn dateDonc, ça va être inférieurparce que si la date de retour, c'est ça.
00:03:43 :Ouais, c'est bon.Si c'est inf, donc la date de retourest inférieure à la date récupéréed'empruntborrow dated'accordet bien on peut se direse leverune validationerreur.
00:04:03 :La date deretour doit êtreaprèsla date d'empruntdans le genre.Euhhop làd'emprunt, d'emprunt, d'empruntEn gros, vous voyez, c'est qu'on adéjà fait une méthode comme ça de validationun validate.
00:04:25 :J'en ai refait une comme ça pourrafraîchir la mémoire. Donc comme çale serializer, si jamais la date de retourelle est faiteenfin dateprécédente à la date d'emprunt, voilà, on aura une erreurde levée.
00:04:39 :Donc là, je compare plusieurs champsentre guillemets. On pourraitalorsje vais essayer de revenir dessusça pourrait être pas malvoir ce que c'étaitsi je pars directement sur le menuvoilàvalidationvoilànickelvoilà. Donc ce que je disais
00:05:09 :c'est qu'ici, on a fait une méthodevalidate généralemais si vous vous souvenez bienon peut toujours faire une méthode validateunderscoreet le champ qui nous intéressedonc le champ qualité ici, okdonc on peut lever les erreurs directementpar une validation au niveau d'un champ précisou global. Moi j'ai fait une globale
00:05:29 :parce qu'ici je vérifieplusieurs champs entre guillemetsdonc on vérifie plusieurs champs, on va plutôt faire une globalesi on vérifie vraiment quelque chosesur un champ précison va vraiment utiliser le nom du champvoilàdonc comme avec les formulaires Djangoavec les méthodes cleanokmerciattendez
00:05:53 :je réponds justeeuhhopdoncici on a refaitun serializermaintenant on va voir commenton peutcomment on peuton va se faire unce qu'on appelle unserializer method field, on va se faire un champ personnalieret après on mettratout ça en oeuvre dans des vues
00:06:27 :là pour l'instant je suis purement sur lessur lessur les serializersdoncon pourraitsaisir ici par exemplealorson va se créer une méthode icipour afficherle statut d'un empruntça me paraît pas mal de faire çadonceuhon va faire ça ouaisje pense que je réfléchis en même temps
00:06:59 :euhouais allezun exemple tout bêteon va vérifieron va se faire une méthodegetStatus comme çaet euhdonc on va avoir notre instancec'est notre instance et l'objetcomment ça se passe on va se direon va retourner comme çaeuhouais retournerpuisla date de retour
00:07:35 :du coupsi on a une date de retour sinons'il n'y a pas une date de retour entre guillemetson va mettre en coursdonc là on va créer une méthode comme çagetStatusensuitepourque ce champ làsi vous vous souvenez bienstatus, loan icion n'a pas de
00:08:01 :on n'a pas de champ statusdonc ce qu'on va faire c'est qu'on vase faire un champ personnaliséiciet on va dire quoi.signalizer
00:08:15 :et en fait le faitd'avoir crééune méthode qui s'appellegetStatus comme çaquand on va créer un champ statusbah en faiteuhDjango restera mort va savoir du coupqu'il faut utiliser cette méthode làpour retourner ce champdonc il va savoirqu'il va falloir utiliser cette méthode là
00:08:39 :ouipar rapport à ce champbien sûren fait il va récupérerc'est l'underscore en faitouais c'est ça c'est comme quand on faitvalidate underscorenom du champ par exemplec'est pareilc'est le même principec'est commeles kills dans Djangoouais quand on fait ouaisdu clean
00:09:07 :ainsi de suiteeuhalors je suis un peu rouillé sur les RFmais on va voir ça devrait marcherpeut-être c'est ça c'est comme ça que ça marcheles getStatus et du coup il faut bien utiliserce qu'il appelle la méthodefield issue et comme ça tout seul ça va utiliser ça
00:09:23 :euhdonc on vapouvoir se refaire unedernière mini vue très très simpleavant deavant de passer sur lesles vues entre guillemets plusquoi queon va peut-être continuer un petit peusur les serializers avec des vues simplesouais on va faire d'autresje me suis metté pas mal de choses
00:09:47 :euhouais on va rester là dessusbon je vais créer une autre vueon va s'emporter notreserializer icihop c'est partiok doncvous vous souvenezon fait une API view iciet euhon va utiliserune méthode geteuhet ensuite on va se l'appelereuh ouais l'owner
00:10:21 :on va faire une vue deune vue de liste entre guillemetsc'est ce qui sera tout pratique, ça sera bien pour illustrernotre serializeret qu'est-ce qu'on va dire icicomme querySet on va se fairel'ownok doncl'ownpointobject.all
00:10:43 :là on récupère toutpeu importe, quand même c'est tout l'utilisateur comme çapour les exemples ça va être pas malet en serializer on va s'utiliser du couple lownSerializerhop làon va lui passer notre querySet et on va lui direvu que c'est une listeon aura plusieurs instances
00:11:03 :et ensuite comme la dernière fois on va retournerun objetResponsecomme ça avec les datadu serializertout simplementon va rester simpleet ici on va s'importer notrelownListet c'est parti on va se créer une petite vueune URL je veux direet on va l'appeler tout simplement
00:11:25 :lownListsuper lownListlownListet on va l'appelerlownListoknickel hopallez c'est parti on va lancerle serveurhop làeuhtacj'avais ditil n'y a pas encore d'empreintje pense qu'on avait rien créé en basedonc on va allerdans l'adminhopalorseuhon avait des auteurs
00:12:23 :on avait fait un peu n'importe quoion avait pas de livre encoreon va se créer un livreon va l'appeler commentla nuithop c'est Thomas qui l'a écriton va en créer un nouveau aussic'est Barjavel qui l'a écritvoilàon va se créer un autre livre
00:12:47 :je sais pason pourra s'écrirediagonhopoket ensuite on sert un empreintqui a emprunté un livreon va avoir moila nuit des temps et il n'y a pas de date de retour encorehop là okje suis icivous voyezdonc je sais qu'elleenfin je sais pas parce que c'est qu'un pk
00:13:19 :mais avec la clé primaire on pourra facilementrécupérer savoir qui aqui a emprunté le livrequel livre c'estet ce qui est intéressant ici c'est le statutvous voyez là il est en courslà il est en coursmais si je vais lui mettre une date de retour
00:13:37 :il va bien me mettre retournéà moins que je sois gouréhopil revient làet vous voyez là il met retournédoncje pense que vous avez compris le principec'est pas hyper compliqué làon va se créer un champ calculéavec unmethod fieldil faut bien penser à cette classe là
00:14:03 :c'est bon ça du coup ?ouiokouimercidoncon va allerréfléchiron va se faire une propertieen même tempsj'ai prévu en faitd'écrire un guide, j'ai déjà commencésur la DRFet comme ça c'est bien ce que je fais làje vais vous faire la même chose
00:14:33 :sur le guideça va être coolon va avoir le modèle loan iciet doncouais alorsc'est ce que je voulais faireon va le faire làen gros moi si j'ai ce genre de champ làen moyenneje peux vous dire que je ne ferais pas ça ici
00:14:53 :donc je vaison va garder ce champ là statuthopce que je ferais plutôtmoi c'est aller me faire une propriétédonc vous avez vu qu'on peut faire un method field comme çaon va se faire une propriété icij'utiliseénormément les propriétésdes fois par modèleje peux en avoir 5-6 à l'aise
00:15:17 :on va se direon va se retourner icion va faire comme on a fait avantretournersi on aune retourne datesinon encoreokdonc là on est pas sur un champdu modèleon est sur une propriété calculéemaison l'a appelé statutj'ai laissé ici du coup nickel
00:15:45 :et en fait quand on envoie ici dans les champsune propriété par exemplesi jeretourne làhop vous voyez c'est toujours làdonc on peut très bien ici définirdéfinir des propriétés iciet les utiliser dans lessérialiseurs comme si c'était un champ normalc'est bon ça du coup ?
00:16:09 :ça éviterait des données pour rienen faiton pourrait créer unmethod field comme on a fait tout à l'heure mais quand c'est vraimentjuste pour le sérialiseurlà par exemple çapour moi clairement ça a plus sa placedans le modèleparce qu'on pourrait le réutiliser à plusieurs endroits
00:16:29 :voilàdonc voilàpar contre si onen met à jour le statutça devientje veux dire si par exemple tu poussesdans le jsonon court alors que t'as retournéça réagit comment ?
00:16:51 :ou la propriété prend le dessus ?attends tu m'as dit quoi ?sisi une application externepousse dans le jsondans le statutun statut qui n'est pas conforme au contraireà ce qui est écrit dans la propriétécomment va réagirle sérialiseur ?
00:17:11 :est-ce qu'il va ignorer le statut ?de toute façontoi entre guillemetstu vas pas t'attendre à recevoirentre guillemets un statuttu vas t'attendre à recevoirla date de retourparce que le statutn'est pas en baseoui c'est çamais comme il l'a mis sur le json
00:17:33 :je ne savais pas si dans l'esprittu le gardais oufinalementtu le retourne pasouais alors pour lesà ce moment là tu peuxpour lecomment dire lej'ai oubliépour la créationton formulaireton sérialiseurà voirsi tu fais un sérialiseurpour la créationest-ce que
00:18:05 :tu fais le même ?tu fais en sorte d'ignorer le champ statutou est-ce quetu fais un sérialiseur purement pour la créationtu dégages le statut quoion va voiron va voiren fait t'as plein de possibilitésje m'attendais à plein de possibilitésexcuse moialorsqu'est-ce que j'allais dire du coup
00:18:37 :je vais se lécher un peuest-ce qu'on vaest-ce qu'on va se créereuhj'avais bien enviej'avais bien envie de joueravec l'auteur du coupil est où ? il est là
00:18:59 :j'ai bien joué avec l'auteur dans le sens oùon pourraitcréer une méthodeici etje réfléchis en même tempsbrefon va pason va pas forcément faireje vais juste montrer quelque choseil serait possibleen faitdans un sérialiseurs'il y a besoin par exempleimaginons
00:19:31 :alors imaginonson va le faire pour défautj'ai pas trop d'idéeson va le faire iciméthodesuiteimaginons qu'on ait çaqu'on ait tous nos champsmoi je préfère les mettre explicitementdonc monlà je l'ai mis comme çaj'aime bien vraiment mettre ma listemaintenantvous avez une propriété comme ça
00:20:01 :on pourraitici éventuellementalorsjuste pour vous montrer une logiqueon pourrait se récupérercarrément la request dans les sérialiseurson pourrait se récupérerla requestil y a un contexteçaet vous allez voir commenton fait pour la récupéreron pourrait se direpar exemple.user
00:20:31 :.isstaffon fait quelque choseon pourrait imaginer un truc dans le genrecomme ça j'ai pas d'idéesc'est juste pour vous dire qu'on peut envoyer la requestalorson peut utiliser la requestmais pour ça il faudrait penserdans vos sérialiseurs de hauteurdans la vueon va se mettre
00:20:55 :là par exempleil faudrait penserà envoyerdans lecomment diredans leavec le sérialiseur en fait envoyer la requestdonc genre ici on pourrait faire comme çapar exemple envoyer le contextetacet le contexte on pourrait lui direrequest c'est quoiet bien c'est la request comme ça
00:21:21 :vous voyez par les vues en fait vous pouvez vous amuserà envoyer du contexteet donc à envoyer la requête par exemple icienvoyer la requête tac et la faire passerau sérialiseur, il a passé au sérialiseurvoilà ça c'est possibleeuhc'était juste avantavant de faire autre chose que les sérialiseurs
00:21:39 :je voulais vous montrer çabon j'ai un fait spécial quoi mais c'est possible en tout cashop làtacokeuhest-ce qu'on va pasest-ce qu'on pourrait paseuhahallez on va se faire un exemple completon va aller dans les boucles sérialiseurs icieuh on a quoi comme champ
00:22:09 :tac okon va se créer unon va se créer un nouveau champiciok on va l'appeleron va faire des fauteshopon va utiliser unun métatricetacdonc si on fait çaeuhsi on fait ça du coupon va se créer du coupun
00:22:43 :on va ajouter le champ icihopok d'accord c'est génialhopet là du coup on va se créercomme on a fait tout à l'heure ici avecc'était quoi déjàce que j'avais crééeuhbref c'était quoiah le statutouais avec le statuthop donc là on va se faire un truc
00:23:13 :hop on va se direpleasego awaylike thathopl'objet et qu'est ce qu'on pourrait très bien direon peut se dire bahon va récupérer la requête déjàon va s'amuser avec la requêtehopcontext.get
00:23:37 :la requêteet on pourrait très bien dire du coupeuhpour récupérer une requête il n'y a pas besoin de la mettreenen argument de la fonctionnon non nonen fait parce que tuje vais te remontreraprès ce qu'on va faire dans la vueen fait ça va être
00:24:01 :directement dans un attributd'instancetu peux récupérerle contexteet dans le contexte si tu as la requêtetu peux facilement la récupérer sans l'avoiren argument icieuhje réfléchisla conditionbon on va faire un truc simpleeuh .user
00:24:25 :authenticalitéje n'ai pas fait de faute, nickelet qu'est ce qu'on peut faire icion va faireobject.twitterici on va se direeuhoklà on récupère le livrequi est làeuhje réfléchis en même tempsben c'est ça on va récupérer le livre iciet on va se dire
00:24:59 :benqui doit être ça que j'avais fait je ne sais plusemprunter par quiuseret ben ça va être du couprequest.userok on peut faire çaet bien sûr ce qu'on doit faire du coupfaut pas qu'on les retournedonclà on va se faire unretour
00:25:23 :euh je réfléchis en même tempsreturn date icion va se dire19donc ça en grosc'est pour bien vérifier qu'il n'y a pas de date de retourc'est bien nulet on va se faire un .exist
00:25:39 :c'est assez efficace de faire çaet comme ça du coupeuhlà ça va nous retourner ce coupsieuh le livre on l'a empruntéqu'il n'y a pas de date de retoursinon qu'est-ce qu'on faiton va se faire un return de sortiepar contre du coupon va aller devoir se créer
00:26:01 :c'est bon pour l'instanty'a pas de problèmeouidoncThomas ce que tu disais tout à l'heure c'est qu'icion va restanton va se faire une mini vueencore un API viewaprès on va arrêter que ça parce que ça me saoule les API viewil y a tellement de trucs cool
00:26:21 :en DRFc'est pratique maisc'est bien c'est pasc'est bien les API viewmais vous allez voir que quand vous allezdécouvrir les autres vous allez arrêtervous n'aurez plus à utiliser çaeuhj'ai trop de code làça va pashopok j'ai pas mon modèleon récupère
00:26:55 :tous les livreset après on va se prendreun serializer ici qu'on a pas dûimporter j'imaginevoilà c'est mieuxserializeril y a un serializer icic'est serializerqui se déclenche maintenant génialeuhdonc serializer et qu'est ce qu'on va lui direici donc nos books, nos livres
00:27:21 :manyparce qu'on renvoie une listeet là qu'est ce qu'on avait dit tout à l'heure du coupon va envoyer en contexte icieuhtacla requestet comme çaça va être transmisau serializer via son contexteet du coup pas besoin de l'avoiren paramètre puisqu'on récupère dans l'attribut
00:27:45 :d'instance de contexte icivoilà doncà l'aideah ça passe forcément par la fonctionget isque t'as créébah en faitdans ton serializeraprès tu peux récupérerle contextec'est comme un attribut d'instance donc tu peux le récupérerà plusieurs endroits différentsde ton serializer, juste à d'autres méthodes
00:28:11 :mais là quand t'as mis contexteégal request ça va forcémentprendre celui là, si t'en as plusieursça va te mettre touseuh attends j'ai pasen gros là ici mon contextec'est bien request okdonc je suis où, je suis perdurequest request je suis làdonc ici si je récupère bien
00:28:31 :comme ça requestmais c'est une fonction en dessousah oui ouiune fonction avec request ça va t'en mettreplusieurs là dans leah bah non mais tu peux très bien récupérerton request à plusieursendroits après tu peux la récupérerde ton serializermoi ça m'est déjà arrivé je crois de la récupérer par exemple
00:28:51 :dans les méthodes de validation oumais dans la vue comment tu peux me fairepour que ce soit par exemple cette requestlà spécifique qui soit prisepas la request par exemple qui m'est plus lointu vois ce que je veux direj'ai du mal à voirce que tu voulais
00:29:07 :parce quevoilà il y a qu'une fonction qui l'amais s'il y a plusieurs fonctions qui l'a tu vas la récupérerque dans cette fonction làahouaislà j'ai ma casebook serializerdonctu parlessi j'avais une deuxième vue ousi par exemplet'as vu si t'avais une deuxième
00:29:31 :dans ton serializer que t'as faitsi t'avais une deuxième définitionune deuxième fonctiondedansqui demande le requestouaisbah tu pourrais très bien utiliser pareilexactement la même façontonpar exemple dans le bouc serializersi t'as getet là tu fais un get par exempletu utilises aussi le request
00:29:57 :comment il va fairelà il peut pas faire dans ta vuecomment il va faire la différenceentre celui qui serait dansle get statut et celui qui serait dansget is borrowed by mebah non après de toute façon entre guillemetsaprès la requête c'est la requête que tu l'utilises
00:30:13 :à plusieurs reprisesd'accordet puis tu peux pas rappeler requestune autre variable à l'intérieur de tafonctionouais c'est çadonc ouais tu l'utilises après tu le récupères à plusieurs endroitsça c'est pas un problèmebon j'ai déjà rêvé de le récupérer à plusieurs endroitsquand je bossais avec
00:30:33 :j'ai été surle booklist etdu coup comme d'habok on va se faire une responseetserializer.datahop làokj'ai oublié un trucj'ai oublié un truchumça passe trop vite le tempson va tester ça maintenantj'ai l'impression qu'on a le temps de rien faire
00:31:07 :ça va trop vitebooklistbooklist okbon on va essayerde lancer le serveurok je regarde si j'ai pas fait d'erreurj'ai emprunté un livre, j'avais emprunté lequel moitout à l'heure à la base on va aller voirje sais plusla nuit est tempseton va voir s'il y a une erreur
00:31:35 :non ça vaj'ai fait une erreur, ah bah non j'ai mis une date de retour forcémentce jour là on avait dit qu'il devait être à nul dans la conditionon va vérifier avantc'est çaokon espère que ça va être slow maintenantnickel vous voyez iciça me renvoie bien slow
00:31:57 :puisque je l'ai emprunté et que je n'ai pas encore de date de retouron a bien slow donc on voit bienicion voit bien iciqu'on aentre guillemetsl'utilisateur connecté icion récupère bienle livre en question icion va bien récupérer cet utilisateur làet bien vérifier
00:32:21 :siil n'y a pas de retour de date iciqu'on va renvoyerslow du coup s'il l'a emprunté quoidonc voilà pour le passagede la requêtec'est un petit exemplej'ai bien envieparce queles siens et les heures en fait on n'a pas encore finion va voir un peu
00:32:45 :les relations entre lesentre lessiens et les heureson voit çaentre guillemetsje pense qu'on vafaire en sorted'utiliseron va se faire çaon va se faire des nestel de siens et les heures en faitutiliser des siens et les heures dans d'autres siens et les heures
00:33:07 :entre guillemetsoui c'est possibleil cherche plus sympa de nos informationson se fera ça la prochaine foisil est quelle heureil va bientôt être 21h40et je suis désolédes fois j'aime bien pousser un peumais j'ai un rendez-vous qui commence à 45donc je suis désolé
00:33:27 :j'ai l'impression qu'on n'a pas vu grand chosemais est-ce que ça a étévous avez compris la plupart des choses qu'on a fait làle principeça a étéassez bienje pense que les quelques lignesque tu as écritil faut les avoir en têteouaisc'est parce que j'ai rushé
00:33:49 :peut-êtrequelques temps surDjango Extrême-Horreur mais il y a longtempsje suis un peu rouillé des foisj'ai mes notes avec moicomprendre la lignec'est dispensépar rapport au conceptil faut se projeterc'est sûrouaisdonc voilàaujourd'hui ce que je voulais vous montrer c'est surtoutici
00:34:17 :je voulais vous montrer plus de chosesà la baserevoir le Validate qu'on a fait icivoir qu'on peut afficherles propriétés comme çafacilement comme un champet surtout qu'on pouvait s'amuser à passerdu contexte et notamment icila requêtele contexte le plus courant je pense en DRF
00:34:37 :c'est de passer la requête comme ça dans les serialisersdonc voilàs'il y a des questions ou pas, si jamais je peux y répondreil n'y a pas de problèmenon non c'est bon pour moinon c'est bonje reverrai mes mentoratsaprès avoir bien lu la documentationet je pense que ça part beaucoup plus
00:34:55 :ouaiscomplètementje vous dis la prochaine foison va l'imbriquer des serialisersentre euxça peut être sympaje pensais taper assez vite dans les vuesmaisje pense qu'on verra ça au prochainmais la suite après le mentoratet encore dans les vues on verraplusieurs choses parce qu'on va avoir des vues génériques
Aucune occurrence trouvée pour « ».
00:02:06
Méthode validate
00:08:06
SerializerMethodField : "champs calculés"
00:14:28
Afficher une property dans un ModelSerializer
00:19:33
Envoyer la requête dans les serializers