Session du 06 janvier 2026 à 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 DRF
Nous allons continuer la série DRF commencée en 2025 :) On parle des ModelViewSet.
00:00:00 :Super, c'est lancé.Alors, je réfléchis juste, on va voir du coup...Rebonnez à tout le monde.Là, on a fait quoi ? Deux semaines ? Trois semaines ? Deux semaines de coupure ?
00:00:17 :Bon, du coup, je vais me mettre dedans aussi.On va reprendre le projet qu'on a fait avant de Django Enterprise Work.On va le continuer.
00:00:28 :J'accède juste à quelqu'un.Super, bonsoir.On commence tout juste.Bonsoir.Du coup, j'ai dit, oui, en fait, là, on va continuer un mentorat qui fait partie d'une...
00:00:57 :Comment dire ?Qui fait partie d'une suite de mentorats qu'on a déjà commencé.Je ne sais plus le premier, si on avait commencé en novembre ou début décembre.
00:01:07 :Parce que ça fait déjà au moins le quatrième, je crois, celui-là.Ou cinquième, même.Cinquième, je crois.C'était le mi-novembre, je crois, à peu près.
00:01:16 :C'était le sixième, ça.Ah oui, d'accord, ok.Je m'attarde un petit peu, du coup.Je passe peut-être un peu trop de temps sur certaines choses, mais bon, on va...
00:01:28 :Au moins, il va être assez complet.Du coup, je ne sais pas, il y en a peut-être qu'on a loupé.C'est qui, peut-être, que tu n'en as jamais fait, du coup ?
00:01:39 :Et Serge, tu as peut-être déjà fait un rest framework, je ne sais plus.Non, moi, jamais, Django rest framework.Jamais, ok.Et Serge, on en a parlé l'autre fois.
00:01:52 :Ok, ok.Bon, du coup, là, désolé pour ceux qui reprennent un peu en cours de route.Là, on est vraiment sur de l'API.Alors, j'ai juste...
00:02:03 :Je n'ai pas lancé le projet depuis la dernière fois.Tac.Hop, là, il va me faire l'assurement pour que je vote.Ok, et on avait genre API en vue, je ne sais plus.
00:02:23 :API...Sur la commande, tu as marqué .sash manage.py.Je ne sais pas si ça a marché.J'ai lancé mon...Ça, c'est bon.Je l'étais dans mes URL, d'ailleurs.
00:02:43 :Ok, j'ai admin, j'ai...Ok, books.Et je n'ai pas appuyé, ok, d'accord.Je suis parti directement sur une URL comme ça.Ok, voilà, d'accord.On voit bien l'écran, là, ou moyen ?
00:02:57 :Non, c'est bon, on voit bien.C'est bon.Ouais, c'est bon.Bon, pour ceux qui n'étaient pas là, pour ceux qui étaient là,le petit rappel, c'était un projet d'empreintes de livres.
00:03:08 :Ici, on avait des modèles pour la base de données.On avait des auteurs.Bon, j'ai fait des modèles très simples,parce que le but, c'était vraiment de plus se faire du rest frameworkque du pur modèle de base de données.
00:03:23 :On avait un modèle pour les livres, avec l'auteur en clé étrangère,et des empreintes.Donc, un utilisateur qui va emprunter des livres.Voilà, donc, très simple.
00:03:36 :Je me remets dedans les serializers.Donc, pour ceux qui n'ont jamais vu, en fait, le principe de...Je vous invite déjà à revoir les anciens mentorats qu'on a faits.
00:03:47 :Les serializers, en fait, ça va servir de formulaire, quoi, de filtre,de sécurité pour recevoir des données et en envoyer, en fait.Donc, on pourrait très bien dire créer une API sans serializeret envoyer tout à l'arrache dans les éditionnaires.
00:04:06 :Bon, j'ai déjà vu ça une fois, mais c'est pas du tout sécurisé.Nous, on utilise vraiment des serializers.Comme ça, tout passe à travers les serializers,et on profite de la sécurité de l'ango.
00:04:19 :Donc, en gros, les serializers permettent de recevoir du...Recevoir du JSON et le transformer en Pythonet envoyer, en fait, des objets de Python qu'il va envoyer en JSON.
00:04:32 :Pour ceux qui n'étaient pas là, c'est la première fois.Donc, là, par exemple, je suis sur la vue boops.Donc, l'URL boops, qui est booklist.createView,
00:04:42 :qui est ici, qui va utiliser le serializer booklist.serializer.Serializer, booklist.serializer.On vérifie, on regarde s'il est, entre guillemets, emprunté par moi,et on va voir, du coup, toutes les informations de l'auteur.
00:04:59 :On a un serializer imbriqué, en fait, ici.Pour ceux qui étaient là, je ne sais pas si vous vous souvenez,on avait, en fait, ici, pour l'auteur, fait un serializer imbriqué, ici.
00:05:11 :Bon, les serializers, on avait fait pas mal de choses.On avait fait du serializer imbriqué, on avait vu les APIView.La dernière fois, on a vu tout ce qui est vue générique.
00:05:20 :Voilà, donc, list.createAPIView, list.createAPIView,enfin, il y a plein de vues génériques.On a vu qu'on pouvait les personnaliser, voilà.Par exemple, ici, on va définir des serializers différents selon les méthodes.
00:05:36 :On va, ici, filtrer les emprunts à l'utilisateur connecté, ainsi de suite.Maintenant, alors, tout ça, on en parlait dans l'ancien Montora, surtout pour ça.On va voir autre chose.
00:05:52 :On va voir un truc encore un peu plus, je ne sais pas si on peut dire plus cool,mais c'est quand même plus sympa.Est-ce que, déjà, avant, il y avait des questions ? On va continuer ou pas ?
00:06:05 :Je vais continuer, si on va lancer.Du coup, aujourd'hui, on va continuer sur les modèles Vue 7.Personne n'a déjà entendu parler de modèles Vue 7 ?
00:06:23 :Juste au cas où.Si on a confié un petit peu de remords pendant les vacances.Je n'ai pas trop besoin d'y revenir.OK.Alors, les modèles Vue 7.
00:06:36 :Bon, on va attaquer par ça, maintenant.Du coup, on va s'emporter ici.Alors, quelque chose de nouveau.Il y a plein d'importants là que je vais nettoyer.
00:06:46 :On verra si on aura besoin.Et je vais mettre mon import en haut.Voilà.Et j'ai coupé mon...Qu'est-ce qu'il s'appelle ?Au pilote, et on le réactivera s'il faut.
00:07:09 :On va être vite.Donc, on va importer ici.Vue 7, voilà.Cherchez.Et donc, là, vous allez voir à quel point c'est balèze.Alors, déjà, ici, on n'a plus de vue, ici, entre guillemets.
00:07:24 :On va toujours remettre un 9.Voilà.C'est quasiment un projet Django vierge au niveau des URL.Et on va se faire de la place.OK.
00:07:39 :C'est parti.Du coup, on avait créé des vues pour les auteurs,des vues pour les livres,et des vues pour les emprunts.Maintenant, je vais vous montrer vraiment un moyen hyper rapidede faire du CRUD.
00:07:52 :Donc, quand vous avez des APIs, on va dire, un peu plus...Enfin, assez...En fait, qui nécessitent du CRUD assez simple.Je vais vous montrer un truc de malade à mettre en place.
00:08:04 :Vous avez ici, par exemple, on va se créer pour les auteurs.Pour les auteurs, on va se faire un auteur vue 7, ici.Vue 7.
00:08:14 :Et d'ailleurs, je vais...Je vais faire n'importe quoi.On va encore dire que c'est un modèle vue 7, ici.On va utiliser ce qu'on appelle des modèles vue 7.
00:08:29 :Et du coup, quand vous faites ça,vous allez définir un Core Reset.Donc là, on va se dire, par exemple,on va récupérer tous les auteurs dans Core Reset.
00:08:42 :Et il faut lui dire aussi, par contre,qu'on va utiliser un serializer.Donc là, on va utiliser le serializer,autorSerializer, ici.On va rester basique pour l'instant.
00:08:52 :Donc on va lui dire, ici, la serializer class qu'on veut,c'est autorSerializer.Et là, déjà, on a fait...Vous allez voir qu'on a créé plein de choses entre lignes de code.
00:09:07 :On va juste ici, dans les URL,on va s'importer la vue qu'on a créée.Hop !On va faire notre vue 7, excusez-moi, chercher.Voilà.
00:09:22 :Et là, par contre, ça va être...Alors, le fonctionnement va...Je vais vous montrer, c'est un peu spécial.On va fonctionner, en fait, avec des routers, ici.
00:09:31 :Voilà.On va faire comme ça, réfléchir un peu.Hop là !On va le mettre là, on va le mettre à part.Donc on va importer, ici...
00:09:43 :le module routers.Et ce qu'on va faire, c'est qu'on va se définir.Bon, je fais un peu d'espace pour que ce soit bien clair.On va utiliser la classe de base, ici.
00:09:57 :Les followers.Donc on va créer ici, on a créé un router.Et maintenant, vous allez voir, c'est hyper sympa,parce qu'on va pouvoir se dire...
00:10:09 :se faire un register, ici.OK.Et on va se dire...On va faire une raw string.Tac.On va...Ici, on va utiliser, donc, le...
00:10:23 :Dans l'URL, on aura hauteur.Et on va envoyer, ici, notre vue set.OK.Et là, donc, plusieurs étapes, pour les URLs.On importe le router.
00:10:34 :On l'instancie.On va enregistrer, en fait, notre vue set, ici.OK.Et là, il faut bien penser...On va se créer, par exemple, un...Ça se traduit.
00:10:45 :Imaginons qu'on a une application Django,et qu'en plus de l'application Django basique, je ne sais pas, MVT,on va se faire une API.Donc là, on va se dire...
00:10:52 :Allez, on va se faire un petit chemin API.Et ici, on va faire un include.Un include qu'on va importer de base, ici.Et qu'est-ce qu'on va dire ?
00:11:05 :On va inclure les URLs du router, simplement.Hop.Tac.Et donc là...Donc, je reviens.Ici, on a créé la classe ModelViewSet.On définit un QuerySet.
00:11:19 :Le serializer à utiliser.Le router.On va importer le module router.On va créer notre instance de routers.On va enregistrer notre vue set.Et après, vous allez voir, du coup, ça va faire sens, en fait.
00:11:32 :On va importer les autres...On va créer d'autres vue sets.Et ici, on va inclure, dans les URLs, le router, là.Donc, en gros, maintenant...
00:11:41 :J'ai pas fait d'erreur.Bon, j'espère pas, parce que j'ai pas fait grand-chose.Euh...On va aller sur la...Là, du coup, ça n'existe plus.Voilà.
00:11:50 :On va aller sur API.Hop.Ça me paraît petit, quand même.Ouais, c'est bon.Donc là, vous voyez, on avait déjà des auteurs dans la...
00:12:03 :On fait n'importe quoi, là, dans la base de données.OK.Sauf que là, on arrive ici, avec notre méthode get,où on affiche la liste des...
00:12:12 :Comment dire ?La liste des auteurs.OK.Et quand vous regardez,vous avez la méthode post, directement ici.Tac.Euh...Vous avez la méthode post, qui est directement ici.
00:12:27 :Et en plus, ce qui est génial, c'est que, directement,dans ce qu'on appelle le browser d'API,ici, dans le Django framework,directement,euh...Comment dire ?
00:12:39 :Vous avez les champs pré-remplis, en fait.Voilà.Donc, par exemple...Hop.On va créer un auteur Serge.Tac.Voilà.Donc là, j'ai créé un auteur Serge.
00:12:49 :Ça me l'a renvoyé.Et...Euh...Je vais regarder quelque chose.Vite fait.Tac.OK.Hop là.Excusez-moi.Donc voilà.Vous pouvez, du coup, me dire...
00:13:05 :Revenir directement sur...J'ai fait une erreur.ID, c'est 3, ici.J'ai une idée.Non, bidon.Si on va prendre l'ID...Allez, on va le donner.
00:13:16 :ID 12.Donc, je peux aller sur la vue de détails.Et vous voyez, sur la vue de détails,j'ai directement...Euh...Ici, mon contenu, qui est pré-rempli,avec les informations.
00:13:28 :On peut faire, du coup, du patchpour modifier, en fait, notre...Comment dire ? Notre instance.Je vais mettre Serge...Modif.Tac.Donc là, il est bien modifié.
00:13:41 :Et en plus, j'ai à la fois la vue de suppression.Hop.Alors, une vue, t'as créé toutes les vues crudes, en fait.Ouais.En fait, là, j'ai fait tout en une seule vue.
00:13:51 :Donc, vous avez vu, là, j'ai créé...J'ai fait une poste, j'ai créé.Je suis allé sur un...Je suis allé sur une instance.J'ai pu la modifier.
00:13:58 :Je peux aussi la supprimer.Voilà.OK ?C'est bon, ça, ou pas ?Dites-moi si y'en a...Oui.Oui.C'est vrai que c'est beaucoup plus simple...
00:14:10 :En fait, c'est plus rapide que...Euh...Sur la précédente Montaura, en fait.Bah là, ouais, ouais, ouais.C'est...Euh...Ouais, c'est vraiment...J'aime bien les Middle View 7.
00:14:24 :J'ai tendance à faire beaucoup de vues génériques.Enfin, j'avais tendance à faire beaucoup de vues génériques.Quand même, avant.Ce sera peut-être que je revois.
00:14:31 :Si jamais je suis amené à faire du Rest Framework à fond...A voir pour personnaliser du modèle View 7.Mais ouais.Mais en général, j'avoue que j'ai tendance à faire de la vue générique.
00:14:41 :Mais si je pouvais, ouais, faire un View 7 comme ça,je trouve que c'est énorme.T'envoies...T'envoies trois lignes de code,et t'as toutes les grèves qui sont faites, là.
00:14:49 :Et du coup, le...Alors, ce qui est intéressant...On va...Réfléchir à quelque chose.Euh...Pourquoi j'ai 5 000 serveurs ?Je voulais réfléchir à quelque chose.
00:15:01 :Hop.Par contre, j'aimerais que tu me réexpliques la méthode Register, là.Euh...Pour le router ?Oui, c'est ça.Ah, et...Le Register et Django, en général, ça va ?
00:15:17 :Ou c'est justement que t'as un doute là-dessus ?Euh...Non, je connais pas vraiment, en fait.C'est pour ça que...Ouais, alors...Ouais, ok.Donc, en fait, en gros...
00:15:25 :Euh...En gros, on va faire...On va aller voir sur un exemple, ici.Euh...Tac.Mon dernier profil...Euh...Où est-ce que j'ai mis ?
00:15:40 :Non.Attends, est-ce que je vais le montrer sur celui-là ?Non, je vais aller sur un projet peut-être plus...Euh...Ok.Allez.On va aller sur celui-là.
00:15:53 :Ok.Euh...Imaginons que t'es...C'est pour voir, en fait, avec Django, entre guillemets...Une version Django standard.Imaginons que dans ton projet, t'es défisté à...
00:16:06 :Je sais pas...T'as ton...En fait, t'as ton dossier Project, ok ?Donc, comme on a...Ici, t'as toujours un dossier...Project, en fait.Avec ton fichier d'URL central.
00:16:17 :Ok ?Oui.Voilà.Donc, moi, ce que j'ai tendance à faire, c'est de pas tout mettre dedans.Tu vois ?Par exemple, ici, j'ai créé...
00:16:25 :Un chemin d'URL Accounts.J'ai fait...Un include, en fait, de Accounts.URL.Et...Dans Accounts, ici, je vais avoir...C'est avec les applications, en fait.On met...
00:16:42 :Ben, voilà.Un url.py par application.Et on l'inclut dans le fichier général,qui est géré par les settings de Django.Voilà.En gros, ici, j'ai mes vues dans Accounts.
00:16:54 :J'ai mon fichier d'URL pour Accounts.Du coup, ce qui se passe,c'est que pour accéder, du coup, à cette vue de profil,tu fais un...
00:17:03 :Ton site...Slash...Accounts...Et slash...Tac...Slash profil, tu vois ?C'est vraiment pour inclure d'autres fichiers URL, en fait.Oui, je le vois.Voilà.
00:17:18 :Et donc, là, en fait,c'est un peu le même principe.Tu vas inclure l'URL qui est, en fait, générée par le routeur, quoi.Mais non.
00:17:24 :Voilà.Donc...Parce que là, le but, c'est que...Quand on fait ça à un registreur, en fait,ici, ça va créer une URL pour...Enfin, les URLs pour AutorViewSet.
00:17:39 :Parce que, du coup, on a vu qu'on avait le...On a fait tout.On a fait la liste, on a fait le post,on a le patch, le delete, ainsi de suite.
00:17:47 :Donc, en fait, il faut bien t'inclure, en fait,les URLs du routeur dans l'URL pattern, en fait.Parce que si tu fais juste ça,Django ne serait pas au courant, quoi,entre guillemets, que ça existe.
00:17:58 :OK ?Ouais, OK.Mais, en fait, c'est dans la syntaxe R pour read.Ça dit quoi ?Dans routeur.register, ça a R.OK, ça, c'est bon.
00:18:11 :OK, attends.Hop.Le R, c'est une autre façon du FString.Ça s'affiche quand même.OK.Ouais, bon.Alors.Attends.Je vais montrer quelque chose.Qu'est-ce que je voulais faire ?
00:18:28 :ModelViewSet.On va aller sur ModelViewSet, ici.Ça permet d'inclure les apostrophes et tout ça.Je voulais te montrerpourquoi je fais ça.Est-ce qu'il ne met pas ici les URL, comment ça génère ?
00:18:45 :Avec les routeurs.Je ne sais plus s'il met les URL.Je ne sais pas ce que je voulais faire.ViewSet, ModelViewSet, OK.OK, je ne fais plus les métiers d'Aradocle.
00:19:08 :OK, je ne sais plus les métiers d'Aradocle,la gestion des URL des routeurs.Je vais taper Rango Construction Work Routers.Routers, il est là.Voilà.
00:19:22 :Dans la syntaxe de la doc,ils ont tendance à mettre les RowsTring.J'avoue que...Tiens, d'ailleurs...Attends, je vais faire un truc d'ailleurs.Je vais faire un truc avec CD, par exemple.
00:19:41 :Là, il dit 6.Je vais faire un autre truc.Donc, ils expliquent bien déjà...Ils expliquent bien qu'en fait,ça crée toutes ces URL-là,quand on raveau dans le routeur.
00:19:55 :Voilà.Mais ils utilisent effectivement des RowsTring.J'avoue qu'avec ou sans,je n'ai jamais eu de problème.Voilà.Je montre vraiment au niveau de leur convention à eux,ils les mettent toujours des RowsTring.
00:20:10 :Oui, je ne connaissais pas R.Je connaissais le T.Mais le R, je ne connaissais pas.Ah, tu n'as jamais...Ok, d'accord.J'ai jamais vu, c'est pour ça.
00:20:19 :Ok, ok.Alors, c'est plus utilisé, en fait,quand tu regardes les...Quand tu regardes dans les regex avec Python.Tu peux aller voir souvent...Je ne sais pas si tu as des exemples.
00:20:32 :Il y a un cours, il me semble,où on en parle, sur DocsTring.Voilà.Dans les regex, oui.Je ne sais pas si tu l'as croisé.
00:20:39 :Ok.Peut-être qu'il en parle avant,qu'il bouge, je ne sais plus.Ça permet de le rechercher.Voilà.Et c'est extrêmement...C'est même tout le temps utilisé dans les regexpour éviter que ça...
00:20:49 :Que les...Entre guillemets,que les anti-slash soient interprétés.Voilà.Parce qu'en Python,quand tu as des anti-slash n,ça va te faire des espaces.Sauf qu'avec les regex,tu ne veux pas que ça te fasse des espaces.
00:20:59 :Tu veux vraiment que ça soit comptécomme une regex, entre guillemets,en brut.Donc ça permet de faire des chaînes brutes,en fait,quand tu fais des raw strings.
00:21:06 :Pour éviter tout ce qui se passe.Voilà.Ok.Je ne connaissais pas.Ça marche.Merci.J'utilise surtout ça avec les regex.Et les regex,honnêtement,c'est surtout Lya qui me les fait.
00:21:16 :Parce que je ne suis pas un pro de la regex non plus.Tac.Tac.Et donc,j'en étais où ?En fait,j'en étais où ?
00:21:23 :En fait,j'en étais où ?En fait,j'en étais où ?En fait,j'en étais où ?Oui.Donc,le principe,du coup,d'avoir des routers comme ça.
00:21:34 :Alors,ce qui va être sympa,c'est qu'on va le faire assez rapidement.On va,je pense,on va se faire même des,allez,on va se faire des,des u7,un peu différemment à chaque fois.
00:21:44 :On va se faire un boucle u7,ici.On va se faire un boucle u7.On va utiliser le modèle u7.Tac.Là,comme d'hab,on va se dire,on va se faire le polysetboucleu7.
00:21:55 :On va se faire le polysetboucleu7.Object.Hold.Voilà.On retourne tous les livres.Et là,au lieu de se faire,en fait,un attribut sérieux,dire classe,on vaamener un peu de personnalisation.
00:22:09 :On peut se définir,redéfinir la méthode,ici.Je viens de la trouver.Hop là.Hop.Qu'est-ce qu'on pourrait dire,ici ?Un peu comme on avait fait dans le,dans la vue générique,on avait fait un truc un peu classique.
00:22:20 :On avait fait un truc un peu classique.On avait fait un truc un peu classique.On avait fait un truc un peu classique.On avait fait un truc un peu classique.
00:22:24 :On avait fait un truc un peu comme ça.Ce qui,on peut dire,si l'action,entre guillemets,qu'on va effectuer,parce qu'on appelle ça,dans les modèles u7,des actions,les méthodes HTTP,on appelle ça des actions.
00:22:35 :Donc, par exemple,si on est dans le create,hop là,erreur,dans le break,oule partialbreak,il faut savoir qu'on appelle ça des actionsdans,dans les modèles u7.
00:22:46 :Pourquoi je dis ça ?Parce qu'on pourra créernos propres actions personnalisées.Donc,on peut dire,on peut dire,on peut dire,on peut créer nos propres actions personnalisées.
00:22:54 :Donc,on va bien utiliser,ici,l'attribut action.On va retourner,ici,notrebook,on va faire le,on va utiliser lecreate-able-serializer.Voilà.Et sinon,on va simplement retournernotre booklistserializer.
00:23:11 :Ça me va très bien,ça.OK.Donc,on n'est pas obligéd'utiliser le,d'utiliser le mêmeserializer pourtoutes les méthodes.Ici,vous voyez,on va personnaliserles serializers en fonctiondes méthodes.
00:23:25 :Donc,c'est pour tous ces cas-là,on aura le bookcreate-able-serializeret pour le reste,donc la listeet le,le,le détail,on aura le booklist.
00:23:36 :Donc,je réfléchisen même temps,je réfléchisen même temps,OK.Bon,on va se faire le,on va dans l'URL,ici.Donc,on va se faire le,on va dans l'URL,ici.
00:23:50 :Hop.Et là,on va faire pareil.En fait,l'avantage,c'est qu'on a défini,on a défini l'URL,on a fait l'includeune fois,ici,l'include.
00:24:01 :Et maintenant,ici,hop,si je fais ça,je relance mon serveur.On va se mettre surl'URL API,clairement,l'URL du routeur.Puis,on va se mettresur l'URLAPI.
00:24:14 :Donc,on va se mettresur l'URLAPI,l'URL du routeur.Et vous voyez,on a déjànos routesqui apparaissent.Hop.Et donc,là,j'accède directementà mes livres.
00:24:28 :Donc,là,je,comment dire,j'affiche,j'affiche mes livres.Je regarde justequelques choses.Tac.On avait le boucliersur la liseurqui affichait quoi?ID,title,author.
00:24:43 :Savoir si c'est empruntépar nous.OK,ça me va.Pour la création d'un livre,on avait dit quoi?Qu'on voulaitl'ID,le titreet l'auteur.
00:24:53 :OK.Donc,là,vous voyezqu'ici,automatiquement,par la méthode POST,c'est pré-rempliavec les infosdu bon sérialiseur.Forcément,ID,il n'y a pasparce qu'il n'y a pas d'IDcréé.
00:25:08 :Enfin,il n'y a pas d'IDavant de le créer.Mais on a bienle titreet l'auteur.Donc,par exemple,en auteur,il y avait le 5.
00:25:18 :Je vais prendreet faire un test.Quel livreon va mettre?On va mettre28 ans plus tard.J'espèrequ'il en fasseun livre.Je ne sais plussi c'est 20 auteurs,5.
00:25:30 :Oui,c'est beau.C'est créé.Donc,là,vous voyez,on a créé un livredirectement avecnotresérialiseurici.Et sije reviens là,ici,on envisageun IDen particulier.
00:25:47 :Là,c'est pareil.Il va nous mettrele sérialiseur.Il va bien utiliserle sérialiseurCreateUpdate.Voilà.Et pour afficherl'instance,il va nous mettrebien l'autresérialiseurqu'on aici.
00:26:02 :Donc,vous avez un peucommencé balèzeau niveaude la frameworket au niveaude cette APIsur laquelleon peut naviguer.C'est queça va vraimentprendre en comptenotre codeen compte,notre sérialiseuret l'interfaceva s'adapteren fonctiondu sérialiseur.
00:26:21 :Donc,c'est vraimenthyper pratique.Je vais continuers'il n'y a pasde questionsparticulières.Moi,si jamaisil y a des doutes.Le routeur,en fait,c'est plussécuritaireque faire une URLsimple,en fait ?
00:26:38 :En fait,le routeur,il va te permettreparce quej'ai fermé la doc,mais ce que disait la doc,c'est que le routeur,il va te permettrede te générertoutes les URLsà chaque foisquand tu vas envoyerun vue set ici,quand tu vas avoirton vue set,
00:26:53 :quand tu vas envoyerdans l'URL ici,comme ça,en plus,ça va te créerton URL de base,boops,et en plus,ça va te générertoutes les URLsqui sont derrière.
00:27:04 :Donc,ça veut direboopsslashpour le PKpour accéder à l'instance,ainsi de suite.D'accord.D'accord,oui,non,c'est vrai.Merci.Et,bon,on va,on va aller,on va faire celui-là.
00:27:23 :On va se fairelele loanvue set,du coup.Hop,allez,c'est parti.Loanvueset.Et lui,je n'ai pastrop d'idéespour l'instantpour celui-là.
00:27:39 :On va le créerde manière basique.Hop,non,hop,on va se faireça,tac,et on avaitdit qu'on avaitle loansérie,loanserializer.
00:27:53 :Hop,j'ai iciunbouffevue set,pas de problème,j'ai monloanvue set,ok.Et là,hop,etlà,hop,etlà,ok.Etnormalement,on va bien vérifier.
00:28:14 :Tu n'as pas changéle débutd'enregistreur,tu as laissébookavec loan.Ah,merci,merci.J'aicommencéà,j'ai eu un doute,là,je commenceà,je commenceà douter de moi.
00:28:32 :Hop,là,hop,là,nickel,donc là,on a tous les enfants.Euh,ok.Hop,vous voyez,en plus,c'est pas mal,on a vraiment le,ici,qu'on appelle ça,le fil d'Ariane,là,pour,hop,pour revenir.
00:28:54 :Ok,donc,euh,je réfléchis,est-ce qu'on peut,on va repartir sur les actions,euh,hum,je,est-ce qu'on vafaire une grosse actionou va,on va,on va,on va faire du filtrage,de la pagination.
00:29:11 :Ok,ok,je réfléchis rapidement.Est-ce qu'on va faire,euh,notre boucle,on va,on va finir là-dessus.Allez,on va finir là-dessus.Euh,ici,ce qu'on peut faire,ouais,on va,on va faire un peu de,de,de personnalisation,on va importer des correcteurs,ici,action,hop,et dans le boucle du set,
00:29:39 :ici,on va se définir une méthode,on va utiliser ce qu'on appelle,donc,action,on va se faire une vue de détail,est-ce qu'on va retourner un,comment dire,un,ah,euh,une instance,et,donc,on va se dire qu'est-ce qu'on veut,la méthode get,ok,c'est comme ça qu'on définit le décorateur avec l'action,
00:29:59 :si on veut un détail,si on veut,et quelle méthode on veut.Ok,donc là,on va se dire,on va l'appeler loans,ici,euh,juste en même temps,parce que loans,ça serait peut-être pas le détail,ça serait pas,hum,est-ce que je pars sur un détail ou pas ?
00:30:14 :Bon,on va,qu'est-ce qu'il me fait ?Ok,donc,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,on va,non,je ne sais pas si je pars sur un détail quand même,
00:30:39 :euh,j'hésite vraiment là.Je vais voir,euh,je vais continuer,je vais écrire une méthode,euh,allez,tac.Donc,on va retourner,ouais,si je réfléchis en même temps,parce qu'on n'en va pas avoir le choix,donc,ici,on va utiliser un livre en particulier,et donc,euh,on va avoir besoin de retourner,
00:31:04 :tous les emprunts d'un livre en particulier,donc,donc,on va être obligé,d'avoir ici,des tailles à secours,pour retourner un livre en particulier,parce qu'on est dans le,dans le vue set ici de,de book,pas de loans,ok ?
00:31:18 :Mais là,le but,en fait,ça va être de retourner du coup,la,comment dire,tous les emprunts d'un livre,d'un livre en particulier,voilà.
00:31:27 :Donc,c'est pour ça qu'on est obligé de spécifier des tailles,parce qu'on va y récupérer qu'un seul livre,forcément,on va utiliser le P4,ce livre,donc,là,pourquoi je m'étonne,sans,ça marcherait aussi,mais c'est une convention de la documentation,et on définit la méthode,et qu'est-ce qu'on pourrait faire ici ?
00:31:41 :Euh,on va choisir,certes,il existe des méthodes,en fait,ça s'appelle getObject,get,hop là,qui la connaissent,bien,getObject,ici,donc,euh,self.getObject,
00:31:56 :en fait,il va,comment dire,self.getObject,en fait,il va,en arrière-plan,euh,Django,REST Framework,ce qu'il va se passer,c'est qu'il va utiliser le QuerySet,qui est là,il va utiliser,le PK,qui est là,et en fait,le getObject,ça va retourner,en fait,le livre,
00:32:19 :en fonction de ce PK là,voilà,tout simplement.Euh,du coup,si vous avez un doute,et,du coup,maintenant,je vais,euh,exactement,je vais retourner tous,les emprunts,et qu'est-ce qu'il va me retourner ?
00:32:34 :Ok,sauf que,RESTant ici,il faut que je l'importe,hop,et donc là,le problème,c'est que,le,j'ai quoi comme emprunt,actuellement,on va vérifier,je vais aller voir un peu,dans l'administration,ce que j'ai,s'il va bien,je le connais,euh,euh,euh,euh,euh,euh,s'il va bien,
00:32:58 :je le connais.Hop là.Euh,eh,on va aller,on va se faire,vite fait,un emprunt de,hop.Ouestaperle,Orterre ColonnialMathématiques.68 ans plus tard,voilà,on va créer un autre petit,j'en ai qu'un.
00:33:20 :Ok.Voilà,voilà.On va être original,hop.Hop.Hop.Ok,lui,il est créé,et maintenant,on va se refaire un autre,ah,mais bon,on peut pas,en fait,c'est un peu bête.
00:33:40 :On va dire que l'emprunt de lui,c'est terminé,euh,on est combien,le 5,hop.Je ne sais plus s'il y avait une condition dessus.
00:33:47 :On va créer un autre emprunt pour lui,hop,on se sent plus tard,et on s'aime.Ok.Donc,maintenant,on va retourner,ici,sur,notre API,le livre,qui s'appelle,28 ans plus tard.
00:34:01 :Là,il dit,c'est 4.Ok.On va aller,dans,loans,et,euh,je regarde quelque chose,je regarde quelque chose,ok.Donc,j'ai,créé,ici,si je vais,du coup,dans,euh,tac.
00:34:22 :Donc,ce n'est pas dans le loan,c'est dans Books que je voulais aller,excusez-moi.Dans Books,dans les livres.En fait,je ne sais plus,dans quoi je l'ai créé.
00:34:31 :Dans Books,c'est ça,je voulais vérifier tous les emprunts des livres,dans un livre en particulier,voilà.Ok,c'est bon.Euh,je vais y arriver.
00:34:40 :Donc,je suis dans Books.Ok.Donc,j'ai bien ça,pas de problème,j'ai une guête et tout.Ok.Donc,j'ai bien ça,pas de problème,j'ai une guête et tout.
00:34:52 :Ok.Et dans Books,normalement,si je fais un Loans,j'ai une erreur.Pourquoi ?Euh,c'est parce que,il faut que,que j'inverse,du coup,normalement,4.
00:35:05 :Loans,je pense que c'est ça.Voilà,c'est ça.Donc,vous voyez,en fait,ce que j'ai fait,c'est que,ici,j'ai,alors,je suis bien dans le modèle du set du,donc,même si je renvoie plusieurs empreintes,en fait,ce qui se passe ici,c'est que mon but,moi,
00:35:24 :c'est de retourner un seul livre.On va retourner les empreintes d'un seul livre,donc je mets un détail à Slough.C'est une méthode guête,et on ne fait que récupérer.
00:35:29 :Je définis,ma,ma méthode,Loans.Je l'appelle Loans.Donc,je passe par,ici,Books,le Pk,et Loans.Donc,le Pk,du livre,et Loans.
00:35:44 :Donc,le Pk,du livre,et Loans.Et,en fait,comme ça,ça va bien me retourner,ici,la,liste des empreintes,du livre,tout en utilisant,et bien,mon Serializer,Loans Serializer,qui est,ici.
00:36:02 :Donc,User,Book,Broaddat,Retourne date,ainsi de suite.Euh,tac.Retourne date,Broaddat,voilà.Ok,est-ce que le dernier,ça va,vous voudrez qu'on revienne dessus,qu'on revienne dessus la prochaine fois,ou pas ?
00:36:19 :Euh,si on,euh,en mettant,on va dire,en argument,de Book,en fait,c'est pour permettre l'URL,donc,de fonctionner,en fait.Elle t'a dit.
00:36:32 :En argument,en fait,le Book,en fait,euh,sur,euh,ouais,sur la View,ouais,euh,ouais,donc,en fait,en fait,ok ?Donc,pour récupérer tous les emprunts d'un livre,on va prendre ce champ-là,Book,donc,qui fait,qui est une clé étrangère vers Book,et,en fait,
00:36:57 :ça nous permet de filtrer tous les emprunts d'un livre en particulier.Donc,comme le,j'avais un,le livre,Callaigui 4,en base de données,qui s'appelle 28 ans plus tard,je le passe ici,donc,dans le modèle du set,j'ai bien Book dans l'URL,le PK4 du livre,et,
00:37:13 :Loans,qui est,en fait,le nom de la méthode,ici,c'est comme ça que ça fonctionne,et ça va bien me filtrer,en fait,tous les emprunts d'un livre en particulier.
00:37:22 :Donc,là,de,de mon Book 4.Voilà.Vous filtrez sur ce livre-là ?Que ce livre-là,ouais.Euh,voilà,bon,j'étais un peu freestyle,du coup,mais ça fonctionne.
00:37:36 :Euh,ça fonctionne.Après,bon,on pourrait rendre ça plus explicite,hein,pour les,pour les Loans Serializers,bon,ils pourraient être,au niveau de Book,on pourrait se dire,on pourrait se dire,euh,est-ce qu'on a fait ça,non,je ne sais plus,on avait fait ça,voilà,on pourrait dire,
00:37:56 :pour Book,utiliser,eh bien,le Book List Serializer,je pense.Euh,ici,on pourrait se dire que Book,hop,ça serait bien,ça serait bien,ça serait bien,ça serait bien,ça serait bien,ça serait bien,ça serait bien,ça serait peut-être plus propre,ça fonctionne là ?
00:38:14 :Non ?Qu'est-ce que tu me veux ?Euh,Non,type,euh,ah,je vais être bourré par une niche,qui va foutre le bazar,pourquoi,ah,ouais,ok.
00:38:33 :Euh,faudrait que je,ah,ok.Est-ce que je suis authentifié ?c'est ça la question.Non,type,Non,type,ah non,start with user,ok,tac !
00:38:49 :Et ben écoutez,on va se trouver avec une correction de ça pour la prochaine fois,voilà,ce que je veux dire,il va falloir qu'on passe,du coup,je me dis,non,il passe la requête tout seul normalement,bah écoutez,on va débuguer ça pour la prochaine fois,ce soir là ?
00:39:04 :Euh,il faut faire ça rapidement,hum,hum,hum,hum,euh,ok,donc là,la ligne 23,donc c'est bien ici,et en fait,alors,requête,ok,Request,ok,est-ce que je suis bien eu ia revenir ici,oui,je suis bien connecté,ok,ici,si je veux,dans le boucle,
00:39:35 :il n'y a pas,bon,il n'y a pas de ligne,mais si je suis dans le trou,et c'est juste dans les,hop,là,dans le boucle,donc là,je suis bien sous,parce que je l'ai emprunté,ok,ça n'a pas de problème,et le 4,il est où,
00:39:50 :vu que je l'ai,j'ai fait un retour,il n'est plus emprunté,ok,bien évidemment,il n'est plus emprunté,ok,bien écoutez,il faudrait que je regarde,ce qui lui ne va pas,dans ce cas là,j'ai un gros doute de ce qui ne va pas,on peut demander notre API,
00:40:03 :à notre ami copilot,tiens,si il peut nous dépanner là-dessus,ah,parce qu'ici,je fais un,ah ok,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,
00:40:21 :il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est ou,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,
00:40:38 :il est où,il est où,il est où,il est où,il est où,il est où,il est ou,il est où,il est où,il est où,il est où,il est où,il est où,il est où,il est où,nétaHuman.
Aucune occurrence trouvée pour « ».
00:00:04
Récapitulatif
00:07:11
ModelViewSet
00:09:10
Générer les urls avec un router
00:21:40
Personnaliser un ModelViewSet
00:29:27
action personnalisée
00:42:47
debug