Session du 07 décembre 2023 à 20h00
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
Supabase, Streamlit et API Django
Mise en place de Supabase avec RLS, création d’un tableau de bord Streamlit et introduction à une API Django REST reliée aux données Supabase.
00:00:00 :J'accepterai.J'accepterai.J'accepterai.Ok, bon ben on va commencer, du coup ce que je vous propose, c'est qu'on en avait parléla dernière fois, en fait on avait fait un petit peu, on avait joué un peu avec Supabase,avec l'authentification, etc., mais je ne sais pas si vous vous souvenez, mais au moment
00:00:59 :où on avait voulu faire des requêtes de notre database, on a eu un problème et aprèsje vous avais envoyé un message, je vous avais dit qu'il fallait définir une RLS Policy,donc RLS c'est pour Raw Level Security, et c'est ça en fait qui permet soit de lireou soit d'insérer des datas dans la base de données Supabase, donc ce que je vous
00:01:21 :propose c'est qu'on fasse ça en fait, on crée un projet Supabase et on définit ensembleces fameuses règles qui permettent de lire et d'insérer des données dans la base dedonnées.
00:01:36 :Et ensuite, comme d'habitude, c'est un peu un schéma classique, qu'on se fasse un petitdashboard Streamlit qui permet justement, une fois qu'on est authentifié, d'aller lireles datas de Supabase, mais aussi de faire des formulaires dans Streamlit qui permettentd'insérer de la data dans Supabase.
00:01:59 :Et puis pour le petit projet Supabase qu'on va faire, on va faire une petite relationétrangère entre deux tables, un truc assez simple là, mais c'est juste pour que vousvoyez le principe pour ceux qui ne l'ont jamais fait, et voilà, quand on aura terminéça, on verra combien de temps il nous reste, mais s'il nous reste du temps, on pourra
00:02:20 :essayer de faire une petite, la dernière fois c'était Simon je crois qui demandaitune API avec Django Reframework, et peut-être qu'avec cette API, on pourra faire le lienavec notre projet Supabase, en gros récupérer, ça pourra paraître un peu débile de faireça, mais on pourra récupérer les infos qui sont sur Supabase, et puis aller les
00:02:51 :mettre dans notre projet Django, grâce à Django Reframework.Donc voilà, est-ce que ça vous va comme programme ?Oui.Ok, très bien, et du coup avant ça, est-ce que vous avez des questions, est-ce que vousvoulez savoir des choses en particulier sur Python, du Python pur, de la programmation,
00:03:27 :je ne sais pas, parce qu'on parle beaucoup de framework ici à Montoraf, en tout casquand j'anime les sessions, on parle beaucoup de Streamlits, de Supabase, etc., donc c'est
00:03:35 :des frameworks, mais si jamais vous avez des questions autres, moi je suis un peu plusspécialisé data, donc je peux un peu mieux vous répondre là-dedans, mais si vous avezdes questions d'algorithmie ou structure de données ou des choses comme ça, n'hésitezpas peut-être, et puis comme ça, ça changera un petit peu de ce qu'on dit d'habitude.
00:03:58 :Pendant ce temps, je vais préparer, pendant que vous réfléchissez, je vais partagermon écran.Pardon, et puis je vais enlever ma caméra.Alors FastAPI, ouais, en fait, FastAPI, j'ai vu, enfin, j'ai déjà utilisé, attendez,j'ai pas vu tous les messages en fait.
00:04:33 :Django, Nidja, ça me dit quelque chose, c'est quoi, c'est pas pour avoir un swagger surles API ?Apparemment, c'est pour faire de l'API avec le Django aussi, mais il y a quelqu'un quim'a dit que c'était vachement...
00:04:51 :J'ai vu ça, j'ai vu ça, en fait, tu mets ça par-dessus ton projet Django, ouais,en fait, je me souviens, j'avais regardé, parce qu'en fait, quand vous avez une API,une API sans documentation, c'est presque inutilisable, sauf pour celui qui l'a développée,et en fait, on appelle un swagger, donc c'est ça, un swagger, c'est une espèce de documentation
00:05:17 :interactive de votre API qui vous permet, en plus, de faire les requêtes GET ou POSTdans votre API.Vous voyez ici, swagger AI, voilà, donc, j'ai jamais utilisé perso, mais ouais, j'avaisvu, je crois que c'est même toi, d'ailleurs, qui m'en avais parlé, Gabriel, on pourraitpeut-être, faudrait que je regarde un petit peu, et puis on pourrait faire une petite
00:05:45 :découverte ensemble, un tuto prochainement, si ça vous intéresse.Après, je vois qu'il y a Sylla qui pose la question de FastAPI, donc FastAPI, c'estpareil, en fait, FastAPI, ça marche un petit peu comme ça, c'est un peu, ou même commeFlask, c'est-à-dire qu'on définit la route avec un décorateur sur notre fonction, et
00:06:08 :on a directement, on a l'adresse URL, etc.Je trouve que FastAPI, c'est bien, ça se met rapidement en place, mais honnêtement,moi, je connais un petit peu Django, enfin, comme vous, mais je veux dire, et je me suispas intéressé de plus que ça à FastAPI, parce que je me suis dit, voilà, à quoi
00:06:33 :bon s'orienter vers FastAPI pour développer des API, alors que je connais Django et queDjango REST Framework, c'est une petite surcouche par-dessus Django.Donc, pour tout ce qui est connexion à la database, etc., authentification, j'arrive
00:06:49 :très bien avec Django REST Framework, du coup, voilà, j'ai pas trouvé d'intérêtpour moi à aller vers FastAPI, et si vous connaissez Django, franchement, je vous conseilleDRF, parce que, ben voilà, quoi, c'est pas, enfin, il faut faire du 80-20, quoi,il faut passer le moins de temps possible pour un maximum de résultats, donc, en ce
00:07:11 :qui me concerne, j'ai pas besoin d'aller voir FastAPI, mais bon, je comprends quec'est pas tout à fait la question, celui-là, mais c'est mon avis sur FastAPI, en tout cas.
00:07:21 :Et oui, pour ceux qui disent que ça ressemble à FastAPI, oui, parce qu'en fait, les deux,en fait, ça là, ce Swagger là, c'est OpenAPI, et OpenAPI, c'est ce qui est utilisé,enfin, Swagger UI, c'est, enfin, bref, je sais plus si c'est OpenAPI ou Swagger UI,enfin, bref, il y a une combinaison des deux qui est utilisée aussi par FastAPI,
00:07:45 :donc c'est pas, ça ressemble, c'est la même chose.Ouais, c'est ça, enfin, c'est la même, je crois, c'est ça.Et donc, oui, ben, ouais, voilà, Gabriel, pareil, du coup, si là, ouais, si jamaist'as le choix entre FastAPI et DRF, si tu connais déjà Django, ben, pourquoi te priver
00:08:09 :de tes connaissances en Django et ne pas utiliser DRF plutôt que de repartir sur un nouveaulangage, enfin, un nouveau framework ? Après, tu vas t'y retrouver si tu fais du FastAPI,
00:08:20 :mais voilà.C'est vrai qu'avec FastAPI, t'as le Swagger automatique, etc., c'est un peu plus pratique,mais tu peux facilement le mettre en place avec DRF aussi, sans problème.
00:08:29 :Et du coup, Gabriel, t'avais une question sur OpenAPI ?Parce que surtout, tu fais du Django Astramework et tu connectes des fois à Streamlit,ça, tu l'as cassé ?
00:08:42 :Ouais, ouais, ouais.Tu utilises toujours le module Request, même quand t'es dans Streamlit,pour importer des données ?Ouais, ouais, j'utilise toujours Request, c'est Request avec un S.
00:08:56 :C'est ce qu'il y a de mieux, ouais, enfin, j'imagine qu'il y en a d'autres,mais si on regarde sur Python, HTTP, HTTP Request,ouais, en fait, je dois avouer que j'ai toujours utilisé celui-là,j'ai pas eu besoin d'autre, mais j'imagine qu'il y en a d'autres.
00:09:22 :Mais sinon, ouais, j'utilise toujours Request.Il est pratique.Tu peux faire ta Request Get ou Post de plusieurs manières différentes,tu peux balancer tes datas dedans et tout ça, donc ouais, franchement,je le redis, tant que vous faites des trucs qui marchent,il faut chercher le 80-20, quoi.
00:09:42 :Et c'était ça, ta question extrêmement rapide ?Voilà, c'est ça, ouais.Ok, mais y a pas de souci, alors n'hésite pas.Je fais le tour, je regarde s'il n'y a pas d'autres questions.
00:09:54 :Et je note un Ninja, ça vaudrait peut-être le concours gardeparce que c'est par-dessus DRF, de ce que je comprends.Donc, pourquoi pas ?Ok, bon, bah, s'il n'y a pas d'autres questions,et puis s'il y en a en cours pendant qu'on travaille ensemble,n'hésitez pas.
00:10:15 :Donc, pour notre petit projet Superbase,on va d'abord, je zoome un peu,on va d'abord créer le projet Superbaseet après on créera ce qu'il faut pour...
00:10:27 :Donc, à chaque fois que je fais des trucs,pour pas me retrouver à poil,je fais toujours un test avant,donc là j'avais créé un test avant,et là j'ai créé un test avant,et là j'ai créé un test avant,je fais toujours un test avant,donc là j'avais créé un Milan,
00:10:46 :mais en gros, notre projet ça va être quoi ?On va imaginer qu'on est...Imaginons qu'on est un directeur d'un centre animalieroù on veut gérer une base de données d'animauxqui arrivent, qui sortent, qui sont adoptés,qui ne sont pas adoptés, etc.
00:11:06 :Donc, on va avoir besoin de plusieurs tablesde bases de données.Enfin, on va avoir besoin d'une base de donnéesavec dedans plusieurs tables.On va s'imaginer qu'on a...
00:11:18 :On va faire simple pour l'exercice là.On a une table animauxdans laquelle on répertorie les animaux,donc on va pas mettre beaucoup de properties,mais on va mettre le nom de l'animal,son poids, sa taille,et puis on va mettre sa race.
00:11:32 :Et la race de l'animal...Pardon.La race de l'animal, ça va être une propriété,une clé étrangère depuis notre tablequi va être juste une tablequi va contenir toutes les races.
00:11:48 :Pourquoi on fait ça ?Parce qu'on ne veut pas que...Après, quand on va aller insérerdes encrées dans nos tables de donnéesdans les animaux,on ne veut pas que, par exemple,l'utilisateur A, il dise c'est un chienet puis il met chien avec juste un C majuscule
00:12:04 :et qu'un autre utilisateur B,il dit ok, c'est un chienmais il met un C minuscule, par exemple.Donc en fait, on veut pouvoir contrôlerla manière dont est rentrée la race de l'animal,mais du coup,la clé étrangère, c'est pas uniquement pour ça,c'est pas pour uniquement contrôler
00:12:24 :la manière dont c'est écrit,c'est aussi pour pouvoir faire des requêtesbeaucoup plus efficacement.Et si, par exemple, on ditj'aimerais bien récupérer uniquementce chien, au lieu d'aller faireun filtre sur la colonneet sur les textesqui contiennent chien, on va aller faire un filtredirectement sur la propertie
00:12:44 :chien, enfin sur la propertierace et qui va allerdu coup,le filtre, il va le faire sur l'index de la tableétrangère. Et ça, c'est
00:12:54 :beaucoup plus efficace. Mais bon, ça,c'est des détails de base de données.Là, c'est juste, voilà, pour l'exemplede Superbase, c'est un peu ce qu'on va faire.
00:13:02 :Donc, on va créer le projet Superbaseet après, on va créer le projetPython avec le dashboard Streamlitqui permettra de faire les requêtes, comme on adit avant.
00:13:12 :OK, ça va, c'est clair, vous comprenez un peule concept, l'architecture du truc.OK.Donc, on se retrouvesur Superbase. Donc, vous créezvotre compte, c'est gratuit, etc., on l'a déjà dit.
00:13:28 :Gratuitement, vous pouvez avoir accès qu'à deux projets.Donc là, j'en ai déjà fait un.Donc, on va en créer un autre.Le projet, on va l'appelerAnimal Crossing.
00:13:42 :Ma petite nièce, elle joue à çasur sa petiteNintendo. Donc, j'ai choisi ça.Animal Crossing.On va choisir un mot de passe pour la database.
00:13:52 :Nous, on ne va pas en avoir besoin, mais il fauten définir un.OK.On va choisir où seront stockés nosdatas. Donc, on va dire en Irlande.
00:14:07 :C'est le plus proche, je crois.Non, il y a London.On va prendre l'Irlande. Et voilà, on crée notreprojet, c'est fait.C'est assez rapide.
00:14:17 :Donc là, on se retrouvesur un peule dashboard de notreprojet. Ça, c'est notre clé,notre URL public de projet.Enfin, ça, c'est la clé, pardon.
00:14:29 :Et l'URL, il estsi on va là.Mais on en aura besoin après. Pas tout de suite.Ça, c'est l'URL.Et ça, c'est la clé d'API.
00:14:39 :Mais ça, on verra quand on sera sur Python.Là, on va d'abord fairela mise en place de notrebase de données.Avant ça, on va avoir besoinaussi de l'authentication.
00:14:51 :Donc, le système d'authentification.Donc là, il est encore en train de s'aiderde projet.Ceux qui ne connaissent pasSuperbase, qui n'étaient pas làsur les premières sessions,Superbase, en fait, c'est un projetqui permet de gérer des bases de donnéesen no-code. C'est-à-dire, vous n'avez pas
00:15:12 :à vous embêteravec la mise en place du serveurSQL, de la créationdes tables,de l'hébergement, etc.C'est vraiment...Et ça tourne avec une base de données post-grès.
00:15:26 :Donc,on se retrouve ici.Vous allez dans le système d'authentication.Normalement, vous en allez avoirplusieurs de possibles.C'est dans Providers.Et ici, vous avez...
00:15:40 :Ouais, je suis d'accord.Gabriel, il est beaucoup plus intuitifque Firebase.En fait, là, vous avez pleinde providers pour l'authentification.Et ici, nous, moi, je choisis toujoursemail. Donc, en gros, on a
00:15:54 :comment on peutloguer et créer des utilisateurssur notreprojet Superbase.Donc, moi, je choisis email. Donc, l'utilisateurdevra rentrer son email et un mot de passe.
00:16:06 :Et c'est comme ça qu'on l'identifie.Après, vous avez plein de choses. Vous pouvez faireSign in with Google, GitLab, etc.Mais là, on va secantonner à ça.
00:16:16 :Donc, je vais directement créerun premier utilisateur parce que vous verrezque quand on va créer notreJe vais créer la table d'abord.Je vais faire les choses dans l'ordre.
00:16:26 :Donc, on crée une nouvelle tablequ'on va appeler Animaux.Et dans Animaux,on va les créer après les colonnes.Et je vais créer aussiRacespour la race des animaux.
00:16:40 :Donc là, on se retrouve avec deuxtables. Donc, c'est comme si vous aviez...Enfin, c'est pas comme si. C'est exactement ça.Deux tables.Enfin, une base de données avec deux tables.
00:16:52 :Alors, dans la première table,on va dire... Qu'est-ce qu'on a dit tout à l'heure ?On va créer une colonneavec le nom de l'animal.
00:17:00 :La description, on s'en fiche pour l'instant.On va dire que c'est un type texte.Si vous avez un string à mettre,la phrase sortie du contexteest marrante.
00:17:10 :Et puis, je pense que Thibautse marra quand il aura la retranscription.Mais si vous devezrentrer à un...un paramètre en type stringdans votre base de donnéessur Postgre,il vaut mieux mettre un texteplutôt qu'unun Varchar.
00:17:30 :Et de toute façon, vous allez avoir...Parce qu'en fait, un Varchar, c'est pareil qu'un texte,mais avec une plus petite...une plus petite contenance.Tout à fait, Édouard.
00:17:42 :Ce serait équivalent à deux modèlesdans Django. Parce qu'au final,qu'est-ce que c'est, deux modèles dans Django ?C'est deux tables dans la base de données.
00:17:50 :Voilà.Donc, on est...Donc, on est dans le texte.On crée une propertie de type textepour le nom de l'animal.Qu'est-ce qu'on va dire ?
00:18:04 :On aimerait bien qu'il soit unique.Donc, on peut le mettre ici. Et c'est pas la clé primaireparce que la clé primaire, ça va être l'ID.
00:18:10 :Voilà. Donc, on va mettre ça.Save. Donc, on a le nom.Qu'est-ce qu'on va mettre aussi ?On va rajouter la masse de l'animalqui permettra de les identifier.
00:18:20 :Donc là, on va dire que c'est en flotte.C'est pas unique.Y'a pas de soucis.OK.Et on va rajouter sa taille.On va dire la taille...
00:18:32 :Comment on appelle ça ?Pas au garrot, mais si, je crois que c'est ça.C'est au-dessus de la poitrine pour un chienou pour un cheval.
00:18:40 :Enfin, bref,j'ai dit toute une connerie.Voilà. Donc, on va mettre la taille.Pareil, c'est en flotte.OK. Et donc là,après...Qu'est-ce qu'il veut ?
00:18:56 :Ah oui, j'ai du flotte.Je vais créer d'abordma table des races.Voilà.Parce qu'en fait, la table des races,ça va être tout simplementle nom de la race.
00:19:12 :Comme ça, description,et puis on va dire que c'estun texte.Et par contre, lui, on va dire, pareil,que c'est unique. Parce que si vous voulez faire
00:19:24 :une relation foreign key,donc clé étrangère depuisune table vers une autre, il faut quele paramètre de destination de la tableétrangère, il soit unique.
00:19:34 :Sinon, ça peut pas fonctionner.Mais c'est pareil dans Django,donc il faut quela clé étrangère soit unique.Sinon,c'est pas possible.Maintenant, ce que nous, on va faire, on retourne dans notretable animaux, et on va rajouterun...
00:19:54 :On va rajouter icila race.Et puis là, c'est à ce moment-làoù on dit hide foreignkey relation. Donc en gros,on veut ajouter une relation de clé étrangèreici. Et donc là,
00:20:08 :vous voyez qu'on aaccès à plusieursbases de données de notre projet.Donc nous, c'est la publique. Et ici, vous allezvoir qu'on a nos deux tables qu'on a déjàcréées. Donc moi, je suis dans animaux
00:20:20 :et je veux lier à ma clé étrangèrerace. Et en plus, il me met à dispositiontous les paramètres qui sont disponibles.Donc ici, moi,je lis au nom de la race.
00:20:30 :Et ici, qu'est-ce qui se passequand... C'est un peu commedans Django, quand vous faites une clé étrangère, vous avezcascade.En gros, si je supprimeune entréedans matable étrangère,je veux que ça soit...
00:20:50 :Je veux que l'impact se propagesur matable mèredans laquelle j'ai fait mon lien.Voilà, donc on fait cascade,et voilà.Donc on peut sauvegarder.
00:21:06 :Et voilà. Donc maintenant, on a ça. Et je croismême qu'on peut avoir une visualisationdes différents liens qu'on a entre nos tables.Je ne sais plus où est-ce que c'est.
00:21:14 :Schéma visualisateur.Donc en gros, vous voyez. Donc ça, c'est pas malavec Superbase. On a ce genre de petites features.On a notre tableanimaux. On a créé ces différents
00:21:26 :propriétés.Et vous voyez qu'ici,la propriété race, elle est liéeavec une foreign keyà la table icinon-race. Donc c'est pas mal icidans Superbase. Je trouve que le schéma visualisateur
00:21:42 :ça fait comme un...Comment on appelle ça les...Ça s'appelle commentles schémas...UML. Merci Yanis.Diagramme UML. Ouais.Voilà.Donc ça, c'est pas mal.
00:22:04 :Donc on a fait notre table. On est contents.Et on peut même...Vous voyez qu'on va pouvoir aller maintenantdans animaux. On va dire qu'on va créer
00:22:12 :un animal. Donc on fait insert row.Et donc là, on va dire... Là, vous voyez que le IDil est créé automatiquement. La date, ça va être
00:22:18 :la date de création de l'animal.Et...On va définir son nom.On va dire Médor.Sa masse, on va dire qu'il fait 6 kilos.Et puis la taille, on va direqu'il fait, je sais pas, un mètre.
00:22:42 :Donc on va le mettre en centimètre.Parce qu'on va peut-être mettre des petitschihuahuas après. Donc on va direque c'est des centimètres. Et là, la race, en fait,
00:22:50 :vous pouvez aller cliquer ici. Select record.Et...C'est normal, en fait.On a fait... Donc là, je vais faire un save.On n'a pas crééd'entrée dans cette table-là.
00:23:02 :Donc il faut qu'on commence à les créer.Donc on va dire qu'on va créerun chien.OK.On va mettre aussi, je sais pas,un chat.
00:23:16 :Et puis,je sais pas, si on est dans un centre animalierde secours, on peut avoirtrès bien, je sais pas, une chèvre.On va mettre d'accent, mais je crois que ça supporteles accents.
00:23:30 :OK. Je retourne en animaux.Je vais surmon...Ici, mon...Est-ce que je peux le modifier?Ouais. Edit row.Faites un clic droit dessus.Et donc là, on retourne à l'endroit où on devaitsélectionner la race. Et là, vous pouvez faire
00:23:50 :Select, Record.Et donc là, il va vous amener directementvers la table que vous avez définieen clé étrangère possible.Donc là, moi, je vais dire que ça va êtreun chien.
00:24:02 :OK.Et voilà. Donc là, on a une race, chien, machin.On peut créer un autre.Un autre.On va dire...Est-ce qu'on peut mettrelucifer.
00:24:16 :Ça va être un chat.Donc on va lui mettre 2 kilos.Et on va lui mettre20 centimètres. Et en race,on va dire que c'est un chat.
00:24:26 :Vous pouvez construire votre tablecomme ça, un peu à la main.Mais là, ici, c'est pas le but.Et déjà,ce qu'on va faire, peut-être qu'on peut déjàcommencer à créer...
00:24:38 :On va créer... Attendez, je réfléchisà ce qu'on peut faire.On va se créer notreprojet.Un projet Python qui nous permet, justement,d'aller interroger tout ça.
00:24:50 :Donc, ce que je fais, moi,je vais toujours dans...Enfin, pas toujours. Des fois, je vaissur GitLab. Mais là, on va créer un projet
00:24:58 :sur GitHub parce qu'on ne sait jamaissi on veut l'héberger après. Donc, je vais créerun nouveau repo. Le repo,on va l'appeler... Comment je l'ai
00:25:06 :appelé, moi ? Animal Crossing.Animal Crossing.GitHub. ReadMe.On va mettre un Python.Et une licence GNU 3.Et on publie le repo.OK.Pardon.
00:25:26 :OK. Donc là, je suis dans Visual Code.Ce que je fais, c'est que,comme d'habitude, je vais créer directementl'environnement virtuel.J'installe toujoursHippyton parce que j'aime bien manipulerce que je fais avec Hippyton.
00:25:48 :Donc, pip installhippyton.Source.bin.cveit.pip installhippyton.Ça, je vous l'avais déjà dit, mais quand vous installezHippyton avec VS Code,il faut penser à quitteret à revenir parce que sinon,ils ne comprennent pasqu'Hippyton est installé dedans. Mais ça, c'est pas grave.
00:26:18 :On va se créer un dossier qu'on va appelerfrontend parce que tout à l'heure, on va peut-être fairel'API, mais je ne sais pas si on aura le temps.
00:26:24 :Donc là, ça va êtrele frontend. Et dans le frontend,on va mettrele dashboard.py. OK.Et là, on vacommencer. Ce qui est pas mal avec
00:26:38 :Superbase, c'est que si vous allez icidans Home, je vais dézoomerun peu, tout en bas,vous avez la documentation de toutes lesAPIs disponibles. Donc, si vous faites du flutter,
00:26:48 :du JavaScript, etc., vous avez tout ce qu'il fautpour vous connecter. Donc, nous,on va voir dans Hippyton ici.Et donc là, il nous donne directement comment on fait pour seconnecter.
00:26:58 :Voilà. Donc, il faut juste...Moi, je copie ce morceau de code là.Et bienentendu, il faut d'abord installer la librairieSuperbase.Il le dit ici, je pense. Voilà.
00:27:10 :pip install superbase.Donc là, j'installe tout ce qu'il faut.OK.Bon, ça, je vireparce que je m'en fous un peude définir.C'est peut-être pas bien, mais moi, je ne le fais pas.
00:27:28 :Voilà. Et ici, il va nousfalloir quand même qu'on définisseun fichier .env dans lequelon va aller définirce qu'il nous faut pourconnecter.
00:27:52 :Et qu'est-ce qu'on a ?OK. Donc, c'est maintenantqu'il va nous falloir, parce qu'en gros,pour créer un... c'est commeune espèce de connexion entre votre scriptPython et votre projet Superbase, il vousfaut l'URL et la clé.
00:28:10 :Donc, c'est tout simple. Vous allez ici dansvotre projet Superbase. Vous allez dansProject Settings.Et dans API, ici, vous avezvotre URL. Donc, il suffit d'aller
00:28:20 :le copier.Et la cléqui est ici.Voilà.Donc là, on a ce qu'il faut.Normalement, on peut se connecter.Il va falloir que j'installepython.env.
00:28:36 :Donc, en fait,ça, c'est ce qui permet. Vous voyez ici,quand on fait os.environ.getsuperbase.url,en gros, normalement,il va chercher dans les variables d'environnementde votre session, ici, de votreterminal.
00:28:52 :Et ici, ce qu'on fait avec python.env,en fait, c'est qu'on vasimulerfrom.from.envimport load.envet on fait ça, load.env.Et en fait, en faisant ça,ces deux lignes-là, elles permettentde simuler le fait qu'on mettesuperbase.url et superbase.key
00:29:16 :dans nos variables d'environnementqu'on a définies, ici.Si vous utilisez Linux,ça pourrait, en fait,vous pourriez faire un...je crois que c'est export, le nom de la variable.
00:29:28 :EtdansWindows, je ne sais plus exactementcomment on fait, mais en gros,c'est comme ça qu'on définitles variables d'environnement quand onutilise un script python.
00:29:42 :Voilà.Et puis le .env,je vais le mettre ici, à la racine.Et normalement, en fait,le load.env, il vachercher automatiquement, récursivement,le fichier .env automatiquement.
00:29:56 :Donc, si là, il ne le trouve pas dans le dossieractuel dans lequel il est, il va remonter d'uncran jusqu'à trouverle fichier .env tout seul.
00:30:04 :Donc, si...Il y a une question, quelque part ?Ouais, Gabriel ?On a déjà parlé, il y a très longtemps,OS...Ah, c'est environ...
00:30:16 :Non, os.environ.get.Il y a os.environ.get et os.get.envdirectement. C'est quoi, déjà, la différence ?Je vais t'appeler.Je ne suis pas sûr qu'il y ait une différence.
00:30:26 :Ça peut... Ouais, ça...Ouais, ouais...Je me crois aussi avoir...Enfin...J'ai déjà vu le get.env.Je ne suis pas sûr qu'il y ait une différence. Je crois que les deux fonctionnent.
00:30:38 :Par contre, si jamaisc'était superbase.url,ou key, c'était une liste declés, il faudrait que tu fasses un...Tu entoures leos.get.env et superbase.keyde listes, non ?
00:30:52 :On s'en rend en listes ?Ah oui, tu veux dire si ici, je mettais une liste ?Ouais, ouais, ouais.Parce que par défaut, si c'est une chaîne de caractère,ça se récupère, et du coup...
00:31:02 :Ou genre, si c'était un booléen,un booléen, il faudrait que tu fasses un bool,et à l'intérieur, tu fais tonos.environ.get, je crois, non ?
00:31:10 :Pour moi, ici,tu peux rentrer directement un booléen.Ouais.Si tu voulais rentrer une liste, moi, ce que je ferais,c'est que je mettrais une virgule ou un truc comme ça,et là-dedans,je ferais un split.
00:31:24 :C'est peut-être...C'est peut-être...Pas très propre, mais c'est comme çaque je fais. Je pense que ça doit existerde pouvoir rentrer directement une listelà-dedans. Notamment
00:31:38 :avec du Yamal ou des choses comme ça.Ok, ouais. Merci.Je t'en prie.Donc là, on va vérifier que notreconnexion, elle est bien faite entre notre projetet Superbase.
00:31:50 :Donc si je fais rundashboardAh oui, je ne suis pas dans le bon dossier.Il faut que j'aille dans frontend.Rundashboard.A priori, ça a fonctionné.
00:32:10 :Parce que si je faisSuperbase,j'ai bien créé mon objet.Donc sans problème. Alors maintenant,ce qu'on va faire, c'est qu'on va fairedu FetchData.
00:32:22 :Vous allez voir que ça ne va pas fonctionnerpour le premier coup. Mais c'est pour vous montrerl'histoire des policiers,les règles à définir.Donc pour faire FetchData,ça ressemble fortementà une requête SQL.
00:32:36 :Il faut définircette commande.Donc si je faisresponse machinet qu'après, je veux afficheril faut quand même que je metteles claviers corrects ici.
00:32:50 :Si je faisrun dashboard,vous allez voir quesi je fais response.json,en fait, il a réussi à faire la requêtesauf qu'il ne m'a sortiaucune data. Comme vous
00:33:04 :vous souvenez, la dernière fois qu'on l'a fait, ça n'avait pas fonctionnédu premier coup.Ça va, c'est assez grand là, vous voyez assez ou pas ?
00:33:10 :Parce qu'après, si je mets trop gros,je dézoome juste un coup.Pour ça, il y adeux solutions. Il y a une solutionqui est un peu bourrineoù en fait, il faut aller dans chaque...
00:33:28 :Là, il va falloir le faire dans nos deux tables parce qu'en fait,on a un lien entre nos deux tables.Ici, là, vous avezno active RLS policies.
00:33:36 :Donc ce que vous pouvez faire, c'est que vous allez làet vous dites disableRLS pour raw levelsecurity. Donc il va direattention, c'est un peu dangereux, etc. Mais c'est juste pour
00:33:46 :vous montrer que ça peut fonctionnercomme ça.Donc là, pareil, no RLSdisable RLS confirm.Et donc maintenant, si je retourne surmon projet et que je relanceet que maintenant, je faisresponse.json, j'ai bien
00:34:02 :ici,en json, je pourrais faireresponse.dataet donc là, j'ai une liste de...Vous voyez, on peut mêmefaire un truc un petitpeu plus sympa. Je vais ici faire
00:34:20 :installpanda.Ce que j'aime bien faire,c'estdfégal...Je me transformedirectement en DataFrame.Comme ça, lerésultat est plus joli.Donc là, il lance,il fait la requête.
00:34:50 :Et c'est la file df. Donc là, vous voyez que j'aibien accès à mes datasqui sont, je vais zoomerun peu pour que vous voyez. Voilà, j'ai
00:34:58 :mon Médor, Lucifer,chien, machin. Donc là, on est content.Par contre, c'est pas hypersecure ce qu'on a fait parce qu'on a désactivétoutes les règles de sécuritésur notrebase de données. Donc, ce qu'il faut faire,
00:35:12 :on va faire un enableparce qu'on va remettre tout.Un nouveauet ici, enable.Voilà.Et donc maintenant, vous allez voir que normalement,si je relancemon truc et que je fais df,j'ai de nouveau rien parce quema base de données, elle n'autorise plusla lecture.
00:35:34 :Donc là, je vais quitter. Et donc là, on va définirnosrègles.Ici, vous retournez dansRLS. Et là, au lieu de fairevisible RLS comme des bourrins,on va aller se créer des nouvelles règles.
00:35:48 :Donc là, on va direqu'en fait, Superblight, il met à dispositiondes templates de règles.Utilisez-les. Vous faitesget started quickly. Donc là, vous avez
00:35:58 :différents templates.En fait, vous pouvez,par exemple, là, il vous définit un template qui permet,qui définitune règle qui dit queseuls lesusers avec un certain IDpeuvent insérer des choses dans la basede données. Là, nous, ce qu'on veut, c'est que
00:36:16 :uniquement les utilisateurs qui sontlogués puissentlire ce qui se passe dans la base de données.Donc on va utiliser ce template-làoù en fait, il dit bienc'est pas insert,c'est plutôt... Non, on va
00:36:30 :plutôt utiliser celui-là, Enable read accessto everyone. Mais nous, on va pas mettreto everyone. Du coup,on va plutôt prendre celui-là, pardon. On va prendre
00:36:38 :Enable insert access forauthenticated user only et on vachanger le insert par read.Donc on va dire ici,use this template.Et là, nous, ce qu'on veut, c'estlire. Donc c'est pas insert.
00:36:52 :Donc là, je vais mettre, ça c'est juste pour la description.Enable read for authenticated only.Et donc là, on va mettre select.Et ici, il suffit juste de mettre true.
00:37:00 :Et donc là, on a bien choisiauthenticated. On aurait pu mettreservice role, etc. Mais moi, je dis justeceux qui sont authentifiés,je leur laisse la possibilité de faireun select role, donc c'est-à-dire faire un read.
00:37:12 :Donc si je fais review,en gros, il m'a aidé,il m'a créé la requêteSQL qui permet de créer la règleappliquée à ma table.
00:37:22 :Donc là, vous voyez, on a crééune règle, enable read, donc ça c'est juste pour ladescription. Sur quoi ? Bah surma table animaux. Et
00:37:30 :on a mis une permission à uniquementceux qui sont authentifiés. Etici, le true, ça permet de direOK. Donc on fait saverole ici. On va mettre la même
00:37:40 :...surla race, parce que comme je vous l'ai dit, on aun lien entre les tables, donc il faut le mettre aussilà-dessus. Donc là, je vais faire
00:37:50 :pareil, use this template. Je vais mettreread,select, et ici,true,review, save.OK. Donc là maintenant,pareil,en fait là, ça ne va toujours pas marcher parce queil n'y a à aucun moment, je me suisauthentifié. Si je fais
00:38:10 :rundashboard,que je fais df, j'ai rien parce queà aucun moment, bah moi je me suisauthentifié. Doncce qu'on peut faire ici, c'est qu'on va direil faut qu'on se crée un utilisateurpour pouvoir s'authentifier forcément.
00:38:28 :Donc on va dans la partieauthentication, et là on va direon va créer un user. Donc là, on ne va pasfaire send invitation, c'est possible,mais on va le créer ici à la volée. Donc
00:38:38 :on va le créer avecune adresse mail,et on va définir un password.Vous allez voir,il est bidon. Et on va dire auto-confirm,c'est-à-dire on ne veut pas que Superbase envoieun mail de confirmation pourcréer l'utilisateur.
00:38:56 :C'est sûr que j'ai bien lu.Create user,ok.Et donc maintenant, on se dit, bah ok,on a créé un utilisateur, il a un email,un mot de passe, mais comment on faitdans Python pour faire le login ?
00:39:10 :Bah c'est tout simple, vous retournezdansici la documentation de l'API,et là vous avez sign in user,et là c'est tout simple. Il vous dit, bah pour
00:39:20 :faire un login, bah en faitil faut utiliser justeSuperbase sign inwith password. Ok, donc on va le mettre là,et ce qu'on va fairec'est que avant depouvoirce que je vais faire, ce que je vais faire,on va le mettre là,et ici l'emailBon vas-y, je vais le rentrer ici à l'arrache.
00:39:50 :Bien entendu, ne faitesjamais ça, de mettre votrepassword ici à l'arrache, mais c'est juste pourl'exercice. Donc là j'avaismispassword,comme ça, vraiment faites pas ça,mettez le au moins dans le .env
00:40:12 :ou j'en sais rien, demandez,faites une demande,une invite de commande à rentrerun mot de passe et password,parce que là c'est pas correct sinon.
00:40:22 :Et en fait ici,on va mettrelogin, il n'y a pas besoin de faireil n'y a pas besoin de faireautre chose. Le fait, justifie
00:40:32 :de dire, de mettre dans l'objetSuperbase sign in,il va mettre automatiquement dans la sessionqu'il y a un user authentifiéet du coup, on va respecternos règles qu'on a définiestout à l'heure dans notre table,ça va les respecter, et du coupon n'aura pas besoin,on pourra avoir accès à ce qu'on a.
00:40:52 :Donc ici je vais quitter et je vais relancer.Voilà,et si je fais rundashboard,ce coup-ci,si je retourne et que j'affiche,super.Voilà, j'ai bien accèsà mes datas, pourquoi il n'a pas marché ?
00:41:14 :Parce que bon, je pense qu'il n'avait pasle temps qu'il le mette dans la session, etc.Peut-être que c'est des histoires de cache, etc.dans le terminal,mais en gros, ce que vous voyez, c'est quemaintenant qu'on a fait le login avant,malgré le fait qu'on ait desrègles de restriction
00:41:30 :dans nos bases de données, on arrive à se connecterà voir nos datas.Donc là, ça commenceà être pas mal,et puis, ben voilà,ce qu'on pourrait faire maintenant,c'est se créer notre dashboardStreamlit, qui va nous permettred'accéder à notre data, mais aussid'aller insérerde la data dans notre
00:41:52 :base de données.Parce qu'ici, si je faisresponse.json,on va créer aussi une petite fonction.Là, on fait juste ce qu'on appelle,on fait du fetch, donc on varécupérer la data et on va la voir.
00:42:08 :FetchData,et là, on va direInsertData,et donc là, pareil, je ne connais pas les trucspar cœur, vous allez retourner voir dans ladoc, et là, vous avezau lieu de FetchData,InsertData, et donc là, vous prenez lasyntaxe, c'est tout simple.
00:42:26 :Ici, il suffit de modifierun petit peu, doncvoilà.Donc là, on va mettreAnimaux, ID,en fait, on ne va pas le mettre parce que l'ID est automatiquequand on le crée, le Name,qu'est-ce qu'on va mettre comme nom ?
00:42:44 :On va mettre,il est fixe,et la race, c'estun chien, si je ne m'abuse.Voilà, et donc ça,pareil, maintenant qu'on est logué,normalement, il n'y a pas de soucis, on peutcréer des entréesdans la base de données, vous allez voir qu'ici, si je vais...
00:43:06 :Si je retourne, là,que je vais voir ma table des animaux, pour l'instant,j'ai que deux animaux, qui sont Médor etLucifer.Là, j'y retourne,et je relance montruc, j'ai un petit messaged'erreur, pourquoi ça ?
00:43:22 :Il ne doit pas avoir pris en compte le login.En fait, le login,il ne doit plus être dans la session.Je vais relancer.Ah, ben non !
00:43:34 :Je sais pourquoi,il n'y a pas ...Parce qu'on n'a pas défini de règles,exactement,le ...Je viens de comprendre.Les règles qu'on a définies,c'est un bon exemple ici, les règles qu'on a définiessont uniquement en lecture, donc ce qu'il faut, c'est qu'onretourne dans animaux,on va dans nos règles, et on en ajoute une,
00:43:56 :et donc là, vraiment, il faut faire insert,donc là, c'est déjà le template,il n'y a pas besoin de changer.Il n'y a que ceux qui sontblogués qui peuvent insérer des choses,et donc, pareil, dans RAS,OK,New Policy, Insert,voilà,Review, Save,OK, on va quitter, parce que
00:44:18 :on veut être sûr qu'ils prennent bien en compte.Option, Run,Dashboard,et donc là,toujours pas, pourquoi il ne veut pas ?Name,est-ce que j'ai bien tout défini ?
00:44:34 :C'est relancé, je crois que c'est comme tout à l'heure,il y avait un problème.C'est juste que parfois, en fait,peut-être qu'il a du mal à récupérerle login, il se perd dans la session,mais voilà,il n'y a pas de problème, et donc là, vous voyezque si je retourne sur ma table
00:44:56 :animaux, j'ai bienmon ID fixe, je ne lui avais pasrenseigné de masse ni de taille, mais ça, je peux le faireaprès.Donc voilà un peu, en gros,le back-end du truc.
00:45:08 :Nous, maintenant, ce qu'on aimerait...Ça va, là ?Maintenant, ce qu'on peut faire, c'est qu'au lieu defaire tout ça un peu à l'arrache,on peut se faire un petitDashboard Streamlit qui nous fait ça.
00:45:26 :Pour ça,on installe d'abord Streamlit.Ok.Donc ça, en gros, je vaisle laisser à chaque fois au début.Normalement, il faudrait le faire proprement avec un formulaireoù on rentrel'email et le password.
00:45:50 :Mais bon, là, on va le laisser comme ça.Et ici,on va commencer.On va faire un StreamlitST.Je vous proposequ'on fasse plusieursfonctions.
00:46:06 :On va faireDefFetchData.Là, on va prendre en argumentl'objet superbaseet on va fairecomme ça.C'est pas mal.On s'en fiche, on va juste l'afficher.
00:46:36 :ST.DataFrameet puis là, on va mettre Def.On va déjà vérifier que ça fonctionne bien.Donc là, je faisStreamlit RunPassword.Pas de soucis,Gabriel.
00:46:56 :Forcément, il ne se passe rienparce que je ne l'ai pas affiché.Et donc, on va direque, voilà,Def Fetch. J'aime bienséparer comme ça avec des fonctions.
00:47:08 :Ça rend le trucun peu plus propre.Et puis, on va mêmele mettre avec un STExpander.WithDef.ExpanderVoirles animaux.FetchDataStreamlit RunEt donc là, si je clique là-dessus, hop, on ala liste de nos animaux.
00:47:34 :Donc, vous voyez, c'est assezefficace. Ce qui se passe en back-end,c'est que, dès que jeouvre ici, il va faire la requête.Donc là,dans l'expander VoirAnimaux,il appelle cette fonction FetchData.
00:47:48 :On va plutôt mettre FetchAnimauxFetchAnimauxici.Et puis,en fait, je vais le faire un peu plus intelligemment.Je vais définir une fonctionqui dit FetchData. Et là, on va dire
00:48:10 :qu'on va mettre en argument la table qu'on veut.Donc, tablename, ça va être plus propre.Et ici, on mettablename. Et comme ça,
00:48:22 :on va faire, moi, ce quej'aimerais faire, je pense,je vais définir un container.Mais ça, c'est juste pour du Streamlit.Vous n'en faites pas avec ça.
00:48:32 :Je vais définir deux colonnes.Pourquoi il veut faire ça?Cols.StColumns2Et puis,en fait, on va mettrewith cols0On va faireFetchDataAnimauxFetchDataAnimauxFetchDataAnimauxOn va voir déjà si ça marchetranquillement.
00:49:14 :Ok, donc là, on voitnos animaux.Je vais faireen sorte que la page,elle soit complète.PageConfigEt là, je vais lui direnon, ça, je m'en fous.
00:49:38 :PageTitleLayoutOk, donc là,on a nos animaux.Et ce qu'on aimerait voir aussi, c'est juste à côté,on va mettretoutes les racesqui sont disponibles aussi.
00:49:58 :Parce que nous, après, on va vouloir en créer.Je vais mettrerace comme ça.Voilà, donc là, on commence à avoirun petit dashboard où on peut direvoir les animaux qui existent et on peutvoir les races qui sont disponibles.
00:50:22 :Et on va créer un formulairequi va direcréez-moil'animalque je décide.Donc, on peut définir un formulaireditef. Enfin, là, on vad'abord définir la fonctionqui permet d'insérer les datas.
00:50:40 :DoubleName est un peu pareil que tout à l'heure.Et voilà.InsertDataComment on peut faire ça ?Je vais le mettreparce qu'il va nous falloir un peuquelques arguments.
00:51:00 :Je vais le mettre en dictionnaire iciles inputs DoubleName, SuperBaseet là, on va mettredatato insert.Comme ça, ici, je pourrais mettre ce que je veux.
00:51:14 :Il suffira juste que je metteun dictionnaire.Je vais le mettre là.Data to insertDoubleName, voilà.Voilà.Et donc là, maintenant, on va se créer le formulaire.
00:51:34 :Donc,pour créer un formulaire, il suffit juste de fairewithst.formEt on vacréer un formulaire d'abord qui permetde créerun animal.Donc,créer un animal.
00:51:54 :Là, on va direl'assistant de code,il m'aide un petit peu.En gros, il va définirdeux colonnes. Dans la première,on va devoir définir le nomet dans la seconde, la race.
00:52:12 :Mais en fait,si je fais ça,donc là,j'ai mon formulaire, mais il n'est pas trèsbeau. Je vais mettre...J'ai mon formulaire,donc là, je pourrais définir le nom.
00:52:30 :Mais là, ici, la race, je ne veux pas devoirrancrer à la mainla race du chien. Moi, ce que je veux, c'estqu'il me propose une liste,une select box avec la listedes races disponibles.
00:52:44 :Donc ici, au lieu de mettre raceégale texte input,on va mettre tout simplementst.Je ne vais pas le mettre comme ça.Et je ne vais pas mettre ça non plus.
00:53:02 :Parce que ce n'est pas ce que je veux.PageData, race,par contre,PageData, ça me sort.PageData, je mets ça,je vais récupérer.Ici, j'ai qu'à mettre...
00:53:26 :Parce quePageData, il va me sortirun DataFrame, donc je metsnom. J'écris, puis après,on revoit ensemble si vous voulez.Voilà.Et donc là, si je rerun,pourquoi il fait ça, lui ?
00:53:48 :Ah oui, parce queil me l'a affiché.Voir lesannées,voir lesanimaux, on va dire.Là, je suis juste en train deréorganiser un peu le truc parce queje n'ai pas besoin d'afficherà chaque fois ici.
00:54:28 :Voilà.Parce que sinon,vous voyez ici,il m'affiche le DataFrame.Donc voilà.Maintenant, quand je veux créerun nouvel animal,je peux mettre...Je ne sais pas si vous avez une idée.
00:54:58 :Je vois...C'est quoi ?C'est quoi, là ?Je vais dire une bêtise.Voilà, donc,vous voyez ici que maintenant, j'ai une liste déroulanteavecles différentes races qui existent.
00:55:30 :Donc là, si par exemple,j'ai chien, chat, chèvre,mais si je retourne dans mon projetet que je metsdans les races disponibles,je mets, je ne sais pas, une vache.
00:55:42 :Je save.Et que maintenant, je retourne là-dessus.Donc, il faut que je rerun un peu.Vous voyez que dans ce que j'aià disposition, il a bien été me chercher.
00:55:54 :Vous voyez, les races, il les a bien mis à jour.Et donc là, je peux aller chercher toutes celles que je veux.Voilà, donc,en gros,le formulaire, vous voyez que c'est assez simpledans Streamlit.
00:56:06 :Il suffit juste de définirle st.form.Vous définissez un peu vos widgetsqui vous permettent de renseigner vos datas.Et il fauttoujours avoir iciun submit-bouton quand vous avez un form.
00:56:20 :Donc là, vous définissez aveclà,streamlit-form-submit-bouton.Et donc là, vous avez un peuun peu comme dans Streamlit,quand vous avez un bouton, c'est tout simple.
00:56:32 :Vous faites ibs-submit-id et puis là,vous balancez un peul'action que vous voulez faire quand vous appuyezsur le bouton. Nous, l'action qu'on veut faire
00:56:40 :quand on appuie sur le bouton, c'est insert dataavec, dans latable animaux,toujours avec l'objet superbase parce que c'est lui qui contientle login, etc. Et on
00:56:50 :veut lui mettre ça comme data,donc le nom et la race qu'on a définie.Après, on aurait pu définir d'autresproperties.On avaitdit la masse, je crois.
00:57:02 :Et on avait aussila taille.Et voilà.Et ici, on peut définirdonc là, il faudra ajouterla masseet la taille.Ici, je relance.
00:57:32 :Voilà, on peut définirla masse, donc le nom,sa taille, la masse.Donc là, on va en redéfinir un autre.On va dire ce coup-ci,ce coup-ci,Rox,la taille,on va dire, je sais pas,30 cmau garrot.
00:57:58 :Il fait 5 kget c'est un chien.Je fais créer.Voilà, donc maintenant,si je rafraîchis et que je vais voirles animaux,on va bien créer Roxavec la masse et la taille que je lui ai définie.
00:58:14 :Ce qui est pas mal, c'est que ça permetde, parce qu'en fait,les Streamlits, c'est uniquementdu front-end.Quand vous faites un projet Streamlit, si vous n'avezpas de données persistantes,donc là, en l'occurrence, les données persistantes,elles sont dans notre databaseSuperbase,quand vous quittez votre dashboard, etc.,
00:58:36 :et que vous reconnectez,vous avez toujours vos datasqui seront disponibles, parce qu'en fait, il fait des appelsd'API à la base de données.Yannis,oui, oui, tout à fait, ça suffit pour 10 000 personnes.
00:58:56 :Je t'invite à allervoir les...Attends, on va aller le voir ensemble.Superbase,Free,j'ai vu la main lever,ça va tomber.Donc, dans le Free,en gros, tu vois,tu as tout ça.
00:59:17 :Tu as 500MO d'espace sur ta database.Ça, en gros, c'est pourfaire du, un peu comme duS3 Bucket Amazon, tu peuxstocker des fichiers.
00:59:35 :Et tu peux, tu vois,tu as 500 000fonctions,appel fonctions.Ce qui peut t'intéresser, je pense que c'est50 000monthlyactive users.Donc,je ne sais pas ce que tu en penses.
00:59:56 :La bandwidth,en fait, c'est le...Je ne voudrais pasdire de bêtises, mais c'est le...C'est un peu labande passanteà laquelle tu es autoriséen transfert.
01:00:12 :Si, par exemple, tu faisdes uploads ou des downloads,tu es limité à 5 gigasde cumulés d'upload-download.Ça, il faudrait que tu regardesen détail.
01:00:27 :Et du coup, tu as 10 000 personnesqui sont sur ton...sur ton projet, là, c'est pas mal.J'espère que tu as de la pub dessus.
01:00:40 :Ça répond à ta question ou pas, Yanis ?Ah, oui, d'accord.Il y a unconcert où il y aura 10 000 personneset toi, tu lui as prévu l'applicationpour la réservation.
01:01:09 :Ah oui, alors du coup, c'est ça ta question,Salvatore ?Et tu veux dire dans Streamlitou dansSuperbase ?Dans Streamlit directement ?Non, au-dessus.
01:01:47 :Oui, là.Il faut la coder en fonction.C'est très simple, tu vois,si tu vas là-dedans...Mais ça, c'est pas propre à Superbase,c'est plutôt propre à Streamlitet au DataFrame.
01:02:15 :Au lieu de mettrest.dataframe ici,on a misst.dataframe.df.Tu as des widgets spéciauxautres qu'à DataFramequi te permettent d'avoir un tableauqui est directement...
01:02:31 :Yannis, t'as un tableau qui est directementinteractif et sur lequel tu peux justementfaire des filtres.Je t'en prie.Euh...Ben...Voilà pource petitdashboard.
01:02:57 :Vous voyez, quand même,en une heure, on peut créer un trucassez sympa, assez interactif,qui est sécure,qui permet dediscuter avec une base de donnéeset de faire des filtres.
01:03:14 :Qui permet de discuter avec une base de données.Donc, moi,j'aime beaucoup ce projet Superbase.Voilà.Je pense que là,je sais pas si vous avez des questions,mais aujourd'hui, c'est madernière sessionde l'année, je pense, parce quela semaine prochaine, je suis pas à dispo.
01:03:38 :Et je sais pas si vous avez vu,je sais pas si peut-être Thibaut fera unecommunication, mais...Oui, oui, c'est clair, y'a pas toutes les trucsde base de données à gérer.
01:03:48 :Ouais, j'ai l'idée. Donc, moi, je pense que ça va être ma dernièresession de mentoratcette année, parce que la semaine prochaine,je serai pas à dispo. Et les deux semaines d'après,
01:04:00 :c'est plutôt au congé, du coup.Voilà.Merci, Seb.Bonne soirée.Dans quel cadre je peux vite choisirSuperbase ?Ben, écoute,ça dépendde ce que tu veux faire.
01:04:18 :Quel cadre de projet ? Ben là, typiquement,en fait, dans n'importe quel projetoù t'as besoin de gérer une base, t'as besoind'une base de données.
01:04:26 :Je sais pas si tu veux desidées.Tu pourrais fairetout simplement une gestiond'une to do listun petit peu comme ça. Tu pourrais imaginer
01:04:40 :en fait,ici,dans ton projet Superbase, que t'auraisplusieurs tables. Donc,une table qui s'appelle projet,une table qui s'appelle tâche.Et en fait, dans ta table tâche,tu renseignes toutes tes tâches, et t'auraisune clé étrangère qui feraitun lien vers ta tableprojet. Et en fait, par exemple, pour ta
01:05:02 :tâche 1 où tu dis, je sais pas,envoyer de vie client,tu la liraisà ton projet dans la tableprojet qui correspond à ce projet-là.
01:05:12 :Et comme ça, tu pourrais filtrertes tâchespar projet, etc.Et typiquement, c'est, tu sais,toutes les applicationsde gestion de projet,elles fonctionnent comme ça. C'est avec une base de données,
01:05:26 :avec des liens, des foreign keys,etc. Ouais, t'as une questionaussi là?Oui, en fait,je demandais dans quel cadreon utilisait Superbase. En fait,
01:05:38 :c'est, disons, j'ai un projet,c'est-à-dire,par exemple, je peuxavoir un projet dans l'entreprise,dans une entreprise par exemple,on te dit, on veut gérer peut-êtrela clientèle, on peut gérer,on veut gérer,comment dirais-je, le stock.
01:06:00 :Ouais, tout à fait.Est-ce qu'on peut vite penser à Superbaseou bien c'est Djangoqui pourra plus,qui est plus,ou bien c'est Django ou bien Superbase,je ne sais pas.
01:06:14 :Franchement, ça dépend de,moi je dirais, ça dépend du end user.Si,en fait, si tu veux,si tu veux que tes utilisateurs, en fait,je ne peux pas trop te répondre parce que les deux,les deuxstacks de technologies,ouais, peut-être, Quentin,tu veux répondre ?
01:06:38 :Oui, en fait,ça va dépendre surtoutd'où va tournerton application, c'est-à-dire que si,en fait, c'est chez le client en local,là, il vaut mieux que tu aies ta basede données du côté Django en localpour des raisons, du coup, de rapiditéparce qu'en fait, du coup, ça va tourner
01:06:56 :à proximité dans le réseau local de l'entrepriseet aussi, du coup,par exemple, imaginons qu'ils n'ont pas Internet,du coup, ils n'auront pas accès à Superbasemais néanmoins, leur application, leur métiertournera.
01:07:08 :Après, si c'est des projets qui sontplutôt dédiésà des utilisateurs,voilà, externes sur Internet,là, il vaut mieux privilégier une base de donnéesqui est hébergée sur Internet, donc ça peut rester duDjango en base de donnéessur Internet ou alors du Superbaseparce que, du coup, là, les débits Internet
01:07:26 :sont conséquents et donc ça tourneratoujours, voilà quoi.Ouais, ça sera toujoursavailable, voilà.Ouais, après,merci, Quentin, pour ton intervention, donc c'est vraique cet aspect-là local,ça, c'est un choix, mais après,comme tu vois,si tu connais bien Django, etc.,
01:07:46 :bon, c'est peut-être dommage de s'en priver parce qu'en fait,là, tu vois qu'ona quand même beaucoup de choses à refaire à la main.Ouais.
01:07:54 :Il faut, mais bon,voilà, les deux solutions se valentet puis, enfin, je dis à faireà la main, il y a quand même tout qui existe, tu vois,le sign-in with password,le fait de gérer desauthentifiques, desusers avec leur envoyerun mot de passe pour si jamais
01:08:12 :ils ont perdu l'heure, etc., avec Superbase,c'est quand même bien pratique parce quetu as tout, c'est déjà implémenté, doncfranchement, il faut poser le pour et le contre.
01:08:20 :Je dirais,ça dépend presque de tes préférences,de ce que tu veux faire,parce qu'en termes de sécurité, etc.,Superbase, voilà, il n'y a pas de soucis.
01:08:30 :Ok, super, super.Est-ce qu'il y a d'autresquestions ?Quand est-ce qu'on te revoit, du coup ?Je pense que là,encore cette semaine,je serai encore,je réponds encoreaux questions, maisà partir de la semaine prochaine, je pense quejusqu'au,jusqu'à lapremière semaine de janvier, je ne serai pas
01:09:16 :disponible.Enfin, je n'en ai pas encore parlé,enfin, j'en ai parlédéjà un peu avec Thibaut, mais je pense qu'ilcommuniquera, maispas avant la deuxième semaine de janvier.
01:09:28 :Ça marche.De bonnes fêtes, du coup.Merci beaucoup, vous aussi, reposez-vousbien, amusez-vous bien,continuezà coder,faitesun petit,je ne sais pas, un petit projetauquel je pense tout de suite,parce qu'on en fait beaucoup au boulot,essayez de,je ne sais pas, de mettreen ligne une application qui fait
01:09:56 :un Secret Santa, par exemple,je ne sais pas, on peut imagineravec Streamlitsque vous déployez une application qui permettraaux utilisateurs de renseigner lesdifférentes personnes qui sontdans l'entreprise, qui participent auSecret Santa, et puis voilà,faites l'algorithme qui ditun tel choisit,enfin, a pioché un tel
01:10:20 :pour le cadeau, etc. Vous voyez quevous pouvez vous dire que c'est simple, mais en fait quand vous allezessayer de le coder, c'est un petit peu plus compliqué que ça,le Secret Santa, il y a un petit algorithmeà faire, ça peut être sympa, et pourquoi pas une petite
01:10:30 :application Streamlits qui fait ça,et même une petitebase de données dans laquelle vous renseignezles noms de vos utilisateurs,je ne sais pas, vous pouvez imaginer les cadeaux,le prixdes cadeaux,bref, c'est juste une idée que je balancecomme ça, après j'imagine qu'il y a plein de
01:10:48 :projets aussi disponiblessur Botstring,des idées de Thibault, mais pourquoi pasune idée si vous voulez vous amuser, que vous en ayez.Bon bah, merci à touspour votreparticipation, c'était sympa, età bientôt, bonne fête à vous tous.
01:11:10 :Salut, ciao.Salut, bonne fête à tous.Merci, ciao.Sous-titres réalisés para la communauté d'Amara.orgAbonne-toi !Sous-titres réalisés par la communauté d'Amara.orgAbonne-toi !Sous-titres réalisés par la communauté d'Amara.org
01:13:43 :Abonne-toi !Sous-titres réalisés par la communauté d'Amara.orgSous-titres réalisés par la communauté d'Amara.orgSous-titres réalisés par la communauté d'Amara.orgSous-titres réalisés par la communauté d'Amara.org
Aucune occurrence trouvée pour « ».