Session du 13 mars 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 DRF
Initiation à Django Rest Framework
00:00:00 :Ça enregistre. Rebonjour tout le monde, j'espère que ça va.Il y en a qui font déjà du REST framework ou pas avec Django ? Juste pour savoir.
00:00:11 :Non. Pas du tout ? Ok.Il y a touché un peu oui.Bon après là ça va être vraiment les bases.Donc je vais ouvrir mon projet puis je vais partager l'écran.
00:00:29 :Est-ce que je peux vous le présenter déjà ? Je vais faire un truc que je prépare surmon écran.Ça pourrait être sympa déjà pour avoir un petit print.
00:00:40 :Je vais faire ça et je vous partage mon écran tout de suite.Je ne sais pas pourquoi il ne veut pas, c'est bizarre, alors je n'ai plus rien qui répond.
00:01:13 :Attendez, je relance juste mon IDE.C'est bon, ça devrait aller.Donc, mon écran.Il y en a qui connaissent un peu le principe de l'API ou pas ?
00:01:49 :Pas du tout.En général oui, de toute façon.Vous vous en doutez.Bon du coup, en gros, notre but c'est d'envoyer des JSON, recevoir des JSON.
00:02:04 :Et donc c'est vraiment de séparer le back d'un go avec le front avec un framework web par exemple.Exemple, là si je fais, ici si je vais dans le backend, je vais faire un python manage run server.
00:02:23 :Vous voyez bien l'écran, normalement c'est bon.Est-ce que je peux me lancer ça sur, non je ne voulais pas le lancer ici.Je vais me lancer une nouvelle session, et là je vais aller dans le frontend, c'est des frontends,et c'est avec Streamlit que je l'ai fait, et c'est main.py, run main.py pour le lancer.
00:02:53 :Hop là, ok.Je vais vous mettre sur mon navigateur qui est où ?Donc le but, juste pour info, c'est que là j'ai une petite application Streamlit,donc ça c'est le frontend, qui est tout bidon je vous l'accorde,et qui communique avec mon API Django REST Framework.
00:03:16 :Donc là par exemple, c'est une application tout nouveau qui est bidon, c'est juste pour l'exemple.Là s'il affiche, on est d'accord, ça ne se connecte pas puisque je dois être authentifié.
00:03:28 :Et donc quand je me connecte, là c'est ok, et moi j'ai l'API qui me renvoie un token,et avec le token maintenant, j'ai accès aux routes protégées.
00:03:43 :Donc là j'ai deux, j'ai le test, test 2, c'est une tout nouveau qui est complétée, incomplétée,bon c'est bidon, c'est juste pour vous montrer l'exemple.
00:03:50 :Ah et puis hop là, est-ce qu'il a réussi à rejoindre ?Et donc là c'est vraiment pour vous montrer l'exemple, ici j'ai envoyé,et là je vous montrais un peu ce qu'elle renvoie à mon API,donc elle renvoie vraiment du JSON, comme ça.
00:04:04 :Et après moi je la traite, on peut la traiter pour récupérer les données qu'on veut.Donc voilà, le but c'est vraiment d'avoir un backend séparé et un frontend.
00:04:12 :Alors, ce qu'on va faire pour Django REST Framework,je vais ouvrir ce que j'avais préparé pour ce soir,je l'ai mis là, tac, mentora,c'est ici.
00:04:30 :Donc voilà, alors là en gros j'ai une application toute bidon,comme je vous montrais là avec des tout-doux, ok.Pas de soucis Pierre, y'a pas de problème.
00:04:42 :Donc voilà, là c'est basique, j'ai deux modèles, c'est vraiment pour l'exemple.Ce qu'on va faire c'est que du coup on va aller déjà se faire un make migration,voilà, manage et migrate.
00:05:05 :Photo, à la limite je m'en sers pas, je m'en servirai pas,je sais pas si je vais le laisser pour l'instant.Donc voilà, là j'ai fait un migrate.
00:05:11 :Ce qu'on va se faire c'est aussi maintenant un python,manage, create, super user, tac,je vais mettre mon logiciellement, hop là,en bas j'ai mail.com, tac, tac.
00:05:35 :Ok, donc là j'ai mon super utilisateur,et maintenant on va tout de suite aller dans l'admin,et on va aller rajouter, donc c'est dans from.models,
00:05:49 :j'avais quoi, j'avais tout-doux, non je sais plus comment il s'appelle.Voilà c'est ça, tout-doux, item, import, tout-doux,item commande et tout-doux item, pour l'instant en photo on s'en fiche un peu.
00:06:04 :Et donc là on va se faire un admin.site, hop là,site.register, salut, tout-doux item,et on va se faire un pareil pour le, tac.Pour ceux qui viennent de rejoindre, du coup,on vient juste de commencer, je disais on va se faire un petit API,tout simple, vraiment un exemple avec DRF, mais vraiment sur des bases.
00:06:37 :Donc là j'expliquais juste, j'ai deux modèles, enfin même trois,sur lesquels je peux m'en servir.Tout-doux item, donc je vais avoir des tâches,ici je pourrais mettre des commentaires sur les tâches,bien que pour cette session on ne va se servir que de ça,de toute façon pour voir un peu les bases de DRF.
00:06:53 :Et j'ai commencé par présenter tout à l'heure un exemple avec,où j'ai un, comment dire, un back-end par un DRF,et je me connecte dessus avec une application Streamlix en front-end.
00:07:06 :Donc voilà, et là du coup, j'ai fait le migrate,hop là, et on va faire un truc,c'est qu'on va aller remplir un petit peu la base donnée avec quelques items,hop là, et là, ils sont items, voilà, on va les mettre là ici,on va appeler un genre test, on va l'appeler test,
00:07:38 :on va le mettre en complet, on va l'appeler test2,et là on va mettre test2 description sans fiche,lui complet par exemple, voilà.Donc comme ça on en a déjà mis deux dans la base donnée.
00:07:51 :Maintenant, après, pour DRF, ce qui est bien, c'est qu'il y a un quickstart qui est bien foutu,et qui vous explique bien comment commencer.Pour ceux qui sont arrivés, vous connaissez bien le principe de l'API,il n'y a pas de problème, je vous le rassure.
00:08:07 :Je peux faire demande au cas où.Donc voilà, et là on va l'installer, donc Django REST Framework,et en fait le but c'est qu'on aille tout envoyer en JSON,et qu'on récupère après les infos en JSON.
00:08:29 :Donc là on va laisser l'installer, du coup je l'avais déjà installé,et c'est parti, on va aller voir un peu dans les settings ce qu'il faut ajouter.
00:08:43 :Donc, là l'admin c'est bon, là j'ai mes modèles, ok,là c'est installé, et donc dans le projet, les six settings,j'avais déjà ajouté l'application Todo,mais il faut penser à l'ajouter du coup, le REST Framework.
00:09:01 :Et ils vous conseillent dans la doc aussi, pour avoir au moins la pagination,ils vous donnent un code de base, voilà.Ce code là que vous pouvez rajouter, ça vous permet d'avoir la pagination.
00:09:17 :On va le mettre dans les settings,et donc quand vous aurez des configs, en fait vous allez les mettre là,genre par exemple si je reviens sur un autre projet,alors je retourne sur l'autre, Pytraining,on va l'ouvrir là,dans les settings,ici par exemple, vous pouvez voir que j'ai plus de settings pour REST Framework,
00:09:45 :genre là par exemple,pour l'autre j'utilise des tokens WT,donc ça c'est vachement utilisé avec Jean-Grey Framework,pour les schémas j'ai installé autre chose,et pour faire mes filtres en fait avec REST Framework,j'ai utilisé une librairie externe en fait aussi.
00:10:03 :Donc en fait vous appliquez toutes vos configs là-dedans.Donc voilà,ça pour l'instant vous dites si vous avez des questions.Qu'est-ce qui me fait annuler ?
00:10:19 :Annuler, hop là.Alors, j'en étais où ?Tac, ici.Montera, dire fontora.Et donc, voilà, j'en étais là,donc je vais rajouter ça vraiment en setting de base,après c'est vraiment tout le reste,avec une base SQLite,une application Todo, et puis c'est tout.
00:10:45 :Je ne sais même pas si je devrais le mettre en prononciation jeu,mais ce n'est pas important pour l'instant.On va faire ça à la limite, hop là.
00:10:52 :Donc voilà,là on a vraiment une baseavec deux éléments dans notre base de données.Pour l'instant ça ira.Ensuite,avec Django REST framework, il y a ce qui s'appelle du coup les Serializers.
00:11:06 :Je ne sais pas si tout le monde connaît les Serializers.Donc ouais,ils servent en grosvraiment pour la sécurité de votre application,donc pour le back-end.
00:11:27 :C'est ce qui va vous servir un peu de porte d'entrée,et même limite de sortie en fait,pour ce que vous allez renvoyer et recevoir.
00:11:36 :C'est les Serializers qui vont pouvoir, eux,traiter ce que vous allez recevoir pour ne pas que tout passe.Donc il y a une sécurité qui est vraiment inclue dedans,mais vous pouvez en rajouter après par vous-même.
00:11:46 :Donc c'est pour ça que je vous incise vraiment à toujoursne pas utiliser les requêtes comme ça direct,on va dire à l'arrache,et à utiliser les Serializers pour tout ce que vous faites avec DRF quasiment.
00:11:56 :Du coup,en fait pour les Serializers,ce qu'on va faire,on va aller par exemple dans l'application Todo,ici,on va appeler Seria,à chaque fois je fais des fautes,Serializers,Serializers.py,
00:12:15 :voilà.Et ici, ce qu'on va faire,c'est qu'on va commencer à créer nos premiers Serializers.Donc vous allez voir le principe.Au début ça va paraître un peu flou,mais ça va venir vite.
00:12:27 :Alors, comme je disais,c'est vraiment pour la transformation, la validation des données,la sécurisation,et surtout pour la révisitabilité du code,c'est pratique.Parce qu'après vous pouvez découper plusieurs méthodesdans vos Serializers en fait.
00:12:41 :Donc pour commencer,on va importerjustement notre module Serializer.Et ensuite, on va importernos modèles.Et on va aller savoir commentc'est TodoItemet TodoItemComet.
00:13:00 :Bon, peut-être que celui-là, pour l'instant, il ne va me servir que celui-là.On va prendre que TodoItempour l'instant.Ça suffira, je pense, pour la session.
00:13:08 :Maintenant, on va commencer à aller créer notre premier Serializer.Il existe en fait avec Django,REST Framework,ce qu'ils appellent des modèles Serializers.Donc c'est des Serializers basés sur vos modèles.
00:13:18 :Et ça,pour créer le moins de codes possible,c'est top, parce qu'ici, je vaisme créer un objet,donc un item Serializer.Comme ça.Qui va arrêter de Serializer.
00:13:34 :J'ai fait une faute.Serializer.Pourquoi il ne me le prend pas ?Serializer, qu'est-ce que j'ai fait ?Ça y est.C'est bizarre,ça ne fait pas autocompletion.
00:13:50 :Est-ce que j'ai fait une erreur ?Ouais, bizarre.Bon.Mon IDE, il n'a pas l'air content.Sinon, je pensais sur VS Code, au pire.Sinon, c'est autocompletion.
00:14:02 :Ça change aussi.Et sinon, il existe aussi, si vous voulez,des Serializers qui ne sont pas basés sur les modèles.Donc là, vous gérez un peu plus de choses.
00:14:10 :Voilà.Donc là, il y a moins de choses à gérer.Parce que, du coup, ici, vous avez justeà définirune classe méta, vraiment, basiquement, pour commencer.
00:14:22 :Et vous allez...Alors, je vais juste sauvegarder,parce que ça va medéfinir le modèle qui va être utilisé.Je vais juste relancer mon...Ça m'inquiète qu'il ne lance pas les...
00:14:34 :Tac.Donc, vous allez définirle modèle qui va être utilisé.Et, en fait, pour ceux qui connaissent déjà Django,par exemple, pour les...Non, c'est pour les formulaires.
00:14:46 :Vous allez définir Fields.Voilà.Et, en fait, avec les Fields, ici,vous allez pouvoir dire, par exemple,je veux avoir tous les champs.Après, on pourra très bien dire, je ne voudrais que le champTotal Description. Pour l'instant, on va mettre All.
00:15:00 :J'espère qu'il m'a bien installé.Il m'a bien installé.C'est bizarre.REST Framework.Je vais faire un pip-list.Ah.Ah, ouais.OK. Bon.À mon avis, j'ai un truc qui ne va pas dans mon truc.
00:15:22 :On va voir après quand on va lancer.Et donc, une fois que vous avez votre Serializer,il va falloir s'en servir, en fait,dans...dans une vue, par exemple.
00:15:32 :Et donc, là, où ça devient intéressant,c'est quand vous avez votre...Oh, pardon.Donc, quand vous avez...Ouais. Qu'est-ce qu'il y a ?Excuse-moi, Marcel, je n'ai pas compris.
00:15:46 :Il y a une avance sur Serializer.Ah, c'est sans baisse, normalement.C'est ça.Ouais, excuse-moi, c'est ça.Tu as raison. Je pense.Hum.Que je regarde dans la doc.
00:16:02 :Non, c'est un S. Pour moi, il y a un S, ici.Hum.OK, j'ai un parti Serializers.Pour moi, il y a un S.Non, il y a un S, ici.
00:16:12 :Ouais, je ne sais pasce qu'il me veut, là, mon IDE.Il a l'air un peu en colère.Hum.C'est bizarre qu'il n'y ait pas de l'autocomplétion comme ça, en fait.
00:16:22 :Ça, mais...J'ai coupé l'autocomplétion, genre,à copilot, quoi, mais...C'est bizarre qu'il m'en fasse plus que ça.Bon, je vais voir s'il y a une erreur quand je vais lancer.
00:16:32 :Sinon, j'ouvrirai avec un autre.Mais bon, ce n'est pas très grave pour l'instant.Et donc, ici,on va gérer nos vues.Alors, là, vous allez voir, pour une APIvraiment toute simple,il y a des cas très pratiquesoù on va utiliser ce qu'on appelle les Models Viewset.
00:16:48 :Et en fait, les Models Viewset,ça vous permet, en fait, d'avoir des...des, comment dire,des endpoints, des routes,pour vos crèdes, mais genre,quasiment avec trois lignes de code.
00:17:00 :Donc, par exemple, on va déjà...Bon, on va...importerTodo...Todo...J'y suis arrivé.Todo avec thème et...Oups, là.Serializer.On va importer...Il s'appelait comme ça,Serializer.
00:17:24 :Et on va aussi importer...Firmware, Firmwork.Import.On va même prendre les Viewset.Dans les vues, on ace qu'ils appellent leModel Viewset.Je pense qu'après,on pourra voir ça après.
00:17:42 :On verra ça après. Donc, voilà.Et donc, là, on va commencer à créer une première...un premier Viewset.On va l'appeler comme ça, Todo ItemViewset.
00:17:52 :Et donc, ça va êtrele Model Viewset.Donc,ici, ce qu'on va faire, c'est queon va définirun Query Set.Donc, le Query Set,ça va êtreTodo ItemObject. Donc là,
00:18:12 :pour l'exemple, on va prendre tout.Enfin, All. Et ensuite,on va utiliserce qu'ils appellent la Serializer.C'est SerializerClass.J'ai dû faire une connerie quelque part. C'est un truc de fou
00:18:26 :qu'ils ne me fassent pas l'autocomplétion comme ça.Serializer Class, ça va êtrenotre Serializer qu'on a créé avant.Et pour l'instant,on va s'arrêter là.
00:18:36 :Donc là, on a un premier Viewsetqui est là, qui est valide,qui doit fonctionner, sauf si je me rends comptequ'il y a un problème là, parce que depuis tout à l'heure,je n'ai aucune autocomplétion.
00:18:46 :J'ai monmodèle Serializer,mon Viewset, et maintenant,il faut penser, donc je vais prendre le fichier d'URL qui est là,à aller dans les URLpuisqu'il faut bien pouvoir utiliserici notreroute,tout simplement. Donc,
00:19:04 :ce qu'il faut penser à faire, par contre,c'est, j'ai oublié de le mettre dès le début,dans la doc, vous avezce qu'ils appellentles routes d'hôtes, en fait.
00:19:14 :Forest Framework.Et il faut qu'on apporteInclude.Comme ça, vous avez la routepour l'hôte.Et maintenant, on va, ce qu'on appelle, créerdes routers.
00:19:28 :Vous allez voir en quoi c'est très pratique.Donc, vous m'arrêtezsi jamais il y a, je n'ai pas vule chat.Ok.Si j'ai un peu vite.
00:19:40 :Après, vous allez comprendre, on reviendra surles choses s'il faut.Je voulais dire qu'on apporte le router.Donc, voilà,là, j'ai mon router. Et on va
00:19:50 :aller instanciernotre router.Donc, router va êtreEDA égale à router.Default.Du coup, son compétition, c'estcomme ça, router.Voilà. Et on vafaire un router.register.
00:20:08 :Donc, voilà. Et ici,on vacréer notre tout-do.Et bien sûr, il ne faut pas que j'oublie.Fromtoodoo.views, on vaimporter. C'était, on l'avait appelé
00:20:22 :toodooItemViewSet.Donc, là, on va avoirdu coup, notre tout-do.Et c'est toodooItemViewSet.Et maintenant, du coup,tout simplement,on va allerici, faire un include.
00:20:42 :Ok.Et on va aller mettrenotre router.Donc maintenant,alors là, ça me stresse un peu parce que je n'ai pas de complétionet du coup, je ne sais pas si un truc ne va pas avec mon truc.
00:20:54 :Est-ce qu'il n'y a pas une erreur ? Non.Je vais essayer de le lancer, voir si ça se lance.Ben, ça se lance. Ok. C'est génial.
00:21:00 :Alors, attendez, je vais me mettre à ça, là.Hop, là.Au moins,sans autocomplétion, ça oblige à...Donc là, du coup, j'arrive ici.Vous voyez bien l'écran ou pas, là ?
00:21:14 :Dites-moi si jamais ça...Ah, Pierre, t'as une question.C'est une erreur.Ok, pas de souci.Et donc là, ça vous met...J'ai mon router, mon défautrouter, ici. Et donc, j'ai ma première
00:21:34 :route qui est là. Et quand je cliquelà-dessus, je fais bien un getsur la liste de toutes les...Comment dire ?De tout ce que j'ai crééen ToDoItem.
00:21:46 :Pour l'instant, ça va.Sauf que,justement, avec le routeret le modèle Vue 7 que je viensde montrer juste avant,grâce àmon modèle Vue 7, ici,je peux faire une poste.
00:22:06 :Donc ça veut dire qu'ici, par exemple, si je veux fairema poste, je vais l'appelertest3,description test3pour compléter son fiche.Hop, là, je viens de créerun nouvelToDoItem.
00:22:22 :Voilà.Donc là, j'en ai bientrois maintenant. Aussi,si vous accédez après au PK de chaqueToDo,au premier, par exemple,ici, je peux faire un delete.
00:22:36 :Ici, je peux faireune put pour aller le modifier.Ou je peux très bien aussiprendre que quelques...genre que le title, par exemple.Alors l'idée, ne cherchez pas à le modifier,ça ne marchera pas avecmon serializer.
00:22:52 :Avec le serializer, en fait, ils sont en lecture seule.Donc vous pouvez le modifier, mais ça ne fera rien.Du coup,je disais, là, vous ne pouvez modifier qu'une partie,et donc, en fait, si vous ne modifiez qu'une partie,ça sera une patch.
00:23:06 :Ça va pour ça ou pas ?Donc si je reviens,si je reviens, du coup,je vais revenir sur la get.Donc j'ai la get, la liste,ou là, où je récupère tout.
00:23:18 :J'ai la poste, où je vais créerune instance,etquand je suis surune instance en particulier, j'ai la delete,la put pour tout modifier,la patch pour modifiation partielle.
00:23:32 :Voilà.Et donc, ça, grâceà ces trois lignes de code.Je ne sais pas,pour vous, moi, perso, c'est ça que j'aime bien,parce que du coup, il y a moyen de faire des trucs assez sympathiques.
00:23:44 :Alors maintenant,le problème, oui, c'est que du coup,c'est vraiment du code basique.Je pense qu'on refera un mentorat de façon plus poussée,où là, je me demanderais, est-ce que vous avez les...
00:23:56 :ce qu'on appelleles API View,en fait, qui sont plusrustiques, où vous avez plus de chosesà faire, vous avez toute la logique à refairevous-même, vous avez vos méthodes à redéfinirvous-même, les get, les postes, les ainsi de suite.
00:24:10 :Après, vous avez des vues génériques,donc les liste API View, les create API View.Bon, là, il y a quand même moins de codeà avoir. Et là, nous, on est sur le
00:24:18 :ModelViewSet, en fait, ça vous crée vraiment le creux decomplet avec trois lignes de code.Mais pour l'instant,on va se rester sur le ModelViewSet,parce que j'ai des trucs sympas à vous montreravec ça.
00:24:30 :Par exemple, si...Ben,on va faire un truc. Imaginez, du coup,je veux que tout ce que je peux faire, là, en CRUD,je veuxuniquement...
00:24:42 :c'est vraiment que pour un admin,donc c'est possible. Vous pouveztrès bien faire...il reste vraiment ces pointspermissionnés, là, j'ai un peu de complétion, c'est bien.
00:24:52 :Et je crois que c'estIsAdminUser.Et en fait, ici, vous allez venir définiralors c'estPermissionsClassesqui est égale, et là, ça va être une liste.
00:25:04 :Et vous allez mettre IsAdminUser.Voilà.Donc là, maintenant,ça va recharger. Si je retourne surmon to-do...mon to-do liste.Alors, je ne sais pas si il faut que je recharge, du coup, l'application.
00:25:18 :Est-ce que je peux connecter dans...Si je suis connecté, c'est pour ça.Donc voilà. Là, vous voyez, si je ne suis pasconnecté, je n'ai accès à rien.
00:25:26 :Donc là,on est d'accord qu'il faut bien être adminpour pouvoirvoir ce qui se passe.Donc, comme je viens de montrer, vous pouvezdéfinir ici unephase de permission pour votremodèle du site. Après, vous pouvez le faire pour des méthodes
00:25:42 :différemment, mais...Je ne vais pas le montrer ce soir, parce que je vais pouvoir le montrer,par exemple. Ce qui pourrait être intéressantici, c'estquand on va...
00:25:54 :Je vais lancer le serveur.Quand oncrée ici, par exemple,quand on est sur une poste.Donc là,j'ai quitté le description Completed.Je pourrais... Bon, là,
00:26:08 :le modèle est un peu bidon, donc je n'ai pasbeaucoup de champ, mais on pourrait dire, je ne veux pas queà la création Completed, il pourrait...
00:26:14 :Je le cocher, par exemple.Donc là, ce que je pourrais très bien faire,c'est qu'on va allerse coderun autre Serializer, par exemple.Donc là, on va commencer un nouveau Serializer.
00:26:26 :Et on va l'appeler,ça se fait assez souvent,ToDoItemCreateSerializer.Et lui, il va arrêter,pareil, on va utiliser la photocompression.Modèle Serializer.
00:26:44 :Donc là, c'est pareil.C'est méta, comme là-haut.Modèle,ça va être ToDoItem.Sauf que là,au niveau des champs,on pourrait très bien dire,je ne veux queTitleetDescription. Je vais l'appeler méchant.
00:27:06 :Ouais, c'est ça.Donc là,du coup, on lui dit que ce Serializer-là,lui, il n'auraque ces deux champs-là.Donc maintenant, le truc,c'est que dans la vue, ici, il faut bienqu'on lui dise, en fait,qu'il faut utiliser un Serializerpourle post,pour le Create.
00:27:30 :Donc ce que vous pouvez faire,ici, c'est, c'est un DefGetSerializer.C'est classique ou classe ?Classe, comme ça.Donc c'est une méthoded'instance.Qu'est-ce qu'il me fait, Cyril, là ? Stop.
00:27:46 :OK.Et du coup,alors attendez, j'ai plus mon écran, je ne vois plusqu'est-ce qu'il me fait.Hop là, c'est bon.Et du coup,on peut se dire, sil'action qu'on va faire, ça va être unCreate,eh bien,on va utiliserle tout douxItemCreateSerializer.
00:28:14 :Voilà.Et sinon,on va retourner, en fait,donc là, le self.SerializerClass, on est d'accord que ça va êtrel'attribut qui est ici. Donc en gros,
00:28:26 :on va retourner pour un Createle Serializer de Create, ici,qu'on a configuré tout à l'heure.Et sinon, on va utiliser le SerializerClassqu'on a défini, ici,au niveau de notre classe.
00:28:38 :Donc maintenant,si je lancele serveur,je suis où ?Je suis là, tac.Vous voyez que maintenant, pour la création,je n'ai plus le champ Complete,Complété d'ici.
00:28:54 :Et dans leJSON, ce qu'il me propose, c'est quetitre et description.Voilà. Ça va ou pas ?David, j'aimerais savoir,et si le troisième champ estobligatoire dans la base des données ?
00:29:08 :Qu'est-ce qui se passe ?Alors attends, par exemple,alors si tu as un champqui est requis,ça va poser problème.Il faut bien que tu fasses attentionà ta base donnée à la base.
00:29:22 :Je ne sais pas si je peux faire un...Tiens, il va falloir faire letesttest...Attends.Comment est-ce qu'on va faire ?Merde.Un false, ou est-ce que je vais rajouter un champ ?
00:29:42 :Sinon,je vais finir juste ce que j'étais en train de faire,sinon, dans tous les cas,ça dépend des contraintes que tu as définies au niveau de ta base donnée.
00:29:52 :Moi, j'avais eu le coup, une fois,où au niveaudu champ,je ne sais plus ce que fait mon serializer,mais du coup, forcément,s'il est obligatoire,alors,je ne sais plus quel exemple j'avais.
00:30:08 :Je ne sais plus quelles contraintes j'avais.J'avais mis une contrainte,et à un moment, ça ne s'était pas passé.Je ne sais plus si j'avais misun null à false.
00:30:20 :Ah, j'ai un doute.J'ai un doute.Il faudrait que je regarde mon exemple.Sinon, je te remontreaprès.Je me le note.C'est sur un champ requis que tu m'as demandé.
00:30:38 :Oui, c'est ça.C'est un champ requis.Alors,je te montre après ça.Je te montre ça juste après.J'étais juste sur leserializer, et j'avaisun truc à montrer.
00:30:58 :Ah oui, juste pour finir,tant que je suis dedans.Après, vous pouvez fairevosvalidationsaussi perso.Par exemple,si on faitsur un serializer,donc là,sur le create,comme quoi c'est important aussiau niveau des validations, on va direvalidatetitle.
00:31:28 :C'est de l'instance.Ici, on va récupérer la valeur.Ça, ça fait penserbeaucoup au formulaire Django.On pourrait très bien direifPatrickin valuelower.
00:31:46 :Si on a Patrickdans le titre écrit,on va leverune validation erreur.On peut lever une erreur de validation,maisonne peut pasmettre Patrickici, et sinon,on retourne la valeur.
00:32:08 :Maintenant, si je lance mon serveur,ici,je rechargemon titre dans le poste,je metsPatricktout double,peu importe, et là, je mets test.
00:32:24 :Voilà.Ici, on a une validation supplémentaire,et donc ça va prendre, en fait,le nom du champ, title,et ça va mettre l'erreur qui est levée, comme ça.
00:32:34 :Avec DRF, par défaut,c'est configuré comme ça. Vous avez votre Json,le nom du champ, et la liste des erreurs qui sont levées.Est-ce que ça va pour tout le monde ou pas ?
00:32:46 :Vous me dites un.Alors.J'ai préparé quoi après ?Tac. Est-ce que...Donc, je ne t'oublie pas, du coup, Franck.Il y a autre chose que je voulaisvous montrer aussi,et après, du coup, je vais répondre à ta question.
00:33:18 :Si je retourne dans mon...Je vais retourner.Alors, vraiment, là,pour l'instant, sinon, c'est bon pour tout le monde.Il n'y a pas de blocage ou...
00:33:32 :Vous me dites un.Vraiment.Je vais faire un petit toposur le... En gros, là, on avaitnos modèles.On a ensuite défini,par rapport à nos modèles,des serializers, en fait,qui vont permettre de renvoyerce qu'on veut.
00:33:52 :Par exemple, ici, on pourra très bien dire de renvoyerqu'un champ, et ça marcherait tout parce serializer.Ici, on a un autre serializer pour la créationet une réalisation.
00:34:02 :Avec ça, on a des vues qui sont associées.On a des vues set.Et ici, on va paramétrer différentes choses.L'autre,quel serializer utiliser pour quelle méthode.
00:34:12 :Et ensuite, notre routeur.En gros, pour fairequelque chose de base avec DRF, ça peutaller très vite.Euh...Donc...Euh...Du coup, euh...Alors, oui, par rapport à tes questions.
00:34:34 :Donc, oui, si tu as vraiment un champqui est obligatoire,donc de tête,quand tu vas, en fait,avoir ton save qui va se faire,tu risquesd'avoir une integrityerreur. Peut-être que c'est comme ça
00:34:52 :que c'était passé, moi.Je ne sais plus si c'était sur un numéro de téléphone, un tructout con. J'ai oublié de l'inclure.Et donc, j'avais une erreur sur les...
00:35:00 :sur mon...sur mon serializerparce que j'avais oublié de l'inclure, en fait.Euh...Et je ne sais pluscomment je l'avais fait, comment je l'avaisdéfini. Il me paraît que
00:35:14 :je regarde sur une autre application.Euh... Est-ce que j'ai unexemple, là, à te faire tout de suiterapidement ?Ou je te le renvoie après ? Je n'ai pas vu l'heure passer.
00:35:26 :Excuse-moi. Euh...Une petite nouvelle description, ça attaque.Si je mets iciun nul à false, euh...sur la description,on va faire un truc.Euh... Je ne sais plus.
00:35:44 :Et on va faire un create, ici.On va, et faire exprès d'oublier la description.C'est le titre.Hop, là.Euh...Bien sûr, il va me le...
00:35:56 :Il va me le foutre, là.Ici, tac.Euh... Qu'est-ce qu'il me fait ? OK, il est là.Et si je fais un poste, normalement, j'ai que le titre.
00:36:08 :Ah, non, il me l'a créé.Non, non, non. Un nul à false, il l'a créé.Je pensais que le nul...Euh... Je ne sais plus dans quel...
00:36:18 :Euh...Je crois que la méthode save me l'appelait automatiquement.Donc, non, c'est pas...Comme tu as modifié, il n'est pas nécessaire de faire l'immigration.Ah, non, l'immigration, excuse-moi.
00:36:28 :Oui, j'ai pas fait l'immigration.C'est en parlant que j'y pense.Euh... Tac.Immigration.Euh... Qu'est-ce qu'il me fait ?Qu'est-ce qu'il me fait ?Euh... J'étais où, là ?
00:36:44 :Qu'est-ce qu'il me fait ?Euh...Je viens de dire.Il ne me le fait pas ?J'ai un truc... C'est bizarre, parce que je ne suis pas auto-completion.
00:37:02 :Là, normalement, il devrait faire l'immigration pour ça.Euh...C'est bizarre.C'est très bizarre, là.Qu'est-ce qu'il me fait ?Bon, là, c'est sur un texte fil, là, mais...
00:37:18 :Euh...Ok, c'est... Même sur un texte fil,normalement, je pourrais avoir un...Il me semblait que j'en avais une erreur.Et c'est bizarre qu'au bout de temps, l'immigration, qu'elle ne se fasse pas aussi.
00:37:32 :Euh...Pourquoi il ne prend pas tout en compte ?Est-ce que si je...Attends, j'ai un truc bizarre.Euh...Tac, tac.Est-ce qu'il lance des codes ?
00:37:48 :Est-ce qu'il va vouloir régaler, là ?Euh...J'étais où ?Montora...Tac.Hop, là.Main. Ok.Euh...Il me l'avait sauvegardé, de toute façon, j'espère.
00:38:08 :Euh... Models.Ok.Euh...Tac.Bon, il fait des migrations, normalement, avec...C'est ça qui est bizarre.Ah !Ah !J'ai pas pu le re-installer, alors.
00:38:36 :Déjà.Et c'est bizarre que, tout à l'heure, il n'ait pas proposé, d'ailleurs, de...Il y a un truc qui est quand même...Curieux, là.Ok, non, c'est vraiment bizarre.
00:38:52 :Peut-être parce que, déjà,à défaut, c'est égal à tout.Oui, mais je me semblais que, quand tu faisais un...Ouais, mais...Non, bah oui.Parce que, par défaut, ouais, non, non, je suis bête.
00:39:10 :Oui, je suis con.Euh...Je sais plus dans quel cas j'avais eu une erreur, en fait.Je cherche.Mais ce qui est bizarre, c'est que, là, la migration, avec Pilo, il me le demande...
00:39:20 :Ah, mince.J'étais pas dans l'environnement virtuel, c'est pour ça.J'ai installé, du coup, mon python général.J'ai oublié de sourcer.Ok.C'est pour ça.Non, bah alors, du coup, je sais plus dans quel cas j'avais eu une erreur.
00:39:34 :Là, Franck, c'est pas vrai que je le retrouve.Euh...J'ai eu un cas où j'ai bien eu une erreur.Mais si je me mets à chercher en live, là,en fait, j'avais...
00:39:44 :Je sais plus, dans la console réaliseur,il y a un truc qui n'allait pas avec mon modèle.Au niveau du champ.Là, comme ça, je sais plus lequel.
00:39:54 :Euh...Je sais plus lequel.Euh...Du coup, ce que je montrais tout à l'heure,de renverser un message, Franck,j'ai plus l'exemple, là, en tête.
00:40:06 :Alors, sinon,ce que je montrais tout à l'heure,là, je suis bien sourcé.Ok.Ce que je montrais tout à l'heure,pour ceux qui sont arrivésun peu après,eh oui, avec le false switch,forcément, c'était par défaut.
00:40:28 :C'est ça, ce qui n'a pas marché.Euh...Non, c'est stream...Tac, et c'est streamlit.Voilà.Tac.Donc, en exemple,pour connecter son API,ce que je disais,c'est que là, on verra ça la prochaine fois.
00:40:52 :J'ai un exemple avec un token.Donc là, en fait, ici, j'aiconnectéun back-end Djangoavecun front-end streamlit.Tac.Je vais le mettre, là, comme ça.
00:41:08 :Un front-end streamlit. Donc là, j'ai qu'un fichier.Et donc,ça me demande ici, par exemple, si une vueque j'ai protégée, comme je l'ai mis tout à l'heure,il faut être admin.
00:41:18 :Donc là, en fait, en fonction de la réponse,il y aura une erreur. Et ce que je disaistout à l'heure,euh... Tac.Ici, quand je fais ça,voilà.
00:41:32 :En fait, mon back-end Django va me renvoyerun token. Je vais me l'enregistrerdans la session.Et maintenant, voilà, je peux afficher les infos.Bon, ça fait un peu à l'arrache.
00:41:42 :C'est vraiment pour l'exemple. Et donc, ce que vous pouvez faire,pour la prochaine fois, je vous montreun aperçu. Bon, là, le code, il est un peu sale
00:41:48 :et j'ai fait ça un peu à l'arrache.En gros, quand je fais mon...mon login, qui est là,ici, je vais faire une requêteeuh...
00:41:58 :dans mon login, voilà. Je vais envoyer légèrementune password. Et sij'ai une réponse qui envoieun statut code 200, que c'est réussi,je vais aller récupérer, en fait,le token dans la réponse,qui est dans le JSON, et je vais allerl'attribuer, en fait, dansun attribut ici. Donc, c'est ce qu'on appelle
00:42:16 :les sessions de Streamlit.Donc, c'est, je dirais, côté serveur.J'enregistre mon token, et en fait, une fois queje vais, ici, envoyer dans mestoutous, dans mes toutous,dans mes toutous, je vais aller envoyer, en fait, mon tokenpour pouvoir être autoriséà y accéder.
00:42:32 :Donc, si j'envoie le token, je serai obligé d'envoyer une réponse200. Sinon, et bien,je suis obligé de me connecter. Ça va me dire qu'il faut que je me connecte.
00:42:38 :Voilà.Voilà, en gros, basiquement, le principe du token.Mais ça, on le verra la prochaine fois.Peut-être pas la semaine prochaine, celle d'après.On verra. Mais on verra
00:42:48 :comment configurer facilement unJWT avec Django. C'est vraimenttout bidon, vous allez voir.Juste pour vous montrer très rapidementquelque chose.Je l'ai dans urls.
00:43:00 :Ma vue de token, en fait, je l'importeici, d'un module.C'est tokenobtained per view, ici.Voilà. Et en fait, c'est une vue que j'ai tout créé.
00:43:10 :J'ai rien à gérer. J'ai juste à ajouter.Moi, ici, dans le front,entre guillemets, je vais justealler chercher ma vue qui est toute prête.
00:43:18 :Et c'est tout.Donc, voilà.Ah, Pierre, non.Non, normalement, non.Déjà, j'avais voulu sourcerquand j'ai ouvert avec VS Code,mais je ne sais pas ce que je...
00:43:36 :C'est bizarre, l'autocompletion queje n'avais pas là.Euh...Dis-moi.Avec ModelViewSet,il est assez suffisant pour créer des grands projets?Euh, non.C'est un peu sorti spontané.
00:43:52 :C'est un peu spontanéce qu'il vient de dire, mais non, parce que...Alors, si j'ai encore la...J'ai mis où, là?Tac. Ici,normalement, tu as toutes les vues. Voilà.
00:44:04 :Et en fait, ce qui...Donc là, j'ai ModelViewSet.C'est ce qui parle de trucs un peu plus...Euh...Tac. Ici.Ah, voilà. Donc, vous avez ici l'API View.
00:44:16 :Donc ça, j'aime bien.C'est plus...Comment dire? C'est plus granulaire, en fait.Il va falloir redéfinir les méthodes nous-mêmes et redéfinirnotre...notre logique dans les méthodes.
00:44:28 :Bon, bien sûr, là, il n'y a pas de Serializer,mais moi, en général, dans lesAPI View, pas toujours. Moi, j'ai justeun truc pour dire, OK, je ne le fais pas,mais je mets toujours des Serializers, en fait.
00:44:38 :J'ai toujours, en fait, les données qui vont traverser un Serializerpour les renvoyer.Pour la validation.Euh... Ouais. Donc, vous avez, en fait, les...Tac. J'étais où?
00:44:48 :Voilà. Bon, ça, il parle des API View.Euh...Les vues...Vous avez les génériques vues aussi, qui sont pratiques.Donc là, j'en ai parlé vite fait tout à l'heure.
00:44:58 :C'est les ListCreate API View.Donc là, en fait, ça va vous permettre de créer une Get.Ça va redéfinir la méthode Get,mais avec...Euh...
00:45:08 :Ouais, il y a beaucoup d'abstractions, ouais.Plus rapidement démarrer qu'un FastAPI.Ouais, ouais, ouais, en fait,ça arrive avec plein de trucs. Il y a encore juste...
00:45:16 :Ouais, un truc que je voulais montrer.Euh...Euh... Je vais refaire un petit peu ici,parce que vous n'allez pas voir grand-chose. Par exemple, ici,
00:45:28 :vous pouvez faire...Euh...L'info que je retrouve...Euh...C'est dans le ViewSet.C'est HTT...Bah, ben, voilà. J'ai toqué en pression. Super.Et ici, vous pouvez dire,par exemple,si vous ne voulez avoir qu'une ou plusieurs,vous pouvez définir une liste de méthodes.
00:45:50 :Et là, si je ne dis pas de conneries, c'est comme çaqu'il faut faire. Euh...Mon RAMServer, il est là.Hop.Et normalement,si...Alors, je vais fermer la fenêtre qui est là.
00:46:04 :Si je vais ici,là, j'ai mon GET. Voilà.Et je n'ai rien d'autre qui apparaît.Donc maintenant, si je vais retourner là et que je vais faireautoriser un poste,hop,voilà, j'ai la poste qui est permise.
00:46:20 :Et elle apparaît là. Ainsi de suite.Donc oui, il y a vraiment la fractionet un ViewSet, on peut le configurer,parce qu'après,je sais qu'il est possible, je n'en fais pas,mais de définir des actions personnaliséesen fait, donc des routespersonnalisées.
00:46:36 :Mais moi, je préfère à la limite faire uneAPI View à part, quoi.Voilà.Euh... Donc voilà.Bon, désolé, j'ai qu'à sortirtout à l'heure l'immigration avec mon illégal solde.
00:46:48 :C'est vrai que...Euh... Mais sinon... Ah bah merci.Merci Pierre.Euh...Sinon, voilà, je voulais vraiment vous montrer ça, le modèle ViewSetqui vous permet de faire un trucquand même assez...
00:47:02 :assez sympa, quoi. Vraiment avoirtoutes les crêtes disponibles, pour pouvoir vous mettredes permissions, de pouvoir personnaliserchaque...chaque...Comment dire ? Chaque méthode avec son
00:47:14 :Serializer, si vous voulez. Donc on pourrait très bien en mettreplusieurs.Ah bah c'est rien, ça fait plaisir.Merci beaucoup.Bah si vous voulez, là...
00:47:26 :La prochaine fois, peut-être pas la semaine prochaine,mais si vous voulez, là, dans deux semaines, on pourra partirsur le Dangerous Remarks, si vous voulez.
00:47:32 :Parce qu'il n'y apas de problème.On pourra partir sur...Ok, bon, on va continuer.Bon, on fera ça, ok.Quand j'ai vu tous les pouces...
00:47:44 :Juste...Au niveau de l'authentification, ce que j'ai montré avec le token,on va peut-être voir comment on met en place un tokenet puis peut-êtreça va aller vite et voir aussi comment on peut faire des vuesplus personnalisées.
00:47:56 :Voilà, même comment on fait pour des vues de loginassez basiques. Bon, voilà.Est-ce que c'est bon ou paspour tout le monde ?Ok.
00:48:12 :S'il n'y a pas de questions,pour moi c'est bon.Il y a qui, là,qui est là, qui a passé le pauseur ?Il y a Baptistequi a passé le pauseur.
00:48:24 :Je regarde.Aurélie, bravo, en fait.Merci.Ouais, un sacré score.Je ne m'y attendais pas.Ah bah, ça fait plaisir quand tu...Après, quand tu bosses, c'est pas de raison.
00:48:40 :De toute façon...J'ai carburé sur la fin.Je me suis dit, allez.Nickel.Euh...Donc, voilà.J'ai eu plein de questions que j'ai eues.C'est assez rigolo.
00:48:56 :Ah, ça, franchement, c'est une bonne chose.Juste avant,j'avais révisé les verres en me disantmaintenant je refais pour bien voirsi j'ai bien compris mes exercices.
00:49:06 :Du coup, j'étais contente des exercicesmême qui étaient compliqués à la base.Du coup, ils sont repassés.C'est bien.Ah, c'est cool, ça.Moi, j'avais eu beaucoup de...
00:49:18 :J'avais eu beaucoup de...Comment dire ?D'évaluationsde questions que j'avais euesà l'éval.Beaucoup. J'ai peut-être eu 3, quand même.3-4 que j'ai eues au jour de la sortie.
00:49:34 :Ouais, je pensais pareil.C'est 3-4.C'était un peu ça.C'était cool, quoi.J'ai eu le graphe acyclique aussi.C'est bien de l'avoir révisésur Doctrine.
00:49:50 :Ouais, j'ai entendu l'acyclique.Tu l'as eue, du coup ?Ouais.Ok.Celui-là, en le révisant,il est jouable.Je crois qu'il te reste que 8 minutes pour le faire.
00:50:04 :Ouais, et j'ai failli louperpour un truc à la con.Je me disais, mais c'est ma boucle qui a un problème.C'est quoi ?Non, c'était à la fin.
00:50:14 :Il manquait une lettre.Pardon.Si t'as dit le nom de la lettre, j'étais là.C'est pas vrai.C'est celui-là ou un autre.Je me disais, mais c'est pas vrai.
00:50:26 :Qu'est-ce qui passe pas dans le print ?Faut bien regarder.Parfois, t'as une erreuret il te dit combien il y a d'erreurs.Non, mais toi, sinon,c'est pas irréalisable, tu vois,de ne pas faire des montagnes.
00:50:40 :Mais franchement, c'est jouable.Voilà, j'ai eu quelqu'unqui a bossé là à fondque j'ai suivices dernières semaines.Elle n'a pas trop le temps, mais bon,elle s'est mise quand même à la fin.
00:50:54 :Là, elle a demandé à faire deux évals.Et bien, elle a eu 4-5 à chaque fois.Donc, demain, elle le passe, quoi.Ah, tranquille.Pourtant, elle n'a pas pris trop le tempsde bosser, mais bon, après, d'avoir une bonne mémoire.
00:51:06 :Parce queelle s'est bien mis au courant, je ne sais pas,trois semaines dessus, là, trois semaines à fond,elle a bien rattrapé le niveau.
00:51:14 :Donc,si, pour ceux qui ont déjà les baseset qui font déjà du Python, franchement,trois semaines à fond dessus, avec tout ce qu'on a mis,ce que je disais une fois,c'est Simon qui me disait, quand tu l'as passé,toi, à l'époque, il n'y avait aucun,enfin, il n'y avait pas de ressources.
00:51:30 :Je crois que je suis le premier à l'avoir passé sur Dexstring.Et il n'y avait pas encore les quiz,il n'y avait pas encore les questions tozales,les tests, tout ça. Et franchement, maintenant,
00:51:38 :avec tout ça, ça vous donne un coup de main.Là, vous avez plein d'exemples etje suis sûr qu'il y a plein de choses qui sontles quiz, les exercices que vous allez retrouver le jour du tozo,c'est sûr.
00:51:48 :Oui, j'en ai eu aussi.Mais c'est ça qui est trop bien.Je crois que lundi et mardi,j'ai repassé les tests de compétences avancéeset experts.
00:51:58 :C'était le principaux que j'avaisqu'il fallait que je revois. En expert, j'avais eu 50%.Moi, j'étais passéeà genre 70 ou 80.J'étais là, je suis contente.
00:52:08 :J'ai dû m'améliorer.Je me dis, bon, je dois être prête pour y aller.C'est cool.Ça permet bien de voiroù t'en es.Comme les questions reviennent,à force de réécrire, tu retiens.
00:52:22 :C'est vachement cool.Nickel.En tout cas, bravo. Ça fait plaisir.Ça fait plaisir.Écoutez, moi, s'il n'y a pas dequestions, je vais vous laisser.
Aucune occurrence trouvée pour « ».