Session du 16 novembre 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
Auth Streamlit complète avec Supabase
-
Système d'inscription et authentification avec supabase pour une application streamlit (si pas de problème avec Supabase 🤣)
-
Déploiement avec caprover de l'application (merci Quentin 😁)
00:00:00 :Ok, c'est parti.Salut Seb, salut Ludo.Salut Ludo, salut Cedri.J'espère que vous allez bien.Salut.Bon, du coup, j'ai installé c'est pas base.Installer c'est pas base.
00:01:49 :J'ai fait un projet déjà, ça a l'air intéressant.Oui, bien sûr que c'est intéressant.Ça ressemble à Firebase, on dirait ?Tout à fait.Oui, ça ressemble.
00:02:12 :C'est la même chose, sauf que je pense que c'est pas base, ça a été créé aprèsFirebase.Mais je t'avoue que Superbase est quand même un peu mieux.
00:02:28 :En fait, l'API Superbase est quand même mieux, je trouve.La communication avec Superbase est plus simple.Quand tu veux utiliser Python et tout ça, ça parait un peu plus simple avec Superbaseque Firebase.
00:02:43 :Parce qu'en fait, Firebase, tu as des packages qui sont obsolètes avec Python, etc.C'est pas tout à fait...Genre, si tu veux faire avec Python et Firebase, t'as différents modules.
00:02:53 :Pour l'authentification, c'est pas le même que la discussion avec la database, etc.Donc ça, c'est un peu chiant.Et du coup, Superbase, c'est un peu mieux, je trouve.
00:03:03 :La doc est bien structurée.Ça, typiquement, sur Firebase, je crois que t'as pas une doc pour chaque librairie.Enfin, un truc propre.Mais bon, Firebase, c'est quand même une suite...
00:03:18 :Enfin, ça a été racheté par Google, donc c'est pas non plus la merde.Mais voilà, Superbase, je crois que c'est un des plus gros projets...
00:03:26 :Je crois que ça fait 4 ans que ça existe.Et en termes de popularité, c'est le projet qui a le plus explosé ces derniers temps.
00:03:33 :Il y a un mec qui s'y connaît bien sur Twitter.Je crois que c'est sur Firebase qu'on a vu ça.Il parlait de Superbase, il disait que c'était encore mieux.
00:03:46 :Mais je connaissais pas.Et puis, par exemple, dans l'interface, ils ont un SQL Editor.Donc tu peux taper des commandes SQL pour faire des requêtes sur ta base de données, etc.
00:04:00 :Ils ont ajouté de l'IA dedans, donc c'est sympa quand tu veux faire des requêtes directement.Bon, j'attends encore une ou deux minutes max.Du coup, en attendant, peut-être que je peux vous présenter rapido.
00:04:18 :Donc là, il n'y a vraiment pas grand-chose.En gros, ce que je prévois, c'est qu'on fasse tout depuis le début.Donc l'application Streamlit comme d'habitude, la création du projet Superbaseet la communication entre l'application Streamlit et Superbase, grâce à l'API de Superbase.
00:04:39 :Et du coup, ce qu'on fera, nous, c'est que...Voilà, j'ai pas tout fait, mais en gros, on se fera une page sign-up,donc pour s'inscrire, pour créer un nouvel utilisateur dans la database,et une page login, qui permettra justement de se connecter.
00:04:52 :Et on fera une page Data Explorer, où on va imaginer queon veut gérer notre base de données directement depuis l'interface utilisateurqui est assez sympa sur Superbase Nonata.
00:05:07 :Par exemple, je sais pas, là j'ai pris un exemple d'une liste de coursesgérée par un administrateur.Ça peut paraître un peu con comme exemple, mais il faut imaginer,je sais pas, on pourrait imaginer plein de choses.
00:05:18 :Là, c'est l'exemple que j'ai eu en tête.Donc, vous avez un administrateur, vous gérez une liste d'achats des produits, etc.Et par utilisateur, donc ça veut dire qu'on va avoir un schémaoù on a une table d'authentification, où on a tous les utilisateurs dedansqui peuvent se loguer et s'inscrire.
00:05:38 :Et une table, une database dans laquelle on a des articles,et chaque article appartient à un utilisateur.Et dans la Data Explorer, ça va être tout simple,mais c'est juste pour vous montrer le principe.
00:05:53 :On affichera uniquement les datas du user qui est logué.Après, ce genre de truc, on le fait avec Django,ou un vrai système comme ça de gestion d'utilisateurs,de data, etc.
00:06:17 :Ce que je vais vous montrer là, vous allez dire,ça ressemble à ce qu'on fait automatiquement dans Django.Mais là, l'idée, c'est Streamlit.Comme vous connaissez, j'ai déjà montré plusieurs fois,c'est un framework web qui permet de faire des choses assez rapidement.
00:06:32 :Donc il faut imaginer, vous n'êtes pas forcément développeur Django,vous êtes juste Data Scientist,et puis vous avez de la data à montrer, etc.Vous faites une interface avec Streamlit.
00:06:42 :Mais problème avec Streamlit, c'est que quand vous voulez montrer de la data,il faut toujours créer un bouton dans lequel on upload directement la data.
00:06:59 :Du coup, il faut charger un fichier CSV, etc.Là, on peut se dire, j'ai ma data qui est persistante dans une base de données,et en plus, je peux la maintenir, je peux la gérer, etc.
00:07:10 :C'est un peu l'idée.Non, non, Gabriel, le front n'est pas fait automatiquement,c'est moi qui l'ai développé, le front.C'est ça que tu voulais dire ?
00:07:26 :Non, quand tu disais Streamlit, ça va assez vite, c'est que...Ah oui, oui.J'adore, tu appelles tes files upload, c'est énorme.Ouais, ouais, c'est clair.
00:07:37 :Mais là, du coup, on va aller un petit peu plus loin,où on va se servir d'une base de données avec des datas qui sont persistantesgrâce à Superbase.
00:07:44 :Ça vous va, ça vous dit comme programme ?Ok, alors, let's go.On voit les gens qui commencent à arriver.Je vais enlever ma caméra.
00:08:00 :Ce que je propose...Qu'est-ce qu'on va faire ?Je dirais qu'on fasse d'abord le...Ah oui, et à la fin de ça, si on a le temps,je vous montrerai comment...
00:08:17 :Peut-être qu'on le fera peut-être pas en live,parce que ça peut être long.Comment le déployer grâce à un outil que nous a...La dernière fois, c'était Quentin qui nous avait parlé de Caprover.
00:08:30 :En fait, c'est un outil qui permet de faire du déploiement assez rapidementquand vous avez un nom de domaine qui est déjà en place.C'est assez puissant.
00:08:37 :En plus, vous pouvez...Bonsoir, Sylla.Vous pouvez mettre à jour les modifications.Ça se met automatiquement avec un webhook.C'est hyper puissant, mais ça, on verra à la fin.
00:08:50 :Du coup, ce que je propose, c'est qu'on commence par...On va...Moi, ce que j'aime bien faire...Bon, ça, je vais quitter.En fait, je vais tout repaire.
00:09:01 :Comme ça, vous voyez depuis le début à chaque fois.Parce que l'idée, c'est aussi qu'il y a des gens qui ne connaissent pas.Donc, c'est ça qu'on va faire.
00:09:09 :Une page sign up, login et data explore.Voilà.Et puis, si jamais...Si jamais on veut...Qu'est-ce que j'allais dire ?Si on veut le déployer,j'aime bien créer un projet GitLab directement comme ça.
00:09:29 :Après, je n'ai pas de soucis.Voilà.Donc, je vais sur GitLab.Ouais, Gabriel ?Tu parles de GitLab ?Ouais.Je n'ai jamais utilisé GitLab, en fait.
00:09:49 :Par rapport à GitHub, c'est quoi, en fait ?C'est la même chose.GitLab, c'est une plateforme d'hébergement de codes,de collaboration, etc.Moi, j'utilise GitLab parce que...
00:10:03 :Avant, j'utilisais GitHub,mais maintenant, j'utilise GitLab.Je trouve beaucoup plus...L'interface est plus simple et plus claire, je trouve.Il y a moins de trucs un peu dans tous les sens.
00:10:12 :Et la gestion des clés SSH est beaucoup plus simple aussiavec GitLab que GitHub, pour moi.C'est un concurrent, quoi.C'est un concurrent, en fait.
00:10:21 :Ouais, je pense que c'est...Enfin, à mon avis, c'est pas les mêmes...C'est un concurrent,mais il y en a plein.Donc, tu vois, tu as GitHub, GitLab,tu as GitBucket,GitKraken, je crois.
00:10:32 :Je ne sais pas s'il y en a un.En bref, il y en a plein.OK.Donc, je crée un nouveau repo,un blank project.
00:10:42 :Je vais lui dire...Il y a des gens qui arrivent.Donc, je vais lui dire que je crée un nouveau projet.Ah, pardon.Merci.Je vais me l'avoir dit.
00:10:59 :Là, c'est bon ?Oui.OK.Donc, là, on est dans GitLab.Je crée mon projet GitLab.Donc, on va dire...Streamlit, subbase, docstring.OK.Privé, readme, ça marche.
00:11:23 :Il faut choisir.OK.Ils font des Gitignore automatiques,ou non, c'est à toi de le faire ?Non, c'est à toi de le faire.Je sais que sur GitHub,je crois qu'ils en font un automatique.
00:11:34 :Oui, oui, tu peux.Oui, c'est ce qu'il me semblait.OK.Donc, là, on va aller se créer...On va aller faire le miroir sur notre...
00:11:45 :C'est un peu petit.Sur notre local.OK.Alors, on va aller...T'as arrêté le portage d'écran ?Ben non, je sais pas ce qu'il se passe.
00:12:05 :Putain, fais chier.Là, c'est bon, vous le voyez normalement.J'espère que...N'hésite pas à me le dires'il y a un problème à chaque fois.
00:12:26 :OK.Donc, là, on est là.On va se créer le...On va aller dans l'élémentora.OK.Et puis là, on va aller cloner...Donc, moi, j'ai mis en place une clé SSH.
00:12:38 :Donc, j'utilise le Gitclone avec le SSH.OK.Et on va aller dedans maintenant.Je vais déjà créer mon environnement virtuel.Comme ça, je suis prêt.
00:13:03 :Non, en fait, je vais l'effacer parce que sinon,il va me le foutre.Tant que j'ai pas fait mon Gitignore,je préfère rien mettre.Et on va lancer VS Code dedans.
00:13:16 :OK.Est-ce que...Là, je peux zoomer.Donc, là, moi, j'ai une extension dans VS Codequi me permet de créer des fichiers Gitignore automatiquement.Donc, je fais Command-Shift-P.
00:13:29 :Et là, je fais Add-Gitignore.Et je choisis Python.Et donc, là, il va me créer un Gitignore directement.Voilà.Et là, maintenant, je peux créer mon environnement virtuel.
00:13:42 :N'hésitez pas à me dire si vous avez des questionsou si vous êtes perdus là-dessus.Je le refais à chaque fois, mais c'est bien de le faire.
00:13:50 :Alors, Python m20.Je crée mon environnement virtuel.Et je vais l'activer.Pourquoi pas.OK.Et donc, là, mon fameux clip Install Streamlit.Voilà.On installe.
00:14:20 :OK.Je vais...Donc, en fait, moi, je vais créer déjà une app.Donc, là, je vais commencer par créer mon app Streamlit.OK.Main.py.Donc, ça, vous commencez à avoir l'habitude.
00:14:30 :Import Streamlit.Testé.Voilà.Et donc, là, je suis dans mon app principale.Je vais faire une app multi-pages.Multi-pages.Donc, là, en fait, si jamais je faisais juste st.write.
00:14:48 :Hello world.OK.Streamlit.run.Main.OK.Donc, là, j'ai mon application Streamlit.Voilà.Tranquille.Il n'y a pas trop de trucs nouveaux.Moi, ce que j'aime bien faire, c'est directement...
00:15:13 :J'installe...Je voudrais faire du multi-pages.Et pour faire du multi-pages, j'aime bien installer st.pages.Donc, c'est...Je l'ai eu tout à l'heure.Ouais.Clip install st.pages.
00:15:33 :Voilà.Et en fait, ça me permet...Donc, là, si vous voulez créer une app multi-pages,il suffit de vous créer un dossier pages.Il faut qu'il s'appelle comme ça.
00:15:43 :C'est Streamlit qui implémente cette fonction.Donc, vous créez un dossier qui s'appelle pages.Et là-dedans, vous allez mettre toutes vos pages.Donc, nous, on va mettre une page de login,une page de sign-up.
00:15:59 :OK.Une question.Ouais, vas-y, Gabriel.Est-ce que les pages...Moi, j'ai préparé le projet quand j'ai vu le mentorat.Donc, moi, j'ai créé mes pages.
00:16:10 :J'ai juste créé un dossier pages.Mais je n'ai pas installé st.pages.Ça te fait quoi, en plus, en fait, par rapport à Streamlit ?Je vais te montrer.
00:16:18 :Ça permet de mieux gérer tes affichages de pages.OK.Vas-y.Attendez, je suis en train de bugger.Sign-up.Non, ça ne se crie pas comme ça.
00:16:28 :C'est comme ça.Ouais.Sign-up.OK.On va se faire un dataexplorer.py.Et puis, j'aime bien mettre des numéros.Comme ça, il va me les classer dans l'ordre.
00:16:43 :Login.Celui-là, c'est la troisième.Et ici, renommé.C'est la deuxième.OK.Donc là, normalement, il n'y a pas grand-chose.Ici, il faut aller dans le main.
00:17:06 :Donc là, j'importe.Import from st.pages.Je vais importer page et show pages.Et du coup, il suffit de faire show pages.Donc, c'est une liste d'objets.
00:17:24 :Et c'est des objets pages.Donc en fait, ici, on met le nom de la page.Voilà.On dit l'endroit où est-ce qu'elle est, la page.
00:17:36 :Donc là, je suis bien dans pages.Login.Et puis, voilà.Ensuite, page.OK.Donc là, c'est bon.Et donc déjà, on va peut-être aller voir ce qui se passepour voir que tout a bien fonctionné.
00:17:56 :Voilà.Donc là, on a bien nos pages qu'on a créées.Et du coup, en fait, tu vois, Gabriel,le fait de gérer ici l'affichage des pages,déjà, ça me permet de ne pas afficher le main.py.
00:18:08 :Parce qu'en fait, si tu fais un multi-page...Bonsoir, Moïse.Je ne sais pas.Dis-nous.Mais il me semble que je pense que tu dois avoirdans ton sidebar le main.
00:18:15 :Et ce n'est pas forcément un truc que tu veux.Oui.Et puis même, ça t'écrit directement le login.Enfin, tu vois, c'est...Oui, c'est moche.
00:18:23 :Oui, OK.Je comprends.Donc, on a ici un menu icon.Je ne vois rien avec ce truc-là.Sign up.Et puis là, on va mettre...
00:18:34 :Qu'est-ce qu'on va mettre ?Attendez, je vais zoomer un peu parce que c'est un peu galère.Menu...Menu icon data.Tu peux gérer...En fait, moi, je n'aime pas mettre le...
00:18:49 :En fait, si je mettais ici un emoji dans le nom de la page,il me l'afficherait dans le multi-page.Mais je n'aime pas du tout mettre un emoji dans le nom de mon fichier .py.
00:18:57 :Et donc, du coup, on peut le définir ici.Qu'est-ce que j'aime pas ?Ce n'est pas menu icon.C'est juste icon, je crois.Voilà.Vous voyez ici, il a mis les emojis que je lui ai définissans les avoir mis dans les titres de mon fichier .py.
00:19:27 :Donc là, on commence à avoir une application qui n'est pas trop dégueu.Maintenant, ce qu'on fait,c'est qu'on va aller définir nos portes ST.Dim...
00:19:41 :Ah, regarde, j'ai l'air...Dim consume ST.Et puis, on va écrire le titre de la page à chaque fois.Juste pour...Login.Sign up.Et ici, Data Explorer.
00:20:11 :Ok, je vérifie que tout va bien.Login, Sign up, Data Explorer, voilà.Donc là, on a notre petite application.Et là, ce qu'on va faire maintenant,c'est nos formulaires pour rentrer le user et le mot de passe pour l'authentification.
00:20:30 :Gabriel, tu me dis une erreur sur le main, c'est où ?Non, je ne sais pas.Peut-être que tu n'as pas confiance sur le main.
00:20:37 :J'en ai eu une d'erreur.Quelle genre d'erreur ?C'est Show Pages.Tu as bien installé STPGIS ?Ouais, je l'ai fait, et ça me met en gros...
00:20:49 :Merde.Et c'est sur Trackback, ouais.Qu'est-ce qu'il me dit ?Non optionnel fonction.Alors, voilà.Show Pages takes un positionnel argument, but no where given.
00:21:02 :Tu l'as bien mis comme ça.En fait, Show Pages, c'est dans une fonction que tu lui renseignes une liste.Ah, c'est une liste là-dedans.Mais oui, ok.
00:21:12 :C'est normal que je n'y arrive pas.Ok, donc là, on a notre application et on va aller créer nos formulaires.Donc là, le formulaire, on peut le définir comme ça.
00:21:23 :With st.form.Donc là, c'est notre login form.Et en fait, quand on définit un formulaire,il faut absolument définir un bouton, form submit bouton,pour définir le login.
00:21:38 :Donc là, ça devrait être bon.On va mettre ici quand même une variable.Submit.Et puis, on va dire if.Submit.Submitted.Voilà.Gabriel, tu peux couper ton micro, s'il te plaît ?
00:21:58 :Ah, excuse-moi, oui.Non, t'inquiète.N'hésite pas à prendre la parole, mais c'est juste quand il y a du bruit comme ça.Ok, donc là, on a notre login form.
00:22:08 :Vous voyez juste ce petit morceau de code ici qui permet de créer le login.Moi, ce que j'aime bien faire, c'est le rétrécir et puis le mettre...
00:22:19 :Je vais les mettre sur deux colonnes.C'est un peu plus propre.Ok.Ici, on a...Ok, donc là, on a ce qu'il faut, je pense.
00:23:04 :Voilà.Username, password et login.Donc, on a un formulaire.Vous allez voir que si je rentre une adresse mail,donc...Voilà.Et que si je tape le password, il est bien enmasqué.
00:23:25 :C'est grâce à ce petit type ici.Vous voyez, si je ne le mets pas, j'ai tout en clair.Donc, voilà.Quand vous devez renseigner un password, typiquement, là, c'est un bon exemple.
00:23:38 :Je suis en train de vous faire une présentation, etc.Si je tape un password ici, je ne veux pas que vous le voyez.Du coup, on met, voilà.
00:23:46 :On met le type de password et ça devrait fonctionner.Donc là, il ne va rien se passer parce qu'en fait,on n'a aucun back-end qui gère la database, etc.
00:23:55 :Il y a une inversion dans le mail.Username.C'est quoi ?Attends, d'ailleurs, ici, c'est...Quand tu es rentré, tu as mis G-I-M-L.Un truc comme ça.
00:24:13 :Ah oui, d'accord.Ok, Gamil, ça marche.Mais après, ne t'inquiète pas.Pour l'instant, j'ai juste...En gros, là, vous pouvez vous dire qu'on a juste fait le front-endparce que vous voyez, il n'y a rien derrière.
00:24:24 :Quand le bouton est cliqué, je ne fais rien.Je fais juste submitted.Quoi qu'il arrive, en fait, ici, si je fais login,il va me mettre submitted.
00:24:33 :Donc là, il ne se passe rien.Donc, c'est là qu'on va devoir faire notre petite basede données d'authentification dans Superbase.Donc, allons-y.Allons-y gaiement.
00:24:46 :On va aller sur Superbase.Donc là, j'y suis.J'ai déjà des projets qui existent.Ça, c'est ce que j'avais fait avant.Donc, ici, quand vous allez arriver sur Superbase...
00:25:01 :Donc, c'est gratuit, Superbase,dans un certain degré d'utilisation,mais vous pouvez créer...Je crois que vous avez droit à trois projets gratuitsavec un nombre de requêtes.
00:25:13 :Mais bon, ça, je vous invite à aller regarder en détailles spécifications.Donc, sur votre dashboard de compte,vous faites New Project.Vous choisissez votre organisation.
00:25:23 :Et donc là, vous voyez, il me dit...Ouais.Donc, je suis déjà au-delà du free plan.Donc, je vais supprimer celui que j'ai déjà créé.
00:25:34 :Tout à l'heure.Project Settings, Delay Project.OK.Donc là, normalement, je devrais être disponiblepour faire un nouveau projet.Nouveau projet.Alors, Project Name.Donc, ça, c'est vraiment le nom de votre projet Superbase.
00:26:01 :C'est pas hyper important.C'est pas lui qui va vous permettre d'identifier les choses.Donc, ici, on va l'appelerDashboard Data Explorer.On met un password.
00:26:19 :Donc, moi, je vais mettre un truc un peu bidon.Vous choisissez la localisation dans le mondeoù va être stocké votre projet.Donc, en gros, toutes vos datas, etc.
00:26:38 :La fonctionnalité de Superbase.Ouais.Attends, je finis juste d'écrire le projet.Donc, moi, je choisis ici en Irlande.Et voilà, je crée le projet.Mais toi, tu vas voir Toulouse.
00:26:54 :Excuse-moi, je ne sais pas ton...Je ne vais pas t'appeler Toulouse.Mais en gros, Superbase...Ah oui, c'est Yegor.En fait, Superbase, tu vas voir,ça permet de mettre en place facilementun système d'authentification en lignesans avoir à le coder.
00:27:13 :Donc, c'est un outil no code.Tu peux mettre en place un système d'authentification en ligneet aussi une base de données.Tu peux mettre de la data dedanset après, tu peux aller la retrouver.
00:27:22 :Mais tu vas voir, ça va devenir un peu plus clairà quoi ça sert là, au fur et à mesure qu'on avance.Et si ce n'est pas assez clair, tu poses la question.
00:27:29 :Il n'y a pas de souci.Donc là, on est dans le dashboard de notre project.Et donc là, vous voyez, comme on disait tout à l'heure,la documentation est quand même assez bien faite.
00:27:40 :Vous avez pour tous vos clients,si vous faites du JavaScript, du Flutter, etc., du Swift,la différente doc pour savoir comment on communiqueavec notre projet.
00:27:52 :Donc, c'est assez simple.La différente doc pour savoir comment on communiqueavec notre projet Superbase.Donc là, moi, je vais aller voir sur Python.Je clique sur Doc.
00:28:02 :Et donc là, directement, en fait, ça, c'est le premier trucà aller faire.C'est pour, en gros, créer la connexion entre votre scriptet le projet Superbase.
00:28:13 :Donc ici, je vais le copier.Je vais dézoomer un peu.Et ici, on va se retrouver dans le login.Voilà.Donc, il faut installer, bien entendu,le package Superbase.
00:28:28 :Donc, c'est tout simplement pip install Superbase.OK.Là, il installe parce que, bon, je l'ai fait tout à l'heure.Du coup, j'ai toutes les librairies en cache.
00:28:40 :Ça, je n'en ai pas besoin.Voilà.Une porte OS.OK.Et puis, voilà.Donc, en fait, si je vous montre rapido ce que c'est.Et puis, il me faut aussi pip install python.org.
00:29:02 :Ça, c'est pour stocker les variables d'environnementparce que, voilà, ici, ils les mettent là.Mais moi, je n'aime pas.Je ne mets jamais en hard code les clés, soit les URL.
00:29:14 :Donc, je crée ici un fichier d'environnement.Là, je ne veux pas dans page.Et ici, on va aller créer ce qu'il nous demande.Donc, on a Superbase URL.
00:29:28 :Oh là, qu'est-ce qui s'est passé ?Et j'ai du Superbase Key.OK.Et donc, moi, j'utilise toujours,pour aller importer les variables d'environnement,j'utilise .env.
00:29:52 :Donc, from.env, import load.env.Et ici, je fais juste load.env.Et en fait, il va aller chercher le .env.Donc, ça veut dire qu'en gros, ici,quand je fais OS.environ.get Superbase URL,
00:30:08 :qui va se trouver ici,c'est comme si, pour Python,c'était une variable d'environnementqui était dans mon système,grâce justement à .env.C'est comme ça qu'on fait pour cacher des clés secrètes, etc.
00:30:20 :Parce qu'en fait, ça, le .env,c'est un fichier qui ne va pas être uploadédans mon GitLab, ici.Il ne sera jamais envoyé sur le réseau.
00:30:29 :C'est vraiment un truc secret que vous devez garder,soit sur votre serveur, ou soit en local.Donc, ça, voilà.On a créé la connexion entre notre Superbaseet notre script.
00:30:41 :Ici, il faut quand même que je renseigneles valeurs de Superbase, bien sûr.Donc, ici, pour récupérer votre URL et votre clé,c'est très simple.
00:30:54 :Vous allez dans votre projet.Vous allez ici dans Project Settings.Et vous allez ici dans API.OK.Une fois que vous êtes dans API,là, vous avez l'URL de votre projet.
00:31:10 :Donc, il suffit de le copier.OK.Et on a ici...Où est-ce qu'elle est, la clé ?Là, on a la clé API pour accéder.
00:31:21 :Donc, c'est fait ici.Vous voyez, c'est une clé assez longue.Il n'y a pas de souci avec la sécurité.Voilà.Donc, là, on a effectué la connexion.
00:31:35 :Ici, normalement, tout devrait bien se passer.Je vais aller vérifier que quand je lance,je n'ai pas d'erreur.Voilà.Quand je vais sur Login, je n'ai pas d'erreur.
00:31:45 :Du coup, ça veut dire que la connexion avec Superbase,elle s'est bien passée.Et donc, maintenant, ce que je vais faire,c'est que dans mon interface Superbase,je vais aller ici dans l'onglet Authentication.
00:32:00 :Je vais aller commencer à créer des utilisateurs.Donc, c'est vraiment...Vous pouvez voir ça comme une petite base de donnéesdans lesquelles vous rentrez vos utilisateursau même type que vous le feriez dans Django.
00:32:12 :La table Users qui se crée automatiquementquand vous faites vos migrations.Oui, Gabriel ?Juste, t'as pris du coup l'URL dans Project URL, l'API ?
00:32:21 :Oui.La clé d'API, t'as pris la...Il y en a deux ?La clé d'API...Attends, je vais désigner.Donc, quand tu es dans Settings,API, j'ai pris celle-là, la première.
00:32:34 :À la Publix.OK.Ouais.C'est bon ?Ouais, merci, c'est bon.Moi, je t'en prie.OK.Donc, je retourne dans Authenticationet je vais commencer à me créer des usersparce qu'en fait, ici, vous voyez,j'ai une application,mais je n'ai aucun user enregistré.
00:32:49 :Donc, ça ne va servir à rien.Donc, je vais me créer un utilisateur.Ici.Donc, je fais Add User,Create New User.Et vous pouvez même ici direqu'avant d'inscrire l'utilisateur,on veut une confirmation par email.
00:33:07 :Mais ici, je ne le mets pas.Donc, je mets Autoconfirm User.Ça veut dire que l'utilisateurqui va renseigner son email,il ne va pas recevoir de mail de confirmation.
00:33:15 :Vous pouvez le faire dans un projet en production,mais là, pour le test, on ne le fait pas.Donc là, je rentre l'adresse mail de mon utilisateur.
00:33:25 :Et ici, je rentre mon password.Create User.OK.Donc là, j'ai un nouvel utilisateuret puis je vais en créer un autrejuste pour faire des tests.
00:33:44 :Je vais en créer un autre.Et je vais à chaque fois utiliser le même password.Voilà.Donc là, j'ai une base de donnéesavec des utilisateurs.
00:33:58 :Ils ont un ID uniquequi a été créé automatiquement.Et là, vous voyez,la sign-in, never.Je n'ai jamais authentifié ces usersde quelque manière que ce soit.
00:34:08 :Donc là, c'est vraiment notre backend.C'est la base de données.Tout à l'heure,Yegor, tu posais la question.Là, on a enregistré des utilisateursdans une base de données.
00:34:20 :Si je retourne ici,et que je fais maintenant,au lieu d'écrire juste submitted,on s'en fiche en fait,on va dire...Voilà.C'est comme ça.
00:34:36 :Donc en fait,on va définir un useret on va utiliser Superbase.Le Superbase,c'est un objet qu'on a créé tout à l'heure.Donc là, vous voyez,on avait créé un client Superbase.
00:34:46 :Donc un client, en fait,comme vous,je ne sais pas si vous faitesun petit peu de développement webou du web,mais quand vous communiquezavec un serveur,vous, vous êtes le client.
00:34:58 :Donc ici, nous,on a un client Superbase.Donc c'est un objet,c'est une instance de place.Ici, en l'occurrence,issue de la méthode QA de client.
00:35:11 :Et en gros,c'est un objet un peu spécialqui permet de communiquergrâce à l'API avec Superbase.Donc ici,on fait user égale Superbase,donc notre client,Auth,donc ça,c'est un module Authpour Authentication,un module de Superbase,et la fonction Sign Inavec, ici,email et password,
00:35:32 :sachant que l'email ici,c'est l'email que le useraura renseigné sur mon interface TrimLitet le password qui est ici,c'est celui qui l'aura rentrévia l'interface TrimLit.
00:35:43 :Et donc là,on va mettre,je vais juste mettreun st.write userpour que vous voyiez un peula tronche que ça a.OK,donc là,je fais un rerun,quand même.
00:35:57 :Donc là,je mets mon email,packdevui.gmail.comJe mets mon passwordque j'ai renseigné dans Superbaseet là,je fais login.OK,donc là,j'ai une erreur.
00:36:12 :Qu'est-ce qui ne veut pas ?Ah oui,la méthode,elle ne s'appelle pas comme ça,c'est l'intelligence artificiellequi l'a écrit.Ce n'est pas ma faute,c'est sa faute.
00:36:23 :SignInWithPassword,c'est le nom de la méthode.C'est comme ça.On rerun.Et donc là,je fais login.SignInWithPassword,qu'est-ce qu'il n'aime pas maintenant ?Qu'est-ce qu'il dit ?
00:36:50 :Bon,on va aller voir dans la docce qu'il nous dit.Auth.SignInUser.Superbase.Je vais aller voirce que j'ai fait comme erreur.SignInWithPassword.
00:37:03 :Ah,et pardon,c'est un dictionnaire en faitqu'il faut rentrer.Je l'ai mal renseigné.Vous voyez comme quoi,regarder la doc,c'est parfois beaucoup plus efficaceque faire confiance à l'intelligence artificielle.
00:37:18 :OK.Donc,Email.Email ici.On met l'email qu'on a renseigné.Email.Et puis là,le password.Voilà.On retourne sur notre application.Login.Voilà.Donc là,en fait,mon login,il a marché parce qu'en fait,il est un petit peu spécial,mais il vient de Superbase.
00:37:43 :En gros,j'ai bien récupéré toutes les datas.Et si par exemple ici,je m'étais planté dans l'adresse mail,ben voilà,j'ai eu une erreur.Et pareil,si je me plante dans le mot de passe,j'ai eu une erreur,pareil.
00:37:56 :Donc,ce qu'on peut faire peut-être,c'est mettre un TryExceptpour attraper l'exceptionquand il y a une erreur.On peut mettre un TryUseret puis on va mettre,si ça a marché,on va dire st.write,
00:38:13 :même success.login.Et puis si ça n'a pas marché,except,exception,st.error,machin,voilà.On retourne là-dessus.Rerun.Login.Invalide.Login.Credential.Et du coup,pourquoi il me dit ça ?
00:38:33 :Ah ben oui,parce que du coup,ça,ça ne marche plus.Voilà.Login.Credential.False,parce que j'ai sûrement pas tapéle bon mot de passe.
00:38:44 :Login.Voilà.Login.Voilà.Donc,et ça,ça va marcher avec,si je rentre une autre adresse mailqui n'existe pas du tout,jean.gmail.com,c'est un utilisateur qui n'existe pas,du coup,invalide.
00:39:04 :Login.Credential.Donc ça,déjà,je ne sais pas ce que vous en pensez,mais c'est pas mal,parce qu'en fait,ça permet de créer un système d'authentificationavec base de données automatiquement.
00:39:16 :Et bon,voilà,je n'ai pas codé de base de données,etc.J'ai juste créé un projet sur Superbase.Donc,c'est déjà pas mal.Et donc là,on a créé nos utilisateurs directementvia l'interface de Superbase,mais on peut aussi facilement le fairedepuis notre Streamlit.
00:39:41 :C'est d'ailleurs ça,l'intérêt,c'est que les utilisateurs,en gros,normalement,cette interface-là,c'est le backend,donc les utilisateurs de votre application,ils ne vont pas aller là-dessus.
00:39:51 :C'est vous l'administrateur de ce truc-là,et les gens,ils n'ont pas accès à ça.Donc,on remet un petit peutoute la même chose,et en fait,vous allez voir qu'il y a juste...
00:40:01 :J'ai du mal à écrire sign-up aujourd'hui.Sign-up form.Donc,il faut rentrer l'email,password,submit,et ici,au lieu de mettresign-in with password,je vais tout simplement mettreun sign-up.
00:40:22 :Voilà.Et,ST,user,created.Sinon,on mettra une erreur.Et donc,si on retourne maintenant,ça va marcher.Il faut que je le relance peut-être,parce quej'ai mis des modificationsdans une nouvelle page.
00:40:44 :OK,je relance.Maintenant,si je vais dans sign-up,est-ce que quelqu'unveut bien me passer son adresse mailpour que je l'enregistre,pour que vous voyezque ça fonctionne bien ?
00:41:11 :Sinon,je suis avec une adresse fictive.OK,merci Gabriel.Je vais prendre la première qui est arrivée.Merci Pierre aussi d'avoir proposé.Donc là,on va mettre l'email de Gabrielet puis en password,on va juste mettre un truc bidon.
00:41:29 :Un truc quand mêmedont on va se souvenir.J'ai mis ça en password.Du coup,j'aurais peut-être dû changer.Ce n'est plus du login,c'est du sign-up.
00:41:45 :OK,user created.Et maintenant,si je vais voir sur mon interface,je rafraîchis.Hop,j'ai un nouveau,une nouvelle inscription.Là,vous voyez,on a Gabriel,machin.
00:42:12 :Après,on peut faire tout ce qu'on veut avec.Là,il dit qu'il y a une vérification.Je pense que j'avais mis.En fait,quand on fait une création de userdepuis l'interface,je pense que,Gabriel,tu vas recevoir une demande de confirmationsur ton email.
00:42:32 :Oui.Oui,tu l'as.Mais par contre,ça n'a pas fonctionné.Ça n'a pas fonctionné parce que,en gros,tu vois là,tu as cliqué sur le lien.
00:42:41 :Du coup,ça a fonctionné ici.J'ai eu la validation.Par contre,je n'ai pas défini le URL configuration.Ici,tu vois,c'est l'URL locale.Mais en gros,normalement,si j'avais déployé l'application,j'aurais mis ici l'URL qui correspond au login.
00:42:57 :Oui,d'accord.Super.Et ce qui est vraiment pas mal avec Superbase,c'est que,donc là,si je me retourne dans Authentication,si je vais là,on peut dire Send Magic Link.
00:43:12 :Tu vois,si par exemple,Gabriel,je peux refaire Send Magic Link,là,normalement,c'est par e-mail.Effectivement,j'en ai reçu un.Oui,mais bon,là,c'est pareil,ça ne va pas fonctionner parce que le site URL,il n'est pas bon.
00:43:28 :Mais en gros,tu peux définir iciqu'est-ce qui se passequand on t'envoie un Magic Link,c'est tout ça.Et tu peux même Send Password Recovery,etc.
00:43:38 :Donc ça,typiquement,cette fonction-là,on pourrait très bien,quand vous allez voir ici,Sign In User,si vous allez voir dans la documentation,il y a un endroitoù vous pouvez dire,j'ai perdu mon e-mailet j'ai besoin de le récupérer.
00:43:57 :Je ne sais plus exactement où est-ce que c'est.Mais en gros,vous pouvez,via,je ne sais pas,on pourrait ajouter ici dans l'applicationForgot Password,et il suffirait juste de mettre la fonctionqui correspond àrenouvellement de password,et là,vous recevrez un Magic Linkcomme ce que Gabriel a reçu
00:44:15 :avec ce qu'il faut.Donc ça,c'est pour l'authentification.Et après,en fait,ce qu'on pourrait se dire,c'est que,voilà,on a juste,avec l'authentification,on n'a rien fait.
00:44:31 :On a juste,avec,oui.Là,vous voyez,ce qu'il faudrait faire,en fait,c'est un schémadans lequel on stockele User ID,et puis,est-ce qu'il est logué ou pas.
00:44:54 :Parce qu'en fait,nous,ce qu'on ne veut pas,c'est que Data Explorer,on ne veut pas afficher de datatant qu'il n'y a pas d'utilisateurqui est logué.
00:45:02 :Voilà.Donc,ça,c'est pour le système d'authentification.Est-ce que,du coup,c'est un peu plus clairAprès,on pourrait imaginerune déconnexion,etc.C'est vrai qu'on peut fairetout ce qu'on a l'habitudedans un sitequand il y a une connexion.
00:45:18 :Yégor,du coup,tu avais des questions tout à l'heuresur l'utilité de Supervise.Est-ce que ça devientun peu plus clair pour toi ?Ok.
00:45:25 :Cool.Donc,oui,je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.
00:45:36 :Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Je suis là.Cool.Donc,oui,je suis d'accord avec toi,les rebelles.
00:45:49 :C'est un peu plus intuitifparce quetout est géréde la même manièreavecl'API,mais,voilà,il ne faut pas crachersur Firebase.La dernière foisque je vous ai montré,j'ai complètementpataugé.
00:46:03 :Donc,c'est aussi pour ça.Pour vous,ça paraît peut-être moins clair.Ici,tu as un truc,configuration.Tu as vraimentplein de choses.Tu peux configurerplein de choses.
00:46:14 :Là,en plus,je ne vous ai pas dit,ce qu'on a fait,c'est qu'on a justeautorisé les utilisateursà se connecter viamot de passeet e-mail.
00:46:23 :En fait,ici,quand vous allez dansauthentication,dans configuration,vous pouvez dire,vous pouvez définirtous les providers.Vous savez,des fois,quand vous allez sur un siteet que vous ditessign in with Google,avec Discordou j'en sais rien.
00:46:38 :En fait,tout ça,vous pouvez l'activersur votre site.Si, par exemple,vous dites,vous voulez un sign upwith Google,il faut l'autoriser.Il faut que votre projetsuper basesoit okpour que vousutilisiez ça.
00:46:52 :Donc,vous faites machin.Et après,vous avez des chosesà configurerdans chacunedes applications.Par exemple,YouTube,il faut aller renseignerle client ID,etc.
00:47:04 :Ça,c'est pas mal.Mais,sachez que c'est possibled'authentifiergrâceà des tierces partiessans avoir besoinde renseignerun mot de passe,un utilisateur,etc.
00:47:16 :Donc,ça,c'est pas mal.Et donc là,les rates limit,vous pouvez même envoyerdes SMS,etc.Franchement,je vous invite à aller voirtoken refresh 150requests per hour,vérification.
00:47:29 :Donc,je pense qu'on peut,tu peux largement définir,voilà.Ici,tu peux même définirles différents templatesd'emailparce que tu peux inviterun utilisateur.
00:47:40 :Imaginez si tu créesun nouvel utilisateuret tu peux,ben là,ils sont déjà loguésune fois.Du coup,normalement,il n'y a pas.Mais en fait,quand tu crées un utilisateur,tu peux fairesend invitation.
00:47:53 :Et donc là,tu envoies un mailà la personneque tu veux inviteret il suffirasimplementde la redirigervers ton,ta pagesign up.
00:48:03 :Du coup,il pourra créerson,il pourra créerson,son user.Et du coup,pour répondreexactement à ta question,j'imagine,en fait,il faudrait plutôtle faire à la main,je pense.
00:48:17 :Mais,différence majeure,ben,il n'y a pas de différencemajeure,on ne peut pas dire ça.C'est plutôtdifférence à l'usage.Ça fait,ben,ça fait un peula même chose quand même.
00:48:29 :C'est des bases de données,nos codes,etc.Donc,je dirais,pour répondre à ta question,Yegor,pas de différence majeure,c'est plutôt des différencesuser interface,API,etc.
00:48:41 :Et peut-être aussiles conditionsde projetgratuit.Ce n'est peut-êtrepas tout à fait les mêmes.Maintenant,ce qu'on peut faire,c'est alimenternotre base de donnéespour,vous savez,cette petite page-là,Data Explorer.
00:48:55 :Donc,on peut dire,ici,donc là,pour faire l'authentification,j'avais été ici,dans Authentication.Et donc,là,maintenant,je vais aller dansTable Editor.OK.
00:49:08 :Et donc,je vais créer une nouvelle table.Donc,ma table,elle va s'appelerAchat,qui va être en grosune table des produitsque mes utilisateursvont acheter.
00:49:18 :Vous pouvez définirmachin,il y a vraimentplein de chosesque vous pouvez définir.Et ici,vous définissez les colonnes.Donc là,par défaut,il y a un IDqui va se créerà chaque nouvelle entrée.
00:49:30 :Est-ce qu'on peut utiliserSuperbasesur un projet Django ?Oui,tu pourrais,mais,sans vouloirte vexer,je ne verrai pas l'intérêtde faire ça.
00:49:49 :Parce quela gestion de la base de donnéesdes utilisateurs,etc.,le Django,c'est d'ailleurs pour çaqu'il y a des développeursqui utilisent Django.
00:49:57 :Pour moi,ça n'aurait pas d'intérêt.Après,je peux me tromper.Mais,après,tu pourrais avoirun projet hybrideoù tu as des datasqui sont dansta base de données Djangoet des datassur ton Superbase.
00:50:11 :Mais,voilà,tu vas commencerun peu à mélangerles stacks et tout ça.Ce n'est peut-êtrepas recommandé.Donc honnêtement,moi,je ne le ferai pas,mais c'est possible.
00:50:22 :Donc là,c'est ici.En fait,vous savez,quand vous créezvos modèles,vous définissezvos attributs.Eh bien,ici,c'est comme si vous définissiezvos attributs dans Django.
00:50:34 :Donc là,il y en a par défautqui se créent.Donc l'IDqui est unique.Vous voyez ici,Primary.Created at,avec un timestampet il est automatiquementinitialisé à maintenant.
00:50:45 :Et donc là,on va créerune nouvelle colonne.Donc on va direle produit qu'on achète.On va dire que c'estun texte.Voilà.On va ajouterla quantitéet on va direque c'est un int.
00:50:57 :OK.Et ce qui est pas mal,vous allez voir,et ça,c'est vraiment puissant.Il fautsoyez attentif là-dessusparce que c'estvraiment intéressant.On peut dire,donc là,on va sauvegardernotre première table.
00:51:11 :On va vouloir,on peut fairedes clés étrangèresdepuis cette interface là.Donc on va dire,on va créer une nouvelle colonnequi va s'appelerUser ID.
00:51:22 :Et en fait,ça va nous permettrede lier les datasqui vont être enregistréesdans notre base de donnéesaux utilisateurs.Donc là,je fais Add For NK Relation.
00:51:33 :Et ici,je vais sélectionneroù est-ce que je vais chercherdans mon projet.En fait,je peux aller cherchern'importe oùdans mon projet de...
00:51:43 :Attendez,juste...Attends.T'as écrit le nom de quoipour la For NK ?Je vais voir.Ouais,pardon.Il y a quelqu'unqui a posé une question, non ?
00:51:59 :Ouais,pour la For NK,t'as été dans quoi ?Parce que là,t'as créé ton produit,t'as consacré ton premier modèledans ton univers.Attends,je vais montrerau début.
00:52:09 :Discard.Donc là,j'ai créé ma base de donnéesun petit peu de base,tu vois,avec les datas,etc.Et ici,j'ai juste été dans Plus.
00:52:18 :Après,je pense qu'on pouvait le fairedès le débutquand on créait la table,mais moi,j'ai créé ma base de donnéeset j'ai créé mon produit.
00:52:25 :Donc là,t'as User IDet c'est icique tu voista For NK Relation.C'est bon ?OK.Address 1NKet tu peux ajouter quoi ?
00:52:34 :Ouais,et donc là,en fait,il faut aller sélectionneroù est-ce que tu veuxqu'il y ait ta relation étrangèreet donc là,ici,il faut aller sélectionnerAuthparce qu'en fait,Auth,c'est la base de donnéesqui détient tous les utilisateursqu'on a créé tout à l'heure.
00:52:49 :Donc,je fais çaet là,et quelle table de référence ?Bah,les Users,ici.Et on va lier çaà l'IDet donc,voilà,on veut icicascade,un peu ça,c'est comme quand on fait dans Django,on veut que quand on supprimeun utilisateur,bah,tous les objets
00:53:10 :qui lui sont liés,ils soient supprimés aussi.Donc là,je save,je save,voilà,et il y a un trucqui est super cool,allez voir,donc là,on a notre base de données,où est-ce que c'est déjà ?
00:53:26 :Base,schéma,visualisateur,ouais,vous voyez ici,on a un peu comme undiagramme UMLde notre base de données,vous voyez qu'on a la clé étrangère iciqui nous le montrecomme ça.
00:53:42 :Donc,on a le schéma,visualisateur,voilà,c'est en ça aussi queles différences entre Firebaseet Superbase,c'est ce type depetites featuresoù on peut voir visuellement,en gros,les relations entrenos différentes databases.
00:54:00 :Ok,donc maintenant,on va retournersur notre table,dans table éditeur,achats,et on va aller,bah,commencer à créer de la data.Donc ici,on va dire qu'on va créerune nouvelle ligne,tout ça,le ID va être misau créé automatiquement,pareil pour la date,et donc là,
00:54:20 :le produit,bah,on va diredes pommes,on va diredeux pommes,et le user ID,bah,ici,vous pouvez aller faireselect,record,et là,vous allez avoir la listede vos identifiants,enfin,de vos usersqui sontauthentifiésdans vosdatabase.
00:54:41 :Ici,c'est pas trèsparlantpour savoirqui est qui,donc ce que vous pouvez faire,c'est filter,là,vous allez aller cherchersur l'email,et là,vous mettezequal,et donc là,si par exemple,je cherche,si je me cherche,moi,apply filter,voilà,je sais que ça va être
00:55:02 :cet utilisateur-là,donc je sélectionne,je save,et donc là,j'ai un objet,donc,j'ai des pommesqui sontune liste,un produitqui a étéajoutédans la basede donnéesavec,comme lien externe,le user ID,donc ça,ça va être importantpour pouvoir,après,filtrer les datas
00:55:24 :en fonction du userqui est logué.Je vais rajouterune autre ligne,je vais direque là,ça va êtredes poires,j'en metscinq,et ce coup-ci,on va direque c'est Gabriel,donc Gabriel,où est-ce qu'il esten ID ?
00:55:40 :Je pensequ'il y a un meilleurmoyen de retrouverun utilisateur,maispour l'instant,c'était quoiton adresse mail,Gabriel ?C'étaitGabrieltrouveT-R-O-U-E5Ah,direct,donc,voilà.
00:55:58 :OK,donc là,je sauvegarde,donc là,j'ai deux items,et donc,maintenant,ce que je vais faire,c'est queje vais retournersur mon application,et donc là,un peu comme on a faitavec login et machin,on vatourner tout çaun peu à la voix.
00:56:16 :Voilà.Et maintenant,on va aller récupérerles datas,donc déjà,ce qu'on peut faire,c'est,il va nous falloir du,dans le login,il va falloirqu'on stockequelque partl'IDdu user connecté,donc pour ça,on peut utiliserle session statede Streamlink.
00:56:45 :Donc,on va dire,bon ça,je le fais,mais si vous ne comprenez pas,ne soyez pas surpris,ce n'est pas grave,ce n'est pas l'objet du truc.
00:56:57 :On va direifuser IDC'est comme un cache,non ?Oui, c'est ça.En fait,ça va stockerles datas,parce qu'en fait,comme on fait du multi-page,quand je passed'une page à l'autre,je n'ai pas de,sur Streamlink,c'est comme ça que c'est codé,je n'ai pas de persistance
00:57:29 :de la data.Donc,en gros,si je fais loginet que je récupèrel'user IDet qu'après,je fais sign up,et bien,en fait,je vais perdre l'ID,donc je suis obligéde faire un cache.
00:57:43 :Donc,c'est ce que je fais ici,st.sessionState,et en fait,Streamlink met à dispositionun dictionnaireassez sympa,sessionState,qui permet de,en plus,vous pouvez récupérerfacilement vos datas.
00:57:55 :Donc,avec le sessionState,il faut toujours initialiserla clé du dictionnaireet après,ici,on va aller,si c'est login,on va mettrest.sessionState,on va mettre user IDet on va aller mettrel'ID du user.
00:58:15 :Et maintenant,Data Explorer,donc là,pareil,ifif st.Je vais initialiseret puis,on va direst.Juste pour vérifierque ça marche bien.
00:58:42 :User ID,voilà.Je vais rincer tout ça.Voilà.Donc là,Data Explorer,vous voyez qu'il n'y a pasde user ID dans le cacheparce qu'il n'y a pasde connexion.
00:59:19 :Si je me connectegmail.com,le password,je me log.Donc là,normalement,c'est transparent,mais il m'a stockél'ID du user.Donc là,vous voyez maintenant,quand je vais dansData Explorer,j'ai bien l'ID de mon userqui correspond à l'userque j'ai ici.
00:59:40 :Et vous voyez ici,je n'ai même plus besoinde me reloguer.Il est dans Data Explorer.Et si,par exemple,là,retenez bien,le dernier,c'est 123D4.
00:59:50 :Si je me log avecun autre truc,je me log avecun autre user.Et là,je vais me log.Il m'a bien mis à jourl'ID qui correspondà l'ID du userqui est connecté.
01:00:05 :Donc,notre système d'authentificationavec Streamlit,il fonctionne bien.Et bien,maintenant,après,il n'y a plus qu'àaller chercherla dataqui correspondà mon user.
01:00:17 :Donc,on va simplementfiltrer,en fait.Donc,je n'ai pas besoinde faire ça.On va simplementfiltrer.Et là,on va voir.Donc là,on va filtrer.
01:00:30 :Je vais direifSTpointuser ID.Donc,s'il n'est pas non,on va dire queuser IDégal.Et sinon,on va direvous n'êtes pas connecté.
01:00:52 :OK.Et donc là,on a le ID.Et on va retournervoir dansla documentationde Superbasecomment on faitpour récupérerde la data.
01:01:05 :Il suffit,ici,de fairece qu'ils nous disent.Machin.Response.Donc là,notre table,elle s'appelait comment,déjà ?Je l'avais appeléeachat, non ?
01:01:21 :Je crois que c'était ça.Ouais.Achat.Donc là,en fait,c'était une requête SQL.Rien de plus.Une requête très simpleoù, en fait,on faitfromachatselectétoile.
01:01:41 :OK.Et puis,on va direST pointwhiteresponse.Donc là,en fait,normalement,il va me balancerles data.Ah,il y a un problème.
01:01:54 :Est-ce que je suis logué ?Tiens,je n'aipas de data.Pourquoi je n'ai pasde datalà-dedans ?De quoi ?En fait,normalement ici,pour l'instant,je n'ai pas filtré.
01:02:41 :Donc,il devrait m'affichertout.Tu vois,si je vais dansSQL Editoret quej'affiche ça.Select.Non,si je peux.Select.Non,c'estfromHA.
01:03:03 :Selectétoileet queje run.Là,normalement,tu vois,en fait,quand je fais cette requêteSQL ici.Select étoilefrom HA.Il m'affiche bientoutes les data.
01:03:35 :Et si je voulais justeafficher les datade ce userID là.Je ne peux pasessayer le content.Mais tu as les troisaccounts,non ?
01:03:46 :Et là,tu n'en as plus deux.Tu t'es connectéavec lequel ?Ah,oui.Attends.Oui,je vois ce que tu veux dire.Ouais,mais en fait,non,normalement,quelle que soit la connexion,tu vois ici,quand je faisresponse,je ne fais pas de filtre.
01:04:06 :En gros,là,tu vois,je pourrais ne pas le mettre.Ça donnerait la même chose.Je prends tout.Du coup,il n'y a pas de filtre sur le ID.
01:04:14 :Donc,normalement,il devrait tout me donner.Oui,sur ta table HA,tu as comme deux.Ah,oui,je ne sais pas trop pourquoi.On va essayerdepuis un script Pythondirectement.
01:04:45 :Je ne vais pas passerpar,comme ça,on va pouvoir le manipuler un peu.On va créer tout ça.OK.Et puis là,on va dire,on va essayer d'écrirece qu'on a fait.
01:05:15 :OK.Et donc là,je vais rentreren Python.OK.Je n'ai même pas ça.Response.Excuse-moi,quoi.Je ne vais pasça regarder.Je vaispasça regarder.
01:05:29 :Je vaispasça regarder.Je vaispasça regarder.Je vaispasça regarder.Je vaispasça regarder.Je vaispasça regarder.Pourquoi il me retourne pasdata,c'est bizarre.
01:05:56 :H.A.Je l'ai bien écrit comme ça,ma base de données.Parce que c'est une requête normale.C'est un Firebasequi ne va pas filtrerles fonctionnalités.
01:06:10 :C'est une requête globale.J'ai fait une requête globalesur tout.Je ne sais pas tropce qui se passe.Je vais aller voir vite fait.
01:06:28 :Alors là, c'est étrange.C'est étrange.Peut-être qu'il faut que je rafraîchisse.Il n'a peut-être pas encore.Ça me laisse en trois.En plus, c'est bizarre parce quequand je fais avec,ici j'arrive bien à récupérer.
01:07:39 :Vous voyez ici, user, user ID,tout ça, je n'ai pas eu de soucipour récupérer,donc c'est que la connexion fonctionne bien.Ici, je faisais justeproduits.
01:08:31 :Alors là, ça va être compliqué, je pense.J'essaie de réfléchir un peu.Je ne vois vraiment pasce qui peut poser problème.En fait, la table authentication,je ne m'en sers pas.
01:09:15 :Si je prenais juste ce truc-là,je vais vérifier que l'URL est bonne.La clé est bonne.En plus, c'est le premier truc,c'est pas BaseTable, CountrySelect.
01:09:42 :Est-ce que je peux lister les tables ?Tu me plantes sur la table.Ouais, ouais, normalement,tu peux, tu n'as pas besoin d'être authentifié.Ah, attends.
01:10:21 :Non, parce qu'en fait,c'est toi qui gères l'authentification.C'est toi qui gères l'authentification,donc normalement, il n'y a pas de...Je vais voir si je peux insérer de la data.
01:10:36 :Attention, on va essayer.A priori, non, il n'y a pas de droit à gérer.Non, franchement,il n'y a rien de...Tu peux récupérer facilement,je l'ai déjà fait plusieurs fois.
01:11:13 :En fait, il arrive à se connecter,c'est juste qu'il n'y a pas de...Il ne trouve pas de data.Je vais essayer.Bon, écoutez,je vais essayer de trouver ça de mon côté.
01:11:59 :Je vous avoue qu'à chaque fois que je l'ai fait,je n'ai pas eu de soutien,donc je ne sais pas ce qu'il se passe là-dessus.
01:12:06 :Je fais tout ce qu'il faut.C'est un NodeLogin,c'est moi qui ai géré le NodeLogin.Donc si je log...Ouais, non, je ne sais pas ce qu'il se passe.
01:12:47 :Je vous tiens au courant,je vais réussir à résoudre ce problème.Ce n'est pas grave,mais du coup, vous avez compris le concept.Et après ici, il suffira...
01:12:56 :Donc là, vous voyez, si je vais là,dans...Vous pouvez...Using filter.Si jamais, en fait,vous voulez juste filtrer selon l'ID.Après votre Select,juste ici,pour Equal,et bien, en fait,vous mettez le UserIDégal UserID qu'on a défini.
01:13:34 :Je vais tenter, mais bon,ça ne va pas marcher, je pense.Non, ça ne marche pas.Mais en gros, c'est ça l'idée.Vous filtrez par User.
01:13:55 :Et voilà.Je ne sais pas pourquoi,il ne me sort rien dans ma table,parce que ma table, elle est bien crééeet j'ai bien quelque chose dedans.
01:14:03 :A voir, peut-être qu'il y a une latence.Vous savez, il n'a pas...Vous voyez, je n'ai rien,il n'y a pas de restriction.Donc, schéma en public.
01:14:16 :Normalement, il n'y a aucun souci.Donc, je vous dirai si je trouve le problème.Mais voilà, vous avez compris l'idée.En fait, on peut filtrer.
01:14:28 :Donc là, typiquement,si je suis logué avec ce UserID-là,il va me filtrer uniquement,il va me sortir que ceux du UserLogged.Ça, c'est de la requête SQL classiqueet c'est un schéma classique.
01:14:39 :Mais voilà.Donc, voilà pour Superbase.Je vous dis, je vous envoie sur Discordjuste l'explication de pourquoi ça ne marchait pas.Mais sinon, c'est un peu tout ce que je voulais vous montrer.
01:14:55 :Je vous rassure, ça fonctionne bien.Là, je ne sais pas exactement ce qu'il y a.Il y a juste un petit truc qui ne va pas.
01:15:01 :Mais sinon, ça fonctionne très bien.Si vous avez des questions, allez-y.Oui, Simon.Oui, j'ai une petite question.Alors, pour le coup, peut-être un peu hors-sujet.
01:15:20 :Mais quand tu utilises ton extension Codiumqui s'active,c'est un genre d'intelligence artificiellequi te fait de l'autocompression, c'est ça ?Oui, c'est ça.Et quelle est la différence entre ce produit-làet le produit de Microsoft ?
01:15:43 :Le produit Microsoft ?Ce n'est pas GitHub Copilot, là ?Le Copilot, oui.Ben, le prix.Là, c'est gratuit, l'extension de GA.D'accord.Après, j'imagine que c'est quand même...
01:16:00 :Mais je trouve que vraiment, déjà, il n'est pas mal, en fait, ce truc-là.Après, bon, des fois, ça induit des erreurs,parce qu'il te met des trucs avec une confiance.
01:16:08 :Mais bon, ça, c'est comme tout.Un chat de GPT, il fait pareil.Mais là, ce n'est pas mal.Tu vois, tu peux même dire...Tu peux converser avec lui.
01:16:17 :Tu peux lui dire...White Dockerfile.Et donc, en fait...Je vais mettre White Dockerfile for my Streamlit app.Donc là, il va te le sortir.
01:16:34 :Et tu peux interagir directement.Tu vois, tu peux lui dire Insert code.Donc là, il va me l'insérer.Il me fait n'importe quoi.Donc, ce n'est pas mal, en fait,quand tu peux discuter un peu avec lui.
01:16:44 :Et sinon...Ça, c'est un peu bloqué de dire que tu peux discuter avec lui.C'est quand ils te regrettent.Il y a, eux, ce chat de GPT.
01:16:53 :C'est quoi ?Les trucs, à mon avis, doivent se baser sur...Du coup, pas de chat de GPT, mais...Comment il s'appelle le truc...Le truc par-dessus chat de GPT OpenAI.
01:17:09 :J'imagine.Mais en gros, il suffit juste de créer un compte.Après, ici, dans VS Code,tu gères l'extension.Donc, tu renseignes ton utilisateur, ton mot de passe, etc.
01:17:23 :Et ça, c'est gratuit ?C'est gratuit.Depuis que je l'ai installé, ça fait plusieurs mois.C'est gratuit, oui.D'accord. Sympa.Et oui, en fait, quand tu tapes ici,tu peux même taper...
01:17:36 :Quand tu as une fonction...Def...C'est pas mal.MyFunction.Avec des paramètres.A, B, égal.Hello.Tu vois, tu as un petit truc qui s'affiche au-dessus.
01:17:53 :Explain.Donc, si par exemple,tu as copié-collé une fonction d'internetet que tu ne sais pas comment...Tu dis Explain.Donc, il va te dire ce qu'elle fait, la fonction.
01:18:02 :Tu vois, VS Code define the function.Donc, ça, c'est pas mal.Et tu peux mettre generate docstring.Donc là, il te met ici ce qu'il va mettre.
01:18:11 :Et tu peux dire apply diff.Et donc, quand tu es content, tu fais Accept.Et puis voilà, il te commente ta fonction.Oui, c'est sympa.
01:18:25 :Oui, c'est vraiment bien.Oui, je t'en prie.J'ai la même erreur que toi.Je ne sais pas si tu as vu sur Discord.Je l'ai envoyé.
01:18:37 :Ça fait la même chose.Oui, non, mais je vais regarder.Je l'ai déjà utilisé.Ah, c'était avec Firebase, peut-être.Mais bon, il n'y a pas de raison que ça ne marche pas.
01:18:48 :Ça va marcher, il n'y a pas de souci.Attends, je remonte un peu dans les questions.La question de Sylla, Superbase.Alors, non, pour moi, ce n'est pas un CMS Superbase.
01:19:11 :Enfin, je ne pense pas.Si tu peux, à mon avis, Drupal, je crois que c'est un truc pour gérer du contenu.En fait, je ne suis pas sûr de connaître exactement Sylla,mais en gros, c'est quoi ?
01:19:33 :C'est un peu comme, enfin, pas WordPress, mais tu as des comptes utilisateurset chaque utilisateur, il peut avoir des dossiers, des documents propres à lui, c'est ça ?
01:19:44 :Oui, effectivement.Oui, effectivement, c'est comme ça.En fait, le CMS, comme tu dis, il y a des contenus,mais tu as l'interface pour gérer tout.
01:19:56 :Donc, derrière, tu ne codes pas.Donc, même si tu codes, tu ne codes pas beaucoup.Tout est là.Côté administration, tu peux écrire tes articles, publier,et puis tu as l'administration pour gérer tout ce qui s'affiche pour le client,les utilisateurs, c'est un truc comme ça.
01:20:16 :Comme WordPress.Oui, OK, ça marche.Après, oui, c'est un peu proche comme système,sauf que ce genre de truc, Drupal et tout ça, WordPress,ils n'ont pas des API déjà construites, etc.,
01:20:36 :que tu peux interagir facilement.Tu peux, je pense, mais pas aussi facilement que ce qu'on fait avec Superbase.Et là, c'est vraiment orienté data.Oui, c'est vrai.
01:20:45 :Parce que l'autre, c'est plus ou moins PHP,et puis c'est un langage qui est un peu...Bon, celui-là, je l'avais oublié, mais ça ne valait pas beaucoup.
01:20:54 :Oui, et puis en fait, tu ne peux pas trop imaginerune table avec des données dans un truc comme Drupal ou WordPress.Oui, ça va.
01:21:03 :Mais oui, après, je vois ce que tu veux dire.Ça peut être un peu similaire.Oui.Voilà.D'autres questions ?OK, je t'écoute, Yégor.Vous m'entendez bien ?
01:21:35 :Oui, on t'entend bien.Oui.La question, c'est comment tu fais le lien entre le .env,un fichier .env et l'autre .env ?En fait, je n'arrive pas à voir le cheminement.
01:21:48 :En fait, c'est normal que tu n'arrives pas à voir le cheminementparce que c'est automatique dans l'autre .env.En fait, ce qu'il fait, l'autre .env,
01:21:56 :c'est que tu vois, l'autre .env, là, je l'ai.C'est que tu vois, l'autre .env, là, je l'appelle depuis,voilà, on va partir de login.Donc là, je suis dans login, je fais l'autre .env,
01:22:08 :et en fait, lui, il va itérer sur les dossiers parentstant qu'il ne trouve pas un fichier .env, il va continuer.Donc en gros, dans le dossier pages, il ne trouve pas de .env,
01:22:17 :du coup, il va dans le dossier parents supérieur,et donc là, il va le trouver parce que dans le dossier parents supérieur,il y a un .env, et du coup, il le trouve.
01:22:25 :Après, ce que tu peux faire, c'est que tu peux directement lui renseignerl'endroit où il est.Tu vois, j'aurais pu faire ça.Comme ça, il le trouve directement,et si jamais il est dans un endroit hyper spécifique,parce qu'après, je ne suis pas sûr que l'autre .env,
01:22:40 :il va aller tout seul, sans ton autorisation,parcourir tous tes dossiers.S'il est genre, je ne sais pas, sur ton desktopou dans ton fichier .env,
01:22:48 :du coup, tu peux lui mettre le pass directement, là, comme ça.OK, d'accord.Donc, en fait, il arrive à identifier qu'il parcourt les dossierset il arrive à faire le lien que le .env,
01:23:01 :que tu as défini dans l'arbre, là.C'est bien, d'accord.Et en fait, après, là-dedans,tout ce qu'il va voir là,c'est comme si tu lui avais défini des variables d'environnement.
01:23:12 :Et c'est pour ça que ça marche avecos.environ.get.Ça, c'est ce qu'on fait dans Pythonpour récupérer des variables d'environnement.Donc là, avec la clé,mais ici, ça simule, en fait,des variables d'environnement.
01:23:28 :OK, OK, OK, d'accord.Parfait, merci.Je t'en prie.Si vous n'avez plus d'autres questions,on va s'arrêter.Ah, pardon.Une petite dernière ?Vas-y.OK.
01:23:51 :J'utilise, moi,je n'utilise plus .env.J'utilise ça maintenant, Python environ.Du coup, ma question, c'est,parce que moi, avec Python environ,je ne sais pas si je mets une variable dans mon fichier .env.
01:24:01 :Si tu as une liste qui est attendue dans mon fichier Python,je peux faire, donc, env.list.Boom, et ça te convertit en liste.Toi, du coup,toi, c'est Python, .env.
01:24:12 :Avec .env,tu dois mettre dans le fichier .envsous forme de liste directe,ou ça se passe comment, en fait ?Si j'ai une liste ?
01:24:20 :Oui.Donc, c'est une liste qui est attendue.Mais comment tu peux avoir une listeen variable d'environnement ?Ah, oui.Dans les 7XL Django,ben, tiens, par exemple,des bugs, tu vois,des bugs, si tu veux,du coup, je fais un env.bool,
01:24:38 :boom, et je renvoie la variable dedans,je trouve que c'est ça,ça convertit en Boolean direct.Tu vois ?Ah, oui,je veux dire, c'est interprétable, quoi.
01:24:45 :Oui, voilà, c'est ça.OK.Oui.Ouais.Ah, j'avais eu problème, toi, avec ça.Jusqu'à maintenant, non.J'ai pas eu besoin.Mais j'imagine que c'est un peu plus robuste,ton truc, effectivement,si tu peux interpréter directementle data type.
01:25:02 :Oui, je pense que c'est un peu mieux.J'ai jamais réussi à mettre en prodavec, donc, ça, c'est d'autres envs,avec Django.Toi, ce qui arrive, c'est que,je sais pas comment,alors qu'avec, justement,Python environ,j'ai pas de problème,parce que ça type tout, en fait.
01:25:14 :Ouais, OK, ben, écoute,tant mieux, hein.Mais j'ai pas de,je t'avoue que c'est pas un trucque moi, j'utilise, du coup,je peux pas trop te dire.
01:25:24 :Mais, en fait, ouais, moi,c'est peut-être un peu bourrin,ce que je fais, mais,une ligne égale une variabled'environnement, quoi.Les boules, hein.Après, si, par exemple,si je mettais un,tu peux mettre un,il va comprendre, hein,si tu lui mets un false.
01:25:43 :Dated,égal false.Ça, il comprend, hein,false ou false.OK, d'accord, OK.Ouais, bon, ben,je regarderai cette histoire,pourquoi j'ai pas pu faire d'appel.
01:26:04 :Allô ?Ouais, allô ?Bon, moi, j'avais une question, là,mais bon, c'est pas,c'est pas, c'est pas,c'est pas, c'est pas,bon, j'avais une question, là,mais bon, c'est passur Probezz.
01:26:14 :C'est sur Djengo, en fait,sur l'autocomplétion,par exemple,sur les templates.Bon, j'ai,j'appelle mes donnéesde la vue,j'ai des champs,mais,quand tu viens sur tes templates,les côtés, surtout,rendu HTML,tu veux mettre,tu mets les bracketspour récupérer tes variables.
01:26:38 :L'autocomplétion ne vient pas,je ne sais pas si c'est un généralou bien il faut quelque choseà installer,ou bien, je ne sais pas,comment le faire.
01:26:46 :Ah,c'est dans tes tags,genre quand tu mets tes doublespourcentages ?Voilà,exactement,ouais,ouais,sur mes templates, ouais.Je ne sais plus,Gabriel,je sais que tu es dessusen ce moment,tu as l'autocomplétion, toi,sur tes tags ?
01:27:04 :Non.Non, tu ne les as pas ?Non, et je ne sais passi c'est sur Prologère,non plus.Moi, j'ai PyCharm Community,moi.Ouais,je crois que PyCharm Prole gère,mais je ne sais pas.
01:27:15 :OK, le Pro,le Pro,ça, il faut,OK, OK, OK.Ouais, il faut payer,ouais.Parce que même moi,j'ai le Community.Je ne suis pas sûr,je n'ai jamais essayé.
01:27:25 :Ouais, c'est même pas sûr,mais je crois quetu as une version d'essai,mais oui,tu peux poser la question,excuse-moi,c'est qui qui posaitla question ?
01:27:33 :C'était,je n'ai pas vu,même Vincent,il est derrière.Ouais,je pose la question sur Docstringpour demander si avecla version PyCharm Pro,on a des complicationsdans les...
01:27:43 :Ça marche,ça marche,ouais.Mais du coup,ce n'est pas un problèmecaché de toi,c'est normal,c'est parce qu'en fait,il faut que ton éditeurde code,il est en mémoire,ce n'est pas dans un code Python,du coup,c'est normal,il n'a pas,ce n'est pas un objet,
Aucune occurrence trouvée pour « ».