Session du 20 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
Authentification JWT avec Django REST Framework
Découvrez comment intégrer Simple JWT à Django REST Framework pour sécuriser vos APIs, comparer les types d’authentification et préparer un backend pour front web ou mobile.
00:00:00 :Bonsoir tout le monde, est-ce qu'il y en a qui ont déjà utilisé avec DRF SimpleDWT ?Non ?Personnellement oui, tu me l'avais recommandé dernièrement.
00:00:27 :En gros, sans montrer l'écran pour l'instant, avec Django REST Framework, il y a différents moyens de gérer l'autre au niveau de la connexion.En gros, de base, ce qui est prévu avec DRF, c'est que vous pouvez créer avec Django tout court.
00:00:56 :Déjà, vous créez votre projet en MVT, comme tout le monde connaît.Vous faites votre MVT.Et s'il y en a qui n'ont pas fait de Django, vous avez vos vues et vous les rendez dans les templates.
00:01:06 :Vous avez vos modèles qui tournent derrière.Avec DRF, au niveau de l'autre, vous pouvez créer des vues d'API, des endpoints, que vous utilisez en plus dans votre projet Django.
00:01:19 :Pour ça, ils utilisent la session Auth.J'ai déjà l'écran.Ce serait pas mal que je partage.Je vais commencer.Avec Django REST Framework, je ne vous cache pas que ça va dans les settings du projet Django.
00:01:50 :Vous pouvez spécifier de quelle manière vous avez autorisé l'authentication pour parler anglais.Quand vous utilisez un projet MVT, l'idéal, c'est d'utiliser les Basic Authentication.Vous profitez des sessions de Django.
00:02:09 :Comme ça, l'utilisateur connecté à votre projet sur votre site, ça lui permet d'appeler les vues d'API sans souci.Il n'y a pas longtemps, je bossais pour une boîte.
00:02:20 :Malheureusement, ils ont abandonné Django pour Node.js maintenant.Je bossais pour une boîte qui faisait du DRF et s'en servait juste comme pur API.L'autre qui a été utilisée, ce n'est pas ça du tout.
00:02:43 :On me demandait s'il serait bien d'utiliser un token.Avec DRF, il est possible d'utiliser un token qui s'appelle JWT.Je vais vous montrer rapidement à quoi ça ressemble.
00:02:59 :Je crois que c'est la librairie la plus connue avec DRF pour gérer les connexions par token.Vous allez voir, c'est puissant parce que Django est capable de décoder les tokens.
00:03:15 :Mais on va voir un peu plus en détail.L'autre de base avec les sessions, c'est vraiment bien quand vous avez des projets en MVT,vous avez en plus des vues d'API en même temps, que moi je n'ai jamais utilisées.
00:03:29 :Parce que quand je fais du Django, en général, MVT, je n'utilise pas DRF.Peut-être que maintenant, je vais l'utiliser, on verra.Là, on va vraiment faire le JWT.
00:03:40 :C'est pratique par exemple si vous avez le projet Django, comme je disais,et que les personnes qui vont faire le front vont faire par exemple une application mobile.
00:03:49 :Moi, j'avais commencé le projet Django REST Framework.Vraiment, c'était prévu pour une appli mobile.Ceux qui font le front avec purement des frameworks React, le token JWT, c'est vraiment l'idéal.
00:04:05 :Surtout avec cette librairie, vous allez voir, c'est facile à mettre en place.Donc, je repars sur le projet de la semaine dernière.Si vous vous souvenez, on avait vu des vues, les ModelsViewSet.
00:04:22 :Ça c'est bon pour tout le monde, où on avait en fait une classe.Et en fait, avec la classe, on générait un endpoint pour le get, le put, le post, le patch, le delete.
00:04:33 :Pour ça, c'est bon ?Ou pas ?Ok.Dites-moi si jamais, n'hésitez pas à m'interpeller.Vous me criez dessus, il n'y a pas de problème.
00:04:47 :Donc voilà.On avait déjà un ModelViewSet sur ce projet.Et du coup aussi, je le remonte pour ceux qui n'étaient pas là.Juste au passage, c'est qu'en mardi soir, on a parlé Singleton.
00:05:05 :Et on a mis en pratique aussi sur ce projet-là un Singleton appliqué à Django.Donc si il y en a qui ont besoin que je revienne, je pourrais revenir aussi en fin de session, il n'y a pas de problème.
00:05:14 :Donc voilà.Le Singleton qui me servait à gérer les settings dynamiquement dans l'administration de Django, et donc en base de données.Donc voilà.Maintenant, c'est parti.
00:05:29 :On va regarder un peu SimpleJWT.Franchement, vous allez voir, c'est vraiment à mettre en place d'une facilité, comme beaucoup de choses avec Python.Donc là, ils vous disent exactement quoi installer.
00:05:43 :C'est comme d'hab.Je crois que je l'avais déjà installé sur celui-là.Ouais, c'est bon.Donc là, c'est déjà installé.Ensuite, comme d'hab, on va dans les settings.
00:05:57 :On retourne ici.Et ça s'appelle comment ?Je crois que...Il est où ?Il ne faut pas oublier de le mettre.Voilà.REST Framework.
00:06:07 :À chaque fois que l'orthographe, je m'y perds avec celui-là.Voilà.On va le mettre là.OK.Donc ça, on va le mettre en premier, d'ailleurs.
00:06:16 :Donc on retourne là.Et maintenant, ce que je disais tout à l'heure, c'est que le projet, en fait, maintenant, il faut le configurer.Il faut le configurer, en fait, avec cette classe pour l'authentication.
00:06:29 :OK ?Donc on va utiliser les JWT.On ne va pas utiliser les sessions avec Dango.Donc pour ça, on va les spécifier.Il est où ?
00:06:37 :Ici.Hop, virgule.Et bien sûr, on va...Donc voilà.Et donc là, à partir de là, vous êtes prêts à utiliser ça.Et en fait, le but, du coup, comme je disais, c'est d'envoyer des tokens dans le front-end.
00:06:55 :Ah, attends.Baptiste, j'ai vu un message.Ah, merci.Oui, alors Baptiste, du coup, merci.Tant que j'y pense, je te le dis, c'était PeeWee que j'avais vu et vraiment qu'il me faisait envie.
00:07:07 :Tout simple.Merci.Du coup, je disais...Voilà.Le but, c'est d'envoyer, du coup, un token.Il y a Pierre qui est là.Je vais l'accepter.
00:07:23 :Je vais lui faire un petit résumé à Pierre.Pierre qui a été notre recordeur, beaucoup, de sessions Discord.Salut, Pierre.Je ne sais pas si tu nous entends.
00:07:35 :Salut, salut.Pierre, est-ce que toi, tu as déjà fait du SimpleJWT ou pas avec Dango ?Ne t'inquiète pas.Non ? OK.Alors, je résume rapidement.
00:07:49 :Je vais aller un peu plus vite que tout à l'heure pour te présenter.J'y vais avec Django en NVT.Tu peux donc installer DRF aussi.
00:07:58 :Et tu as une classe d'authentication qui est vraiment utilisée les sessions de Django.Dans ton projet, dans ton site, on va dire ton site Django,tu peux, comme ça, appeler des UAPI et tu profites des sessions de Django, en fait, pour les appeler.
00:08:13 :Donc, si elles sont protégées par du login, ça marche très, très bien.Là, ce que je disais, c'est que ce soir, on a commencé d'ailleurs à mettre en placece qui est le plus connu avec DRF pour les tokens, un système de tokens avec SimpleJWT.
00:08:28 :Et en fait, le but, ça s'est très utilisé.Quand tu fais une API en Django REST Framework, ça s'arrête là.Après, le front, ça va être du genre du mobile, du React ou du React Native, ce genre de choses-là.
00:08:41 :Et du coup, l'idéal, c'est d'utiliser ce qu'on appelle des tokens.Donc, voilà.Donc, on a installé ce qu'on appelle Django SimpleJWT, qui est vraiment, je crois, le plus utilisé.
00:08:54 :Et il faut penser à dire, en fait, à Django REST Framework, ici, à Django,qu'on va utiliser des JWT pour l'authentication.Sinon, il va vous renvoyer les tokens, mais ils ne marcheront pas en retour.
00:09:08 :Ils ne seront pas décodés, quoi.Et donc, j'en étais où ?Je vous disais, le but, c'est d'envoyer des tokens quand la personne vient se faire un login,vient se login, elle rentre son username, son mot de passe, et nous, on renvoie un token.
00:09:20 :Et après, dans le front, la personne qui développe le front, moi, perso, je n'en fais pas.Je fais vraiment pure du back-end, pour l'instant, en tout cas.
00:09:27 :Et en fait, si j'étais dans une équipe où la personne faisait du front et moi, je faisais le back-end.Et on était vraiment séparés.Et donc, je disais, moi, j'envoyais le token et elle, elle le stockait,et puis elle se débrouillait, en fait, pour le travailler avec.
00:09:38 :Et vous allez voir que le token, en fait, il vous permet d'accéder à toutes les infos possiblespour votre utilisateur.Donc, voilà.Donc, j'ai fait ça.
00:09:48 :Et ensuite, il faut penser, donc là, je suis désolé, je le mets dans l'URL directement comme ça,je ne fais pas d'application d'appareil ni rien.
00:09:57 :Vous avez dans la doc, franchement, ils vous mettent tout.Vous voyez.Tac.Et en fait, il faut aller importer.Ici, il y a des vues toutes prêtes.
00:10:07 :Donc, on va le mettre là, par exemple.Voilà.Et donc, c'est token, il y a le OptenPairView.On a plusieurs.Et c'est le token, il n'y a pas le RefreshView ici.
00:10:20 :Donc, on va le mettre là, par exemple.Voilà.On a plusieurs.Et c'est le token, il n'y a pas le RefreshView ici.Voilà, le RefreshView.
00:10:28 :OK.Et donc là, après, je vous explique.Vous utilisez, en fait, vous mettez donc, vous voulez, de l'URL.Et puis, vous les utilisez.C'est des classes.
00:10:36 :Donc, on pense bien faire un AsView.Appeler la méthode.Donc, c'est parti.Pass.Tac.On va l'appeler, je ne sais pas, on va l'appeler, il y avait Opten, il l'appelait comment ?
00:10:49 :C'était bien appelé OptenPair, je crois.Bon, on va même le copier directement.Moi, je garde l'habitude de prendre exactement ce que je vais émettre.Comme ça, à chaque fois, c'est identique.
00:10:58 :Hop là.Tac.Donc, voilà.Et là, on a nos routes de créer.Et vous allez voir que c'est magique.C'est super chiant.Il me lâche de l'autre côté, là.
00:11:16 :Hop là.Hop là.OK.Donc là, on était sur le routeur de l'autre fois, là, avec notre get.Et donc, il s'appelle comment déjà ?
00:11:32 :J'avais créé comment ?C'était API Token.Voilà.API Token.Et donc là, on est sur la vue.Donc forcément, la get n'est pas autorisée, mais bon, j'accède par la get.
00:11:46 :Et en fait, ici, je vais rentrer dans le suicisme.J'ai changé mon mot de passe.Et donc là, hop, je vais rentrer mes informations de connexion.
00:12:02 :Et vous voyez ici, il me renvoie un token d'accès.Donc, ça va me permettre, c'est vraiment ce qui va me servir en moi.Donc, la personne qui est dans le front va l'utiliser pour accéder à trucs du protégé.
00:12:15 :Et vous allez voir qu'il y a plein d'infos sur l'utilisateur.Enfin, toutes les infos de l'utilisateur.Et ici, c'est un token pour régénérer.En fait, parce que le token d'accès, par défaut, avec TeamPageWT,il n'est valable que 5 minutes.
00:12:31 :Donc, dans le front, alors ça, je ne sais plus exactement comment elle est faite,mais en fait, elle va appeler une route.Donc, par exemple, le refresh, il est là.
00:12:38 :Je vais le copier pour vous montrer.Donc, vous avez un token de refresh et d'accès.Et le refresh va permettre de renouveler, de régénérer un nouveau token d'accès.
00:12:50 :Et donc, la route s'appelle token là refresh.Et en fait, la personne qui est dans le front, elle va utiliser ce standpoint-là.Vous allez avoir le token de refresh qui va être utilisé.
00:13:04 :Post, boum, et ça va vous générer un nouveau token d'accès.Et ainsi de suite.Donc, elle va gérer, vu que par défaut, c'est par exemple 5 minutes l'accès.
00:13:15 :Au bout de 4 minutes, elle va se dire, allez, je vais faire un appel sur le refresh.Et boum, je régénère, je régénère, je régénère.
00:13:21 :A savoir que le refresh, lui, il est valable de peut-être 24 heures.Alors, je vais vous montrer. Ça, ça se configure.Est-ce que ça va pour l'instant, en fait ?
00:13:36 :Je parle, mais si je vais trop vite, vous le dites.Après, on verra un peu plus en détail.OK, super. Parce que là, on voit que des tokens, donc j'avoue que c'est pas fou.
00:13:49 :On ira sur un autre projet qui est quasiment identique.J'ai préparé un petit truc pour montrer un peu comment ça marche.Donc, on a les tokens.
00:14:00 :Donc, je vais recopier mon nouveau accès et je vais vous montrer quelque chose.Donc, c'est une techno qui est vachement sécurisée.Vous avez le gible de wt.io.
00:14:12 :Vous pouvez voir leur site. C'est utilisé par plein de boîtes.Et vous pouvez aller voir votre token. Vous pouvez le coller.Vous savez quel algo c'est, quel type c'est.
00:14:23 :Et ça vous dit que c'est un token d'accès.Ça vous dit quand est-ce qu'il a été généré.Il y a T, c'est ça, expiré, quand est-ce qu'il expire.
00:14:30 :Ça, c'est un identifiant unique.Et ça, ça vous dit que c'est l'utilisateur qui a le PK qui est de 1.Donc là, il est décodé direct.
00:14:40 :Ça vous dit que le PK est de 1.Après, vous pouvez le modifier. Ça va modifier le token.Ça va vous régénérer le token, mais comme si le PK était de 2.
00:14:49 :Niveau sécurité, je vous rassure.Si vous changez le PK, que vous renvoyez le token,vous n'allez pas vous connecter en tant que le mec qui correspond au PK de 2 dans la base.
00:15:00 :Là, en fait, c'est vachement sécurisé parce que dès que vous changez un truc,la signature du token ne marche plus et c'est fini, c'est refusé.
00:15:06 :Je l'ai attesté, ce n'est même pas la peine.Donc voilà, vous pouvez décoder votre token ici directement aussi, rapidement.Et donc, voilà.Et je voulais vous montrer un truc aussi, et c'est dans les settings.
00:15:25 :Donc je vous disais, ici, vous pouvez dans vos settings d'angomettre explicitement ce dictionnaire et changer ou ne mettre que ce que vous voulez changer.
00:15:36 :Le access, je vous disais, c'est 5 minutes.Le refresh, c'est une journée.Voilà, donc vous pouvez changer si vous voulez.Ici, ça utilise Time Delta.
00:15:47 :Vous pouvez vous amuser à le changer. Enfin, si vous voulez vous amusez.Vous pouvez modifier ici.Et très important, quand vous utilisez des logins par token,dans la base de Django, je ne sais pas si tout le monde le sait,il y a un champ pour l'utilisateur qui s'appelle la slogin.
00:16:10 :Comme ça, on sait quand est-ce qu'il s'est logé la dernière fois.Par défaut, c'est à false, donc false.Donc si vous voulez savoir quand est-ce qu'il se log,il faut le mettre à jour, le champ.
00:16:20 :Ici, il faut le redéfinir et le passer à faux.Vous ne me faites pas avoir, je me suis fait avoir et je commence à me direil faut que je recode une vue qui me gère ça.
00:16:27 :Alors qu'en fait, non, vous avez juste à définir le dictionnaire ici et le date de la slogin.Et comme ça, vous pouvez mettre à jour à chaque fois la slogin sur votre utilisateur.
00:16:38 :Est-ce que c'est bon ?Continuez.Ok.Du coup, je vais partir sur...Est-ce que je pars directement sur...Ok, on va faire ça.Tac.On va partir sur un autre projet qui ressemble.
00:17:06 :Je vais t'amuser une fois.Ce n'est pas Touloulite.Là, j'ai fait exprès d'avoir un front-end séparé.Un front-end, c'est un grand mot.Un front-end, c'est juste un fichier Streamlit.
00:17:22 :Et donc une petite appli backend qui ressemble beaucoup à celle qu'on a vue là.Et je voudrais du coup...J'utilise les tokens ici.Ils sont où mes tokens ?
00:17:37 :Ok, ils sont là. C'est bon. Je les ai bien mis.Alors, ne faites pas attention. Il y a des spectaculaires API View.On fera un mentorat là-dessus à part, mais c'est un gros pavé, ça.
00:17:47 :C'est pour documenter son API.Et là, je voudrais du coup qu'on crée...Donc, on va voir si vous vous souvenez un peu ou si vous avez une idée.
00:17:59 :Je voudrais qu'on crée en fait un endpoint qui permet de récupérer des infos sur l'utilisateur.Mais d'une manière la plus sécurisée possible, donc avec un serialiseur.
00:18:12 :Est-ce qu'il y en a qui ont une idée de comment on peut faire ?Ce qu'on peut utiliser ?Si vous ne savez pas, vous ne savez pas.
00:18:26 :C'était quoi la question ?Je vous disais, j'aimerais bien qu'on crée une vue d'API, un endpoint,qui retourne les informations de l'utilisateur.C'est pour vous montrer que le token, en fait, il est très très pratique.
00:18:46 :Avec un serialiseur si possible.Est-ce que vous avez une idée ou vous ne faites vraiment jamais de DRF ?Je ne sais pas, l'importation m'embête un peu.
00:19:05 :Je pense que c'est form, et puis ensuite on importe DRF.Form, DRF, ou quelque chose comme ça.Import serialiseur.Ok.Donc le serialiseur.Oui.Et après ça, on pouvait créer une classe.
00:19:30 :Ok.Ok, nickel.Pour info, on va utiliser le modèle utilisateur qui est Business Django,donc on va...C'est quoi, c'est .contrib ?.contrib.auth, je ne sais pas si tout le monde le connaît bien.
00:19:48 :Celui-là, on va importer GetUserModel.Et moi, ce que je fais toujours, comme ça il n'y a pas de soucis,je sais que j'utilise le modèle que j'ai prédéfini dans mon projet Django.
00:20:01 :Comme ça, c'est dynamique et je récupère toujours le modèle que j'ai défini dans mon projet.Grâce à cette fonction-là.Donc, effectivement, ici, on va utiliser un serialiseur.
00:20:15 :Je ne sais pas si vous vous souvenez, il y a un serialiseur qui est très pratique,qui permet d'écrire pas beaucoup de codes.Donc, vous avez...
00:20:30 :Serialiseur en vidéo, il y a-t-il une histoire comme ça ?On a le modèle serialiseur.D'accord, oui.Et en fait, le modèle serialiseur,il vous permet d'y récupérer plein d'infos dans votre base avec très peu de codes.
00:20:51 :Donc, on va définir une classe méta.On avait déjà fait un modèle serialiseur, c'est ça.Ici, on définit quel modèle j'utilise.Celui que je vais récupérer là-haut.
00:21:02 :Et ensuite, on définit quel champ on va utiliser.Alors, on pourrait très bien faire une liste en mettant, je ne sais pas,il y a username, last name, last login,ou on peut très bien faire all.
00:21:21 :Voilà.Et donc là, en fait, vous récupérez tous les champs.Bon, après, je ne sais pas si c'est utile de récupérer tout, tout, tout,mais ça existe.
00:21:28 :Là, pour le cas, on va le faire.Donc là, on a créé un serialiseur.Bon, je vous avoue qu'il est très, très basique,mais c'est juste pour faire un get basique.
00:21:37 :Donc, c'est suffisant.La dernière fois, je ne sais pas si vous vous souvenez,on avait utilisé sur l'autre projet.Alors, je vais revenir dessus parce que c'est assez important.
00:21:50 :On va revenir au token après,mais j'en profite pour parler un peu de choses assez importantes.Parce que DRS, c'est un gros pavé quand même.
00:22:03 :Si vous vous souvenez bien, la dernière fois,on avait une vue qu'on appelait ModelView7.On en a parlé au début.Et donc, le ModelView7 nous gérait justement le get, le post, le put,et ainsi de suite.
00:22:15 :Ça, c'est bon ?OK, OK, OK.Vous n'êtes pas obligé, forcément,vous n'êtes pas obligé de faire toujours comme ça.Vous avez différents niveaux d'abstraction, on va dire.
00:22:32 :Et je retourne ici.Et donc, vous pouvez utiliser une simple,ce qu'on appelle une API View.Une classe API View,c'est quand vous allez vraiment faire beaucoup de choses vous-même.
00:22:45 :Après, il y a des vues génériques.Donc, la vue générique, il y a déjà une couche d'abstraction supplémentaire.Et après, vous avez les ModelView7,comme on a vu là sur l'ancien projet.
00:22:54 :Donc là, pour un simple get sur l'utilisateur,on va, pour vous montrer un peu le truc,je vais utiliser du coup une API View.Donc, c'est pour un vue, je crois.
00:23:05 :Ouais, on importe.API View.Et ça, l'API View, ça va vous obliger à définirquand même plus de choses qu'un ModelView7.On va protéger la route, forcément, de notre utilisateur.
00:23:18 :Donc, je pense qu'il faut les permissions.Et voilà, c'est ça.On va vouloir que les personnes soient authentifiées avec le token.Et pour gérer les réponses de notre API,j'utilise toujours ça.
00:23:37 :Moi, c'est l'objet Response.Et en fait, l'objet Response, j'aime bienparce que du coup, ça vous...En fait, dans le constructeur,vous allez voir qu'on instantie l'objet Response.
00:23:50 :Vous pouvez, en fait, envoyer un étage HTTP,donc une 201, une 200, tout simplement.Mais par défaut, l'objet Réponse,si c'est une vue Get, machin,il arrive par défaut à prendre la bonne réponse, en général.
00:24:04 :Et en plus, il est bien pour envoyer vos datas en format JSON,il vous gère tout, en fait.Donc, moi, j'utilise beaucoup cet objet-là.Et notre Serializer, voilà.
00:24:13 :On va importer ces...User Serializer ? Ouais, OK.Donc, comme je le disais,avec une API Vue,vous ne pouvez pas faire comme avec un modèle Vue7.
00:24:25 :Donc, on va l'appeler User Vue.Et on va hériter de API Vue.On se fera un mentorat, je pense,sur les différentes vues qu'on peut avoir.
00:24:35 :Et ici, on va définir Permission Classes, Permission Classes.Et on va dire qu'on veut qu'il soit authentifié,donc connecté.Et en fait, ici, avec l'API Vue, ça vous oblige...
00:24:49 :Donc, dans modèle Vue7, on ne faisait quasiment rien.Ça vous oblige à redéfinir les méthodes, OK ?Donc là, il faut refaire votre méthode Get.
00:24:57 :Hop.Et ici, on va utiliser Request.On pourrait très bien aussi définir...Je ne vais pas le faire là, mais une poste, par exemple, OK ?
00:25:08 :Donc, à chaque fois, vous redéfinissez les méthodes que vous l'utilisez.Et donc, ça vous oblige à...à refaire votre logique.Mais moi, j'utilise beaucoup cet utilisateurparce que j'ai pas mal de logique que je fais moi-même,notamment au niveau des envois d'emails pour l'inscription, tout ça.
00:25:26 :Donc, à chaque fois, sur le compte, j'utilise beaucoup l'API Vue,qui est vachement bien pour ça, qui est sécurisé,qui me permet d'utiliser mes Serializers.
00:25:34 :Donc, j'aime bien, j'ai mes permissions ici.Donc, très pratique.Et en fait, c'est tout bête.Ici, on va utiliser notre User Serializer.Et qu'est-ce qu'on fait ?
00:25:45 :Et bien, grâce à la requête, on va récupérer notre utilisateur.Donc, dans notre Serializer, on va envoyer l'utilisateur.Parce qu'il est fait pour ça, il est fait pour travailler avec le modèle utilisateur.
00:25:56 :Donc, voilà.Et tout simplement, on va utiliser l'objet Response.Et on va envoyer, du coup, les données de notre Serializer.Donc, Data.Donc, vous voyez, en fait, ce qui est bien avec DRF,c'est que vous combinez, en fait, l'AVoVue, Response,et les datas que vous voulez envoyer avec votre Serializer.
00:26:17 :J'aime bien les Serializers, parce qu'en fait,vous écrivez, du coup, beaucoup moins logique, là, dans votre Response.Et vous faites tout gérer, la plupart, par votre Serializer.
00:26:27 :Là, j'ai fait une grosse app, malheureusement, qui a été abandonnée.Comme c'est une grosse application, c'est un projet qui a été abandonné par une boîte.
00:26:36 :Et je faisais tout, en fait, comme ça, tout en Serializer.Et c'est très pratique.Et donc, si on voudrait, ici, alors je ne sais pas si c'est ici.
00:26:48 :Je vais vous le montrer, je ne vais pas l'utiliser là,mais je ne sais plus dans quel module c'est.Je crois que c'est directement comme ça.
00:26:59 :Et on pourrait très bien faire.Status égal.Je crois que c'est comme ça.Et en fait, vous pouvez définir différents statuts manuellement, vous voyez,grâce à l'objet statut.
00:27:16 :Et c'est très bien géré, du coup, par la classe Response ici.Mais par défaut, vu que je fais un get,si on ne définit pas, il sait très bien laquelle utiliser.
00:27:26 :Donc, voilà. Est-ce que c'est bon pour tout le monde ?Est-ce que ça ne va pas trop vite, c'est intéressant ou pas ?Et là, on va voir, du coup, l'utilité.
00:27:37 :Oui, c'est intéressant.OK, merci.Du coup, je vais vous montrer déjà quelque chose qui peut être sympa.Forcément, si je ne suis pas dans le back-end.
00:27:55 :Run serveur.Ah oui, OK, d'accord.OK, j'ai compris.Je crois que j'ai compris.J'avais dû créer une URL avant, à mon avis.Ah oui, je ne l'ai pas sauvegardé.
00:28:15 :OK, c'est bon.En fait, je ne l'ai pas montré, mais j'avais préparé ici l'import dans l'URL.Ce qui m'intéressait, c'était de vous montrer le serializer et la vue.
00:28:25 :Mais j'avais préparé la vue, je l'avais déjà importée, et j'avais mis une URL ici.Donc, voilà.Donc, si je retourne.Donc, ça, je vous le montre.
00:28:38 :Mais ce n'est pas prévu avec Django REST Framework.C'est moi qui l'ai mis en place.Et encore, je l'ai mal documenté.Je l'ai vraiment mis du basique.
00:28:47 :Mais c'est juste pour vous dire que c'est sympa parce qu'on voit direct les routes que j'ai dans mon projet.Et on voit, du coup, notamment la vue du token.
00:28:57 :Voilà.Je ne vous montre pas ça.Et en fait, vous pouvez directement tester votre API comme ça dans votre navigateur.Là, c'est sur le refresh, mais sur le propriary token.
00:29:11 :Vous pouvez directement tester sur votre Swagger comme ça.Et en fait, vous pouvez documenter, mettre des exemples de schémas.Ça vous donne plein de trucs, en fait.
00:29:21 :Mais bon, ce n'est pas le but de ce soir.Je voulais juste vous montrer qu'on peut faire vraiment un truc sympa.C'est ce qu'on s'appelle ça.
00:29:28 :Si vous vous rappelez ça, ça s'appelle DRF spectaculaire.Je fais ça avec ça.Mais là, ce qui nous intéresse, du coup, ça va être...Hop, on va aller en frontend.
00:29:42 :Et on va faire un streamlit run main.py.Et normalement, il me l'a ouvert.Et donc, si je ne me suis pas bourré...Voilà, donc ça, c'est connecté à l'API.
00:30:02 :C'est à part.Donc là, par exemple, comme j'ai fait l'autre fois, je vais mettre mon...Je vais faire un login.Et vous allez voir.C'est moche, je sais, c'est juste pour l'exemple.
00:30:21 :Donc, c'est juste pour vous montrer qu'avec juste un token,Django est capable, en fait, en recevant le token,parce que là, c'est streamlit.Donc, quand j'ai fait le login, je l'ai récupéré le token.
00:30:35 :Je l'ai sauvegardé dans ma session.Donc, il est sauvegardé côté serveur.Et je l'ai renvoyé à Django.Et Django me le décode et me renvoie les bonnes infos.
00:30:47 :Donc là, je suis capable de dire qu'il s'appelle comme ça,que c'est un admin et qu'il s'est connecté.Du coup, la dernière fois, il est là.
00:30:53 :Bon, il y a un décalage, je n'ai pas réglé le fuseau,mais il est capable de dire quand je me connecte.Donc, je récupère vraiment toutes les infos de mon utilisateur.
00:31:00 :Et en fait, ça, mon code, il est où ?C'est quand vous envoyez votre token,quand vous avez bien définila classe HWT-HOT, ici,Django, lui, derrière DRF,il va être capable d'utiliser le tokenet d'aller chercher toutes les infos de son utilisateuret puis de faire comme avec un projet normal.
00:31:27 :Vous accédez à toutes vos données.Si je retourne, par exemple, je vais vous montrer le code.Alors, ne faites pas attention.Le code est ça.
00:31:38 :J'ai vraiment codé un truc à l'arrache,mais vraiment à l'arrache de chez l'arrache.Je montre un peu plus que l'autre fois.En fait, avec Streamlit,juste pour la petite info,ça c'est entre guillemets front-end,je stocke mon token ici dans un attribut.
00:31:58 :Et ça, c'est dans ma session.Et si j'ai bien mon token qui s'est enregistré,que je récupère dans le login,si j'ai bien mon login,que je clique sur login,j'envoie mon username et mon mot de passe,je fais une poste,donc les datas qui sont là,j'ai bien mon URL et mes datas.
00:32:25 :Je suis bien sur l'endpoint là,pour récupérer le token.Et si j'ai bien ma réponsequi m'envoie un statut code 200,si c'est OK, je récupère mon token.
00:32:37 :Je fais un response.jsonet je fais un get sur la clé accesspour récupérer mon token d'accès,mon login en fait.Et donc j'enregistre mon token dans la session.
00:32:52 :Et ce que je fais,c'est que quand ça recharge ma page,si j'ai bien un token ici,je récupère les informations de l'utilisateuravec l'endpoint qu'on a fait tout à l'heure.
00:33:05 :Donc l'API joue là avec l'utilisateur.En lui envoyant le token ici dans le header,je lui envoie le token que DRF m'a renvoyé.Et je suis capable d'aller récupérertout ce qui est dedans,l'username, si c'est un super utilisateur,le last login,et toutes les infos que je veux.
00:33:27 :Et pour la petite info, j'utilise HTTPX.Ce n'est pas Request, mais c'est HTTPX.Mais ça ressemble beaucoup comme ça, basiquement.Est-ce que ça, ça va ou pas ?
00:33:36 :Ou c'est plus...Vous me dites.La partie Streamlit,donc en fait,elle représente le front.Oui, et elle est mal codée.Donc ça aurait pu être du ReactJS,du VueJS,qui fait le même boulot, en fait.
00:34:01 :Oui, c'est vraiment parce que...Je te dis, en plus, le code n'est pas beau.J'ai vraiment juste fait des bouts de code à l'arracheque je me suis fait rapidement hier soir.
00:34:11 :Je l'ai complété comme ça, tu vois.Oui, l'idée, c'était d'avoir quelque chosequi met comme une visionneusede la partie Django, en fait.C'est ça. Bon, alors...
00:34:23 :OK, la partie back.Baptiste, je suis d'accord. J'avais vu qu'il y avait des réflexes.J'avais essayé.Et du coup, c'est ça.Et en fait, c'est pour montrer que dans le front,ils vont utiliser des endpoints.
00:34:36 :Des endpoints...Boum.Vos endpoints que vous définissiez,donc la UserView qui est là.En fait, dans le front, ils vont s'en servirpour ceux qui font le front.
00:34:48 :Hop, ils vont prendre l'endpointet ils vont s'en servir pour afficher vos informations à chaque fois.Tac.Et donc, c'est pour ça qu'à chaque fois,ils vont s'en servir pour tous les endpoints.
00:34:58 :Un par exemple, comme je vous l'ai montré,pour récupérer les tokens.Pour en mettre un pour le refresh.Et ainsi de suite.C'était vraiment pour montrer le JWT.
00:35:08 :C'est vraiment une façon de faireoù vous envoyez le tokenet le Django est capable de le décoder.Vous faites vos vues, en fait,et il va tout seul sans que vous le voyez.
00:35:18 :Limite, il va vous...En passant par l'objet request, en fait,vous allez utiliser votre request.useret il n'y a pas de problème.Ce que je veux dire,c'est que le token ne vous oblige pas forcémentà faire plus de codes, quoi.
00:35:32 :Et c'est ça qui est bien.OK.Donc, voilà.Est-ce que vous avez des questions ?Si j'essaie de répondre, il n'y a pas de problème ?
00:35:42 :Ou pas ?Je voulais peut-êtrevous montrer rapidementles choses que j'avais prévuespour les prochaines fois.Hum...Ça, je vous le montre rapidement.C'est pourquoi, s'il y en a qui se lancentdans DRF et que je ne fais pas de mentorat maintenant,au moins, je vous montre un peu
00:36:05 :les librairiesque j'aime bien.Donc, ça, DRF Spectacular,c'est quand j'ai faitmon swagger.Quand j'ai montré le swaggeravec toutes mes routes,et bien, en fait, vous pouvez utiliser ça.
00:36:21 :DRF Spectacular, et ça vous permetd'augmenter votre API.Voilà. Il y a ça.Et je voulais vous montrer aussidansDjango...Django RestFramework.Hop là.
00:36:39 :API Guide, les vues, les vues génériques.Et donc, ce que je vous disais,c'est que là, franchement, j'avoue que la doc,elle est bien foutue. Et des fois, il y a des docs
00:36:49 :où j'ai vraiment du mal. Je ne vous le casse pas.Euh...Je ne sais pas pourquoi, il y a des docsoù j'ai du mal. Donc là, par exemple,
00:36:57 :il vous explique un peu l'API View.Et donc,il vous montre comment ça marche.Vous redéfinissez iciles méthodes.Après, vous avez...Il vous montreles vues génériques.
00:37:13 :Donc, qui sont très pratiques.Donc, des listescréées avec l'API View, en fait, voilà.Euh... Je ne sais plus.Moi, j'avais la liste API View qui était pratique.
00:37:23 :Enfin, en fait,Rest Framework, déjà, vous fournitpas mal de...Là, par exemple, liste API View,ainsi de suite, voilà.Restrect API View, destruct API View, update API View,ça, j'ai déjà utilisé. Et voilà.
00:37:37 :Donc, en fait, il y a beaucoup de vues génériques qui sontdéjà toutes prêtes pourvos projets, en fait. Et ça vaut vraiment...Du coup, vous avez beaucoup moins de code à faireavec ces vues-là que de passerpar des...
00:37:49 :par...des API View, quoi.Donc, c'est bien de penser à utiliseraussi, des fois, desgénériques. Les new sets, c'est ce queje vous ai montré tout à l'heure, c'étaitce qu'on faisait, là, tous les get en...
00:38:03 :En une classe, on avait tous les get, quoi.Voilà. En une seule classe, on avait le get, le post,le put, le patch, ainsi de suite.
00:38:09 :Ça, perso, j'en suis vraimentjamais servi dans un projet.Mais voilà. Donc, c'est pour ça que j'ai prévudeux petites choses avec DRF, et on pourrareparlerun prochain mentorat, du coup.
00:38:21 :Donc, voilà. Est-ce que c'est OKpour vous ?Ou pas ?Ouais ? Ouais, ouais.Merci.Cool. Bon, j'espère queça vous a donné un petit peu envie de vous mettre à DRF,et puis... Ah, c'est Cyril qui s'énerve.
00:38:37 :Et puis,voilà, je voulais faire des petits tests un peu pour vous amuser.Il y a Streamlit qui est facile à utiliser, et du coup,moi, je me suis amusé à faire ça l'autre jourpour vous montrer un peu commentrécupérer les informations d'un pogne, quoi.
00:38:49 :Ouais. Ouais, c'est bien.Il faudrait que je retrouvele nom...Je l'ai plus en tête.Je pense la prochaine fois.Il y a un autre truc, genre Streamlit,qui est sympa aussi.
00:39:03 :Il y avait la boîte GRSF qui m'avaitcontacté pourque je le teste et que je le présente, maisje ne sais plus le nom.
00:39:11 :Donc, je vais retrouver.Donc, voilà.Bah, écoutez, je ne sais pas siil y a des questions, sinonj'ai voulupas vous retenir plus longtemps.
00:39:23 :N'hésitez pas à me diresi je vais trop vite parfois aussi. Des fois,je parle, je parle, mais...J'aiune petite question,quand j'ai arrêté Djangoil y a quelques années,en fait,j'étaispour structurer la partieJS qui était devenueénorme. Le but, c'était de faire
00:39:51 :des animations en temps réelen JS pur.Donc, j'avais appris le JS puret donc, j'étais parti là-dedans.J'ai voulu structurer ce code JSet donc, j'avais commencéà apprendre React.
00:40:05 :Et c'est là où j'ai compris quebah, en fait,la communicationavec Djangon'était pasnatif. Donc, du coup,je pense que je comprendsaujourd'hui. Il aurait fallu que j'utilise
00:40:21 :DRF pour envoyerles infos versReact, en fait. C'est ça, en JSON,ouais. Et puis, avec React, tu aurais appelé tes routesque tu résonnes pas. D'accord.
00:40:31 :D'accord.Ok, ok. Alors, c'est un peule problème, c'est quand on ne maîtrisepas la techno. Moi, mon soucide base, c'était de structurer le code JSdonc, en utilisantquelque chose, voilà.
00:40:45 :Il y a plein de gens qui ont réfléchi au problèmede structuration de code, quoi, on va dire.Ouais. Et c'est là, après, oùje me suis tombé dans une fosseoù, finalement, j'étais incapabled'utiliser Django avec, en fait.
00:40:57 :Ouais, ok.Et maintenant, je comprendsmieux les tenants,les aboutissants,en fait, le reste, là, il faitpasserelle, et puis, du coup,c'est le canal,c'est la communication, en fait, entre les deux mondes,quoi, le back et le front.
00:41:17 :C'est ça, ouais. Ok, ça marche.Et,donc, il faut bien penser à chaque fois, avec tonAPI Django, si t'as des routesque t'utilises, soit bien que tu mettes des permissions,genre, soit authentifiées, soit admin,ainsi de suite, quoi. D'accord.
00:41:31 :Là, il faut vraiment penser à tout, quoi.Mais ouais, sinon, c'est ça. C'est exactement ça. Tu renvoies toutton JSON, et surtoutqu'en plus, comme je l'ai montré, il y a l'objetresponse avec Django REST Framework,qui est pratique.
00:41:43 :Vous mettez les datas du serialiser dedans, et boum,voilà, quoi.Ça peut aller assez vite. Il faut justepenser, vos serialisers, à bien les prépareretexposer ce que vous voulez exposer, quoi.
00:41:55 :Ok. Je pense qu'à Ramentorant, on vafaire pas mal de serialisers, d'ailleurs. Ça peut être sympa.Ah ouais, ça permettra de démystifierun peu. Enfin, moi, je suis pas du tout
00:42:04 :familier avec ça, doncouais, effectivement, le fait de memanipuler, ça serait bien, ouais.Ouais, parce que les serialisers,vous avez des méthodes. Il y a les méthodes
00:42:14 :validate, pour la validation.Donc, un peu comme les formulaires Django,c'est clean avec Django pur.Il y a validate.Validate, le nom du champ.Après, vous avez les tworepresentations, vous avez les...
00:42:28 :Enfin, les méthodes create. Et en fait,dans les serialisers, il y a pas mal de petites méthodestrès pratiques à connaître.Donc, on peut rendre certainschamps en lecture seule,d'autres en écriture seule. Enfin, c'est...
00:42:40 :Voilà. Il y a plein de choses à faire.Dernièrepetite question.L'histoire du...Comment, du jeton, là ?C'est pour crypter, en fait,tout le trafic qui se fait enJSON.
00:42:58 :Oui, c'est ça. Et les infos de l'utilisateur, c'estexactement ça.Tu mets tout dedans. Et après,bon, c'est au clientde bien sécuriser, bien sûr.
00:43:08 :Pour pas qu'il se fasse intercepter, entre guillemets.Oui, c'est ça.Après, je sais que c'est vachementsécurisé, parce queil y a la personne du front quiconnaissait pas Django. Elle me dit
00:43:22 :ouais, mets ton token. Du coup, le problème, c'est que...Il y a encore mon écran.Elle me dit vas-y, va sur JWT.Voilà, ok.Tac.
00:43:32 :Elle me fait coller mon token que j'ai généré.Et donc, j'avais mon utilisateur avec lePK égal à 1. Elle me ditmodifie le PK, ça génère un nouveautoken ici. Et elle me fait maintenant
00:43:42 :coller le dans...Envoie-lepour voir si t'arrives à accéderaux informationsdans notre utilisateur. Mais forcément, ce serait trop facile.C'est pas possible. En fait,
00:43:54 :s'il y a un truc qui change,la signature du token n'est même plus valide.Donc, Django, tout de suite, il va me rejeter.C'est quand même bien sécurisé.
00:44:02 :Voilà.Oui, oui, je comprends bien.C'est comme si on changeait un octetdans un fichier, on recalcule un md5sumet en fait, c'est plus la même signature.
00:44:12 :La signature, elle...Voilà.Ça marche.Donc, voilà.OK. Merci beaucoup, Gabriel.Merci à tout le monde. Merci à toi.Et puis, il y aBaptiste qui a envoyéle petit ORMdans le chat. Il y en a des sympas.
00:44:32 :Ah, je regarde.Il y a mêmepour bosser vraimentavec d'autres frameworks plus petitshors Django.Alors, Pony, j'avais vu. Mais en fait,ce que je disais tout à l'heure avec Baptiste, c'est PeeWee.
00:44:46 :PeeWee que j'avais trouvévachement sympa.C'est tout simple.Pour avoir testé, moi, j'avais bien aiméSQL Modelavec Pydanticpour les modèles. C'était vraimentsuper cool.
00:45:02 :Pydantic, tu m'étonnes. C'est ce qu'ils prennent sur Crash Navigate.Ah oui, Pydantic.Ah oui, c'est Rachid qui,quand il a fait une présentation, il utilisait ça, lui.
00:45:12 :Oui, oui, oui.Ils ont tout un systèmeavec des validateurs, avec un systèmede settings aussi, où ils utilisentdes fichiers d'autant ou les vers d'environnement.
00:45:22 :Et c'est plutôt cool.D'accord. Ah, merci.Merci, merci, Baptiste.Oui, et puis,ceux qui font du Django, du coup, et qui n'aiment bien Pydantic,vous pouvez regarderDjango Ninja.
00:45:36 :Ça vous permet de fairedes API avec Badjango.Etça ressemble...Enfin, je l'avais fait une foiset c'est censé utiliser du Pydantic aussi,dedans.
00:45:50 :D'accord.Alors, attention si vous utilisez Pydanticavec Django Ninja,et par exemple un Pydantic que vous installezde votre propre chef,la version 1 et la version 2 ne sont pasdu tout compatibles.
00:46:04 :Et ça amène de temps en temps des petits soucis.Je me suis retrouvé une fois dans le cas,et c'est assez chiant.Ah oui ? Oui.
00:46:12 :Ok.Merci pour l'info.Oui, on peut faire des...Ok.Ecoutez, merci tout le monde.Comme d'hab, ça fait plaisir.Et puis, si c'est bon, à la prochaine, du coup.
Aucune occurrence trouvée pour « ».