Session du 03 août 2023 à 20h00
Data Science & IA
Développement Web & Frameworks
Bases de données
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
Django, API REST et graphiques Plotly
Apprenez à créer une application Django avec API REST et à visualiser vos données d’élevage avec des graphiques interactifs Plotly.
00:00:00 :On est même plus que deux, il y a une demi qui revient, salut.Vous n'avez pas eu de problème là avec le lien, il était bien sur ?
00:01:10 :Oui, pas eu de problème, je vais le mettre sur le Discord au cas où, après c'est peut-êtrejuste que c'est les vacances.Ok, bon ben on ne va pas attendre plus longtemps, je pense que les gens ils rejoindront.
00:02:06 :Du coup ce que je vous propose c'est qu'on fasse une application, qu'on se fasse uneapplication Django avec une API REST framework pour venir faire des appels à notre applicationet faire des graphes avec Plotly qui sont des graphes HTML, Javascript qui permettenten fait ça fait des graphes qui sont sympas et qu'on peut partager en fait parce que quand
00:02:40 :on fait du, je ne sais pas si vous avez déjà remarqué mais quand on fait du matplotlibon génère des graphes donc c'est des PNG, mais en fait quand on génère le graphe onpeut interagir, on peut zoomer etc avec mais une fois qu'on l'exporte si jamais on veut
00:02:51 :y revenir le lendemain ou l'envoyer à un collègue, on exporte un PNG du coup le graphen'est plus interactif.En fait moi c'est comme ça que j'ai découvert la bibliothèque Plotly qui permet de générerdes graphes HTML avec toute l'interactivité qu'il faut, on peut zoomer, on peut sélectionnerles courbes etc.
00:03:11 :Donc si ça va je vous propose en première partie on fait ça, on se fait cette applicationavec l'API, j'essaierai de le faire rapidement, j'ai fait juste avant en test, normalementen une heure ça tient, mais voilà de toute façon le truc est préparé si jamais j'aides problèmes je prendrai des morceaux de code ou même si je vois qu'on n'avance pas
00:03:30 :assez on passera à l'autre partie, voilà est-ce que ça vous intéresse ou est-ce quevous voulez aller directement, je trouve que c'est toujours intéressant de revoir lesbases de Django, de l'API etc.
00:03:43 :Ok, alors on va y aller tranquillement, je vais enlever ma caméra, ça sert à rienet puis n'hésitez pas si vous avez des questions au fil du temps. Ok on y est, je fais, j'avance,
00:04:22 :je vous interroge de temps en temps pour voir si vous n'avez pas de problème mais vraiments'il vous plaît n'hésitez pas à m'arrêter s'il y a quelque chose qui n'est pas clair,c'est important pour moi d'avoir votre retour. En plus comme c'est le chat des fois il faut
00:04:36 :que je regarde sur l'écran à côté, j'ai une notification quand vous envoyez un message,du coup n'hésitez pas à bombarder sur le chat. Du coup comme d'hab quand on commence
00:04:47 :un projet on se fait un environnement virtuel. Ok, on l'active, source venv, lin, activate,moi ça marche comme ça parce que sur mac c'est proche de linux, sur windows c'estun petit peu différent mais c'est presque pareil l'activation du truc. Après qu'est-ce
00:05:12 :qu'on fait, ben on va s'installer django, je pense même que j'ai en mémoire dans mestracts qu'il me faut du django. On va installer django, django rest framework, pandas, stream
00:05:33 :it, et plotlist. Et je ne vous ai pas dit, la petite idée que j'ai eue pour l'applicationlà en exemple, on va imaginer qu'on est un agriculteur, enfin un éleveur quoi, avecdes animaux dans une ferme, et ce qu'on veut faire avec notre application c'est suivreun peu l'évolution des différents animaux qu'on a. Donc on peut imaginer qu'on a des
00:06:07 :vaches, des moutons, des vaches, des moutons, des chèvres, enfin tout ce que vous voulez,et donc en gros ça permet un peu de réfléchir à l'architecture de notre application. Donc
00:06:21 :ce qu'il nous faudra dans notre application, ben on va y aller, on va créer le projetd'abord, donc c'est django-admin-start-project, et je vais l'appeler élevage. Voilà, donc
00:06:39 :dans notre projet on va créer une première application qui est, on va décrire un animalen fait, donc on va faire du cd, je vais tout de suite ajouter le rest framework parce quesinon je vais l'oublier. Il y a une notif non ? Ici, install, il faut que j'ajoute
00:07:20 :le rest framework, je ne sais jamais exactement comment, c'est quoi la syntaxe, du coup jevais récupérer, ok c'est le rest framework comme ceci, je ne vais pas l'oublier. Ok
00:07:38 :donc je vais créer ma première application, on va dire, donc là on est où, il faut queje travaille dans élevage, ok, donc start-app pour créer une application, et là on val'appeler animal, animal-app comme ça. Ok, donc là je vais dans ma classe, dans mon
00:08:06 :application, animal, et je vais créer mon modèle qui va me permettre de décrire unmodèle. Donc ici, classe animal, on va pas mettre ça âge, on va juste dire, ouais et
00:08:20 :en fait on va vouloir lui définir un type, la dernière fois Simon on discutait avectoi, tu disais que parfois c'est un peu compliqué de réfléchir à une architecture, bon làc'est vraiment niveau zéro, mais en fait un animal, il pourrait avoir plusieurs typesd'animaux, on pourrait dire je veux des chèvres, je veux des cochons, des vaches,
00:08:41 :etc. Donc ce qu'on pourrait se dire c'est que je dis bah en fait j'ai animal type ici,et on va dire, si on dit, pour le définir comme ça, on va dire une vache, c'est vache,un cochon, ça, un cochon, et on va mettre une chèvre, comme ceci. Donc déjà on pourrait
00:09:16 :se dire, bon en fait moi je vais pas m'embêter, je vais dire que mon type d'animal, il vaavoir un nom, et mon type d'animal, animal type, ça va être un modern char feed, maisen fait on va aller chercher dans une liste d'animaux qu'on veut. Donc ça ça pourrait
00:09:38 :être une première méthode, donc on va faire ça, on va dire python manage migrate, doncon fait nos migrations, ensuite python manage make migration, c'est quoi ces animals, ahoui je ne l'ai pas installé, pardon. Pourquoi il n'aime pas ça ?
00:10:31 :Je vais débugger en live.Ah oui d'accord, ok, c'est parce que je dois mettre.Et on va faire les migrations, et on va créer un super user aussi, create super user,je vais zoomer un petit peu, je vais dans l'interface admin parce qu'on a créé unsuper user, admin, je mets mon mot de passe, ok, elle n'est pas enregistrée, il faut
00:12:01 :que j'aille l'enregistrer, en fait ici quand vous créez une application il faut allerl'enregistrer, sinon vous ne la verrez pas dans votre interface admin, donc ici il suffitde faire admin.site.register, et là vous mettez animal, ok, là je la vois, animal
00:12:26 :je vais changer ici le type de représentation parce que je ne vais pas le faire comme ça,vous allez voir que c'est un peu chiant, donc ici je peux dire, je définis un premier animal,donc bèbe, et je veux que ce soit un cochon, donc là vous voyez je suis content parce qu'ici
00:12:42 :la liste déroulante de choix, voyez ici je définis son nom, donc c'est vraiment ce quej'avais défini ici, et le type d'animal, et donc là il me propose une liste déroulantede choix que j'ai défini ici, donc voilà je suis content, je dis c'est un cochon, on dit ok,
00:13:00 :on sauvegarde, et là déjà un des problèmes c'est que vous voyez ici il est mal décrit,il suffit tout simplement de définir une méthode spéciale dans la classe qui permetd'afficher comme on veut l'objet dans notre base de données, là on va juste retourner son petitnom de notre animal, donc là on est content, on peut rajouter autant d'animaux qu'on veut,
00:13:27 :mais imaginez qu'en 2025 vous évoluez un peu en tant qu'éleveur, et en plus d'avoir ici des vaches,des cochons et des chèvres, vous voulez aussi des abeilles, vous voulez faire du miel, etlà vous êtes un petit peu coincé, parce qu'ici la liste est rentrée en dur, donc c'est pour ça que
00:13:58 :moi je ne fais jamais ce genre d'architecture, c'est à dire où en fait je vais chercher dansune liste de choix possibles, j'utilise toujours des clés étrangères, parce qu'en fait c'estbeaucoup plus flexible, donc je vais vous montrer comment on peut résoudre ce problème, donc làici je vais peut-être l'enlever pour pas qu'il m'embête, parce que je vais mettre à jour mon
00:14:24 :modèle, donc tout ça je vais le dégager, je vais pas le faire comme ça, animal type, donc je vaisle faire après, et en fait moi je vais définir, donc ça déjà je vais le mettre,et j'ai mis à jour, donc moi ce que je vais faire maintenant c'est en fait je vais créer une autre
00:15:06 :table dans ma base de données, et je vais dire animal type, et comme ça je pourrais faire ce queje veux, je vais définir, donc on va dire animal type name, et donc là ça va être, ça va être toutsimple, ça va être un char field, on va lui mettre 50 quand même, et là en fait maintenant le type
00:15:34 :d'animal, animal type, ça va plus être parmi une liste rentrée en dur, mais ça va être une cléétrangère de cette table là, et donc vous allez voir que l'intérêt en fait c'est qu'on peut enajouter autant qu'on veut à posteriori, c'est à dire que j'aurais pas besoin de rappeler le
00:15:52 :développeur qui m'a créé l'application pour qu'il vienne changer en dur la liste ici, ok,donc là on est bon, je vais faire la migration, puis qu'on manège, migration, animal type,et qu'on manège le serveur, il va falloir aussi que je vais ajouter ici cette petite fonction quipermet d'afficher, et donc vous allez voir que maintenant, je ne l'ai pas enregistré,
00:17:13 :là maintenant je peux aller rentrer tous les types d'animaux que je veux, donc on va direcochon comme on avait tout à l'heure, une vache, et une chèvre, et donc maintenant en fait ça vaêtre exactement le même comportement, ici j'ai cochon, vache, chèvre, donc là Bep c'est un
00:17:46 :cochon, mais si, donc là vous voyez si j'ajoute un animal, il va mettre ceux qui sont dans latable animal type, mais donc là j'ai que vache, cochon, chèvre, mais ici maintenant si j'ajoute,on avait dit quoi tout à l'heure, donc c'est dingue, j'arrive pas à trouver d'autres animaux,
00:18:01 :mouton, je l'ai pas mis, mouton, et que je retourne dans animal, et je vais en ajouter un,vous voyez que maintenant j'ai mouton, donc des poules, merci Camille, désolé, et donc vous voyezque c'est quand même beaucoup plus flexible parce que je peux ajouter a posteriori les types d'animaux,
00:18:23 :et donc c'est à ça qu'il faut penser en fait quand vous créez une application, Simon tu avaisl'air quand même avancé, et puis même la dernière fois les gens avec qui on a discuté,vous aviez l'air avancé un peu dans la connaissance de base de données, ça c'est vraiment le niveau
00:18:36 :zéro, j'en ai parlé à Thibault au fait de cette question là, je sais pas si vous en avez déjàparlé, mais bon il a prévu dans un mentorat que lui fera de toucher un mot là dessus,ou même carrément d'essayer d'expliquer un peu les différents concepts et comment lui il gère,
00:18:52 :mais voilà. Donc voilà, c'était juste une petite parenthèse sur un peu l'architecturede l'application, donc on va continuer sur notre application, à moins que vousayez des questions, dites moi si pour l'instant ça va pour vous. Donc qu'est-ce qu'on a fait
00:19:16 :maintenant ? Donc sur ce même principe, qu'est-ce qu'on va faire ? Donc on a nos animaux,on a le type d'animaux, maintenant on va créer une application qui permet, alors en fait cascadeici, ça veut dire que comme il y a des liens entre les objets de ma base de données, tu vois ici,
00:19:37 :si je vais voir dans la base de données animale, je vais avoir des clés étrangères qui vontchercher des, qui font des liens avec cette table là, animal type. Le truc c'est que,
00:19:49 :qu'est-ce qui se passe si jamais je supprime un objet dans ma classe animale ? Ça va être unpeu la merde, si je mets pas ce on delete modèle cascade, ça va être la merde, parce qu'ici dansma table, je vais avoir un lien qui est un petit peu cassé, parce que le lien, si je supprime un
00:20:14 :objet ici qui était lié à celui là, mais que je supprime l'objet dans ma table, bah lui va seretrouver en tant que clé fils en fait, qui a plus de parents. Donc la base de données elle va
00:20:26 :commencer à buguer, et donc c'est pour ça que quand on met on delete modèle cascade, moi jepour l'instant, jusqu'à maintenant j'ai utilisé que cela, ça permet de faire un nettoyage dans labase de données entre les différents liens qui existent. Donc les autres types, désolé je peux
00:20:44 :pas t'en parler, parce que moi franchement jusqu'à maintenant j'ai eu besoin que d'utiliser ça.Mais de toute façon si tu fais une foreign key dans Django et que tu lui spécifie pas commentil gère la suppression d'objets dans la base, il va gueuler et puis t'auras un message d'erreur.
00:21:05 :Donc sur le même principe on va créer une application qui permet à l'agriculteur defaire des mesures de ses différents animaux, et il pourra ajouter n'importe quel type demesure qu'il veut. Par exemple le poids, la taille, mais si dans dix ans il veut pouvoir
00:21:20 :mesurer le taux de cholestérol de ses animaux, il suffira juste qu'il ajoute un nouveau typede mesure. Donc pour ça on va créer une nouvelle application. Donc manage start app, et donc là
00:21:35 :on a dit mesure app. Ok je vais aller l'ajouter direct sinon je vais l'oublier. Et je vais mêmel'ajouter. Donc là on est dans notre application de mesures. Donc là on est dans élevage,
00:22:06 :mesures app. On va créer notre modèle. Donc comme tout à l'heure on va créer une classemesures qui va permettre d'enregistrer les mesures. Donc on va dire la valeur de la
00:22:20 :mesure en fait. Simple. Mesure val, on va mettre, on met un float ou on met un intégre.On va mettre la date de la mesure. Mesure date. Donc là on est sur Models, date field.
00:22:53 :Et donc là pareil que tout à l'heure, on va se faire un mesure type qui va être uneclé étrangère de notre mesure. Donc classe mesure type. Et donc là ça va être mesure type name,
00:23:09 :donc ça va être genre taille, poids, etc. Et ici du coup mesure type c'est une clé étrangère,comme tout à l'heure. Donc là on est là, on a tout ce qu'il nous faut. On va faire la
00:23:30 :migration. Make migration mesure app. Et on va migrer. Puis on va aller voir ce que ça donne.Piston manage migrate. Ok. Comme d'hab j'ai oublié de le mettre dans mon schéma d'admin.
00:23:55 :Mesure type admin.site.register. Et là on enregistre en fait nos deux modèles. Donc làj'ai ma nouvelle application qui est apparue. Je vais voir, je vais rajouter aussi les fameux
00:24:22 :fonctions qui permettent de mieux afficher. Ah oui mais j'ai oublié quelque chose ici. Quelqu'unsaurait me dire ce que j'ai oublié. C'est pas une interrogation surprise mais du coup là en gros
00:24:45 :ça sert pas à grand chose ce qu'on fait. Rappelez-vous que ce qu'on veut c'est faire desmesures des animaux qu'on a en élevage. D'après vous il manquerait quoi ici pour attribuer une
00:25:03 :mesure à un animal en particulier ? Ouais exact. Donc en gros, c'est ça Ludo. Donc en fait ilfaut ici dans l'application de animal, donc from animal app.model import, on va devoir appeler
00:25:25 :notre animal et on va faire une foreign key. Donc en gros c'est l'animal concerné. Son animalégal model. Il faut que je refasse ma migration.
00:25:54 :Ok ça marche. Donc si on va voir nos mesures, on va dire qu'on veut mesurer les tailles et on veutmesurer les poids pour l'instant. Donc là on a les tailles et les poids et dans les mesures maintenant,
00:26:28 :si je fais, il me manque ça, je vais définir ma petite fonction qui m'aide à afficher jolimentle résultat. On retourne, du coup on va mettre un hefstring, self mesure, val, la date et on va
00:26:47 :mettre animal mesure. Et on va mettre ça comme ça et je pense qu'on va mettre l'animalen premier et ce qui va mettre par défaut le nom de l'animal j'espère. Ok donc là on est là,
00:27:28 :donc on va dire que mesure taille, on a mesuré la taille, donc on va dire que la taille augareau en centimètre, on va dire 50 centimètres, aujourd'hui c'était la taille de notre petitcochon. Ok donc voilà, on va peut-être rajouter d'autres animaux, on va ajouter Marguerite,
00:27:54 :le truc cliché de la vache, on va ajouter Rose qui est aussi une vache, on va ajouter Marie quiva être une chèvre, et puis on va ajouter un mouton, on va dire Toto le mouton.
00:28:22 :Maintenant, donc en fait à chaque fois qu'on va créer une mesure, on va avoir, c'est la mesure dequel animal, donc là on va dire Toto le mouton, pareil on veut sa taille au gareau, il fait 80centimètres aujourd'hui, et on va lui mettre Toto une autre mesure, toujours de taille, j'ai dit
00:28:46 :combien 80, on va dire qu'il fait 120 à une date ultérieure, on est dans le futur. Ok voilà,donc on a un petit peu, on a différentes mesures, donc là ça commence à prendre forme, on a toutça, donc maintenant qu'est-ce qu'il va falloir qu'on fasse ? Là on est dans notre application
00:29:08 :Django, en gros c'est uniquement accessible via cette interface. Nous si on veut créer un petitdashboard dans lequel on a des graphes interactifs etc, il faut qu'on puisse sortir en fait de ça,et qu'un script externe puisse appeler les valeurs qui sont ici. Donc pour ça ce qu'il
00:29:27 :faut faire c'est créer une API, donc là en l'occurrence je vais utiliser Django RESTFramework qui est le framework d'API de Django, on pourrait utiliser Flask ou FastAPI mais moije ne connais pas trop ces frameworks là, celui que je connais c'est Django REST Framework. Donc
00:29:45 :c'est ce qu'on va faire maintenant, ça va, tout va bien pour l'instant ? Ok, donc on va créer,moi j'aime bien quand je fais une API, créer carrément une nouvelle application comme ça c'estvraiment bien, c'est bien séparé. Donc on va dire, dit-on Manage Art API, je vais l'ajouter
00:30:19 :directement, même si j'en ai besoin pour les URL en fait. Ok, je vais dans mon API, donc le premiertruc à faire quand on fait une API c'est de créer un serializer. En gros un serializer c'est ce qui
00:30:47 :vous permet de transformer votre modèle, qui est une classe, en objet JSON, qui est en gros lelangage de prédilection pour la communication des API. Donc on crée un module serializer, un fichier
00:31:04 :.py qu'à l'intérieur de notre application API et on va y aller, donc import REST. C'est un peucomme quand on crée des modèles, en fait on va hériter de modèles qui sont déjà créés par le framework.
00:31:29 :Et on va créer notre serializer, d'abord il faut aussi importer notre classe parce que notre serializerc'est toujours créé à partir d'une classe, en gros c'est la structure pour notre JSON futur. Donc on était
00:31:56 :là on fait un serializer pour l'application de mesures, mesures app, modèles, machin, voilà, donc là on définitnotre serializer, là vous voyez qu'il m'aide un petit peu. Pour l'instant on va l'écrire comme ça le serializer,
00:32:09 :après je vous montrerai comment on va l'écrire pour que, enfin vous allez comprendre avec les clés étrangèresque c'est un petit peu chiant avec les serializers, donc il faut faire une petite manip. Mais bon pour l'instant
00:32:24 :on va le faire comme ça et ici on définit, on va définir tous les objets. Une fois qu'on a fait le serializeron va dans les views et on crée notre viewset qui permet de faire le lien entre l'utilisateur qui va aller sur internetaller chercher un URL et le modèle. Donc on va importer ça, on va hériter des modèles viewsets qui existent
00:33:02 :dans Django REST Framework. On va aussi avoir besoin de notre serializer. Serializer, import, mesure serializeret from restframework.cviewset il me semble. Donc là on crée notre modèle viewset, vous voyez que j'ai une IA qui m'aide
00:33:29 :un petit peu, ce qu'on n'a pas la dernière fois c'est code.io pour faire le code. Il faut aussi importer notre modèleimport mesure. Donc là on a notre serializer qui permet de créer les views get et post automatiquement pour pouvoir
00:33:51 :interagir. Donc get c'est pour la lecture, l'accès et post c'est pour venir créer un objet dans la base de données.Maintenant, moi je fais toujours ça dans l'ordre, je fais serializer, les views et après je fais l'URL. Donc l'URL ce que je fais
00:34:09 :souvent c'est que je copie celui qui existe déjà dans le main, je fais un petit peu de ménage dedans.Là je vais vite mais c'est comme ça que vous voyez un petit peu tout de A à Z pour ceux qui ne connaissent pas,puis pour ceux qui connaissent ça fait des révisions. Donc là pour les URL avec les API il faut créer des routers.
00:34:36 :Les routers en fait ça va être un espèce de dictionnaire de chemin d'URL qui sont gérés automatiquement par restframework.Donc là on va dire from restframework.routers import default routers, ici il va me falloir include. Donc on va créer un router
00:35:07 :et dans ce router on va enregistrer les URLs qui sont liées aux vues du viewset qu'on a créé.Donc on va dire, là ça va être mesure animals et on va importer, il faut qu'on importe notre viewset.
00:35:34 :Donc from views import mesure viewset et donc là c'est, comment ça fonctionne déjà ça, est-ce que c'est tout simplement,ça devrait être bon. Ok, ok, ok, ça commence à être pas mal je pense. Et donc là maintenant dans l'URL on va ajouter les URLs de notre API.
00:37:39 :Et ce qui est intéressant c'est que là je suis vraiment dans l'interface web proposée par REST API, Django, mais sachez que c'est vraiment une APIdonc ça veut dire qu'on peut interagir. Là je suis dans Postman, si je balance mon URL et que j'envoie la requête Postman, vous voyez ici j'ai un résultat JSON
00:38:53 :En gros c'est vraiment le coeur de l'API et après vous faites ce que vous voulez avec les données que vous récupérez.Donc là un des problèmes qu'on a quand on fait des APIs, c'est que vous voyez ici, il me donne l'ID de mon entrée de mesure, en mesure type il me met 1.
00:41:33 :Donc ici en fait il suffit de définir Def, Animal, Self, Object, Retourne.Vous voyez ce que je vous disais tout à l'heure c'est que c'est un petit peu particulier, là je définis Animal, que je dis en fait pour aller me trouver Animal tu vas utiliser une méthode Field et la méthode Field il suffit de mettre un Get devant le nom que vous avez défini.
00:42:13 :Après ça c'est du détail, si vous avez l'habitude de le faire ça vous paraîtra normal, il n'y a rien de sorcier, c'est pas mystérieux.Donc Animal ok et Animal on a dit qu'il avait juste un Name. Déjà on va voir si ça ça marche si je fais ça.
00:42:37 :Pourquoi il ne veut pas ?Donc là vous voyez il me met juste le nom de l'animal, c'est pas mal mais moi j'en veux un petit peu plus quand même.
00:43:43 :Voilà donc en fait on a un peu redéfini notre Serializer, c'est les mêmes données mais c'est juste qu'elles sont un petit peu plus sympas.Donc ça veut dire que là on a récupéré le nom de l'animal, le type d'animal, le type de mesure, la valeur et la date de la mesure.
00:43:59 :Donc là on commence à être bien pour faire notre Dashboard.Ludovic, je vois ton message, tu as déjà eu ce problème peut-être en faisant des API ?
00:44:41 :Donc voilà il faut que tu fasses ce genre de manip si tu veux afficher plus facilement.Après ce que tu pourrais faire c'est sortir les tables et faire des correspondances de table mais bon c'est un peu chiant, il vaut mieux faire ça.
00:45:01 :Ou limite je vais envoyer, j'enverrai le serializer ici sur le Discord.Ok donc là maintenant on a notre API, on est content, on va passer au front-end.
00:45:16 :Donc là on a fait le back-end, pas de soucis.On va créer une nouvelle console, on va la renommer, j'aime bien faire ça moi, front-end, et ici on va la renommer back-end.
00:45:34 :Ok donc dans le front-end on va passer sur du Streamlit, ok, je vais créer un nouveau, on va dire, dashboard.D-I-Y, import Streamlit as st, st.write
00:46:01 :Bienvenue sur le site de l'élevage, et puis on va déjà voir si ça fonctionne.Streamlit.run, dashboard. Il y a un E non, à bienvenue, ou pas j'ai un doute.
00:46:37 :Bienvenue, oui il y a bienvenue.Voilà, donc maintenant ce qu'on va faire c'est que depuis Streamlit on va faire notre requête d'API.Ouais Simon je t'écoute.
00:46:54 :Ouais, les serveurs web Django et le serveur web de Streamlit ne se télescopent pas ?Bah non parce que regarde en fait le Streamlit il est sur le port 8501 alors que le serveur web de Django il est sur le port 8000.
00:47:14 :Ok.Après oui forcément il faut faire attention qu'il n'y ait pas de conflits sur ton serveur ou quoi avec d'autres ports,mais c'est pour ça qu'on fait les ports en fait c'est pour pouvoir avoir plusieurs applications sur un même serveur.
00:47:27 :Donc non il n'y a pas de soucis.Ok, merci.Je t'en prie.Donc là on est dans le front-end, donc ce qu'on va faire maintenant vous savez le truc Postman là que j'avais,on va le faire directement depuis l'interface Streamlit.
00:47:44 :On a notre URL ici, ça j'en ai pas besoin, j'en ai besoin aussi, URL, et puis là vous allez voir,magie, st ., je vais même directement le transformer en DataFrame, vous allez voir, je vais mettre st.json,
00:48:06 :réponse, json, ok.Et donc là maintenant si je vais, où est-ce que je suis, si je vais sur mon app, là vous voyez qu'il m'a sorti,ah ok je ne connaissais pas, c'est pour faire, c'est pareil tu fais des requêtes get et post avec pas mal de paramétrage j'imagine, ok.
00:48:35 :Parce que Postman, ah oui Postman c'est pas, c'est gratuit mais c'est pas open source c'est ça ?Ouais c'est ça ouais.Ok.C'est extraordinaire lui, il est full open source.
00:48:50 :Ok.Ah bah j'ai jamais essayé, je sais rien dire.Il est sympa à utiliser en plus.Enfin moi j'aime bien.Ah ouais ?Ouais.Moi je t'avoue que pour ce que je fais, Postman me va très bien, j'aime bien tu sais quand je fais des requêtes,quand il me sort le code etc. avec plusieurs langages, il fait ça aussi Insomnia ?
00:49:07 :Ouais.Ok.Alors moi j'ai testé, j'ai peut-être pas testé plus de langages mais en tout cas pour le besoin basique que j'ai ouais.Et moi j'aime bien aussi tu sais les différents, quand tu veux gérer les autorisations, tu sais quand t'as des API ou même une basic authorization,authentication, t'as ça aussi avec Insomnia j'imagine ?
00:49:29 :Je sais pas, j'ai pas eu l'occasion de l'utiliser sur les API soumises à l'autorisation.Mais tu me diras si à l'occasion ça m'intéresse mais je trouve que c'est pas mal aussi le fait que Postman il puisse gérer ça,tu vois en fonction du type d'authentication, il t'adapte le format, donc c'est pas mal.
00:49:54 :Ok.Donc là on a une visualisation de notre truc, ce qu'on va faire c'est qu'on va le transformer directement en DataFrame,import, ok, et là avec Streamlit en fait on peut directement, je vais créer mon DataFrame.
00:50:11 :DataFrame, df, jerryrun, et donc là vous voyez qu'on a sous forme de tableau toutes les datas qu'on a dans notre base de données.Donc là on commence à être bien, on est content.
00:50:39 :Maintenant ce que j'aimerais faire c'est faire des boutons, des sélections qui nous permettent de filtrer notre tableau.Je vais prendre directement ce que j'avais fait tout à l'heure parce que je vois qu'il y a 53 déjà.
00:50:54 :Je vais tout copier le front-end que j'avais déjà créé tout à l'heure et je vais vous l'expliquer.Normalement ça devrait marcher, je vais pas mettre pour l'instant le graph comme ça on verra ça après.
00:51:21 :Maintenant si je retourne sur mon dashboard, qu'est-ce qu'il n'aime pas ?C'est bizarre ça. Ah oui, je sais pourquoi.J'espère que c'est ça.Donc en fait ce que j'ai créé c'est que j'ai créé deux petits boutons en plus qui permettent de filtrer un peu notre DataFrame.
00:52:44 :Ici j'ai fait un bouton qui permet de choisir, en fait dans ma base de données, j'ai que rentrer des tailles.Donc moi ce que je vais faire, j'ai que rentrer des tailles, je vais rentrer des masses aussi, des poids.
00:53:01 :Donc on va dire en kilogramme, 60 kilos, le petit toto il faisait 60 kilos.Et puis on va rajouter un poids pour une vache, on va dire, je sais pas combien ça pèse une vache, 150.
00:53:17 :Poids la marguerite.Donc là si je retourne sur mon dashboard, en fait dans mon DataFrame ce que je fais ici, c'est que, bon là ça vous l'avez vu,ici je lui définis pour le filtre, je voudrais filtrer par les valeurs qui sont dans mon DataFrame en fonction du type de mesure et du type d'animal.
00:53:47 :Donc là par exemple ici le premier mesure type filtering, donc c'est ici taille.Ici quand je lui dis select box, avec ici la liste de choix unique de valeurs qui sont accessibles.
00:54:00 :Donc c'est ça que je lui dis ici.Donc c'est ce que fait ce bouton là, et vous voyez que si je fais poids, il va me filtrer mon DataFrame que par taille.
00:54:08 :Et c'est normal parce qu'en fait sur un graphique on ne représente pas des poires et des pommes, ça n'a pas de sens.Physiquement on ne peut pas comparer une taille avec un poids.
00:54:18 :Du coup c'est normal qu'on se dise qu'on va sélectionner avec des valeurs uniques, soit la taille soit le poids.Par contre ce qu'on peut vouloir faire c'est comparer le poids de plusieurs animaux de différentes races.
00:54:33 :On peut dire j'aimerais bien comparer le poids de mon cochon et de mon mouton.Je ne sais pas pourquoi on ferait ça mais on peut le faire.
00:54:40 :Donc là c'est un autre type de bouton dans Streamlit, c'est un multiselect.Parce qu'en fait select box on peut avoir qu'une seule valeur alors que le multiselect on peut en avoir plusieurs.
00:54:50 :On peut en avoir plusieurs je crois.Donc on fait ça et ici c'est ce qu'on dit.On va filtrer uniquement les animaux qui sont parmi les choix qu'on a dit.
00:55:00 :Donc là si je rerun, dans la taille j'ai tous les animaux de type cochon, mouton, vache.Si j'enlève vache il ne se passe rien parce qu'en fait en taille je n'ai pas de vache.
00:55:12 :Mais si je fais poids et que je rajoute vache.Donc là vous voyez et je peux dire que moi je ne veux voir que les moutons.
00:55:21 :Donc je peux supprimer ça et ça.Et si je veux voir en taille, vous avez compris le principe.On peut un petit peu s'amuser comme ça à filtrer nos dataframes grâce à Streamlit et à ces boutons interactifs.
00:55:34 :Là maintenant ce que je vous propose c'est qu'on peut créer facilement un graphe interactif de ce qu'on a filtré.Donc c'est assez simple, on fait comme ça.
00:55:48 :Avec Plotly il faut créer une figure et on va dire que pour chaque animal, il n'y en a qu'un,on va aller faire le graphe de cet animal.
00:56:01 :Donc si je rerun, animal name pourquoi il ne marche pas, c'est juste animal.Là vous voyez j'ai créé un graphe interactif, donc là je n'ai que Toto parce que je ne suis que dans les tailles.
00:56:32 :Je vais mettre les vaches aussi, je vais peut-être mettre les pois.Donc dans les pois j'ai tout, j'ai les cochons.Donc là j'ai juste deux graphes et en fait vous voyez que c'est un graphe interactif parce que je peux zoomer dessus.
00:56:50 :Donc je peux revenir ici, c'est un peu chiant parce que c'est zoomé.Je vais peut-être rajouter un pois passé pour Toto et Marguerite.Donc on a dit, on va rajouter, on était à combien là ?
00:57:11 :On était à 150 pour Marguerite, on va dire qu'on était à 80, c'est quoi la date là ?Le 3 août 2023, on était à 80 le 6 juin, un pois pour Marguerite.
00:57:32 :Si je save, je vais voir mon dashboard.Donc là vous voyez qu'en fait ça me permet de voir une évolution rapidement.Pourquoi je me suis trompé, j'ai dit Toto ?
00:57:44 :Je me suis trompé, j'ai mis un pois sur Toto.Donc il me faudrait un pois maintenant sur le cochon Babe, 3 août.On va dire 60 kilos, le 4 juin.
00:58:12 :Pourquoi il ne me le met pas à jour cette vidéo ?Ah oui parce que je regarde que les tailles, je suis con.Donc là vous voyez, j'ai différentes mesures et c'est un truc assez interactif.
00:58:34 :Vous voyez c'est un graphique, dès que je passe ma souris, j'ai le nom du pois.Si je veux, je peux zoomer comme ça ici.Ce qui est intéressant aussi c'est qu'avec Streamlit, on peut exporter juste le graphique.
00:58:49 :Et on peut l'intégrer après dans un autre HTML comme on veut.Pour ça il suffit de faire, il y a un module exprès, qui est ici, qui est Plotly Offline,qui permet d'exporter en fait.
00:59:06 :Moi ce que je veux faire, je veux exporter ma figure en type HTML.Ah oui en fait il me dit juste de rajouter ça.Ouais c'est pas ouf.
00:59:59 :Attendez je crois qu'on peut faire.Je vais même le mettre, je vais le mettre comme ça.Et donc là en fait maintenant j'ai ajouté un bouton.
01:00:39 :Ah donc là il m'a exporté un HTML et si je fais afficher dans le Finder et que j'ouvreGoogle Chrome, en fait il m'a sorti un fichier HTML avec mon graphique.
01:01:11 :Je ne sais pas pourquoi j'ai perdu la couleur de la légende, mais vous voyez que je suistoujours quand même en graphes interactifs.Et si je peux cliquer juste dans la légende, je peux dire que je veux juste voir Margueriteet Toto.
01:01:26 :Vous pouvez cliquer comme ça sur la légende assez facilement.Ah oui bah merci Ludo.Je ne sais pas comment vous vous en servez, je pense que chacun a sa façon de s'en servir.
01:01:40 :Moi je fais quand j'ai des questions très spécifiques et que je sais qu'il va répondre,et je n'aime pas donner trop vague parce que, je ne sais pas ce que vous en pensez,mais il répond parfois à côté de la plaque mais avec une assurance et des fois je perds
01:01:54 :plus de temps à tester sa réponse.Mais bon là je sais qu'il va chercher dans les librairies, dans la bibliothèque, etc.Je sais qu'il va me répondre bien.
01:02:05 :C'est comme ça que j'utilise.Après il y a tout type de graphes.Qu'est-ce qu'on pourrait se dire.Ici par exemple on pourrait avoir.Attendez je vais afficher le nom filtré.
01:02:36 :With st.expander.Afficher le nom filtré.Donc en fait c'est le row data et là on va dire st.framedf.En fait ici on peut dire le df non filtré.
01:02:58 :Donc ce qu'on peut dire c'est, on veut peut-être faire des statistiques,et en fait on peut sortir un diagramme en barre du poids par type d'animaux ou même de la taille.
01:03:18 :Attendez je réfléchis à ce qu'on peut faire.On va dire, pour tout ça je vais le commenter.Ok donc là je retourne là-dessus.On peut se dire tiens je vais faire mon data frame, je vais dire df.groupby.
01:04:22 :On va grouper par animal type.Donc en gros ce que je vais dire c'est que j'aimerais bien récupérer le poids max par type d'animaux.Donc je vais faire un groupby animal type.
01:04:47 :Je vais aller chercher la mesure.Donc mesure val et je vais prendre le max.Je vais aller voir ce que ça donne ça déjà.st.dataframedf.group.
01:05:09 :Donc là vous voyez en fait pour le type cochon le max c'est 60.En fait j'ai deux entrées de cochon.Pour le type cochon j'avais 50 et 60 il m'a bien sorti 60.
01:05:28 :Pour mouton j'ai trois entrées c'est bien 120.Et pour les vaches c'est bien j'ai deux vaches c'est 150.Et on peut dire qu'on veut faire un barplot.
01:05:40 :Donc on va dire barplot.Donc go.bar, groupindex, groupvalue et st.plotlinchart.Le barplot.Je vais mettre des fgroupes comme ça.J'en ai jamais sorti celui-là parce que je l'en ai déjà fait.
01:06:25 :Je vais l'utiliser comme ça.Donc là en fait j'ai fait un barplot de mon tableau.Ici on a une vision rapidement par type d'animaux quel est le poids max.
01:07:10 :Donc là on voit que c'est les vaches qui ont le plus de,on voit rapidement que les vaches ont le poids max le plus élevé.
01:07:17 :Et on peut se dire bah moi je vais juste zoomer ici sur mouton.Et puis quand vous passez votre souris vous avez le nom de la variable,le type d'animal, la valeur etc.
01:07:30 :Donc c'est pas mal interactif.Et là c'est pareil vous pouvez l'exporter comme l'autre graphique.Bah voilà c'est à peu près ce que je voulais vous montrer.
01:07:46 :On a tout vu de A à Z.On a fait l'application Django, on a fait l'API.Et puis après on a fait le dashboard avec Streamlit pour le front,avec les graphes interactives.
01:07:55 :Donc c'était à peu près ce que j'avais prévu.Bah merci Ludo, merci pour ton retour.Merci Simon, bah merci à tous de votre présence.Bah ouais j'espère que tu vas refaire.
Aucune occurrence trouvée pour « ».
00:02:08
Programme de la session
00:04:45
Début du projet : Création environnement virtuel et activation
00:05:12
Installation des librairies
00:05:49
La ferme : Présentation de l'utilisation du projet dans la vie réelle
00:06:26
Django : création du projet Élevage et de la première application Animal
00:08:07
Création du modèle Animal
00:11:23
Création d'un superuser
00:11:43
Lancement et démo de l'application dans l'interface admin de Django
00:13:24
ForeignKey : Correction du modèle Animal
00:19:29
Explication de : on_delete=models.CASCADE
00:21:09
Création de l'application et du modèle Mesure
00:27:36
Création de quelques données via le site admin de Django
00:29:03
Création de l'API avec Django Rest Framwork
00:30:38
Explication et création d'un serializer
00:32:40
Création des views
00:34:02
Création des urls
00:36:29
Lancement et démo du server avec API Rest
00:37:52
Démo avec Postman et Terminal
00:39:03
Rendre plus lisible les clés étrangères
00:45:15
Création de la partie Streamlit