Session du 02 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
Connecter Streamlit à une API Django
Découverte d’une API Django REST avec données Titanic, requêtes via Postman et Python, puis mise en place d’un projet Streamlit pour consommer cette API.
00:00:00 :J'ai lancé l'enregistrement, donc pour ceux qui regarderont un replay, désolé je n'ai pasenregistré depuis le début mais on n'a rien fait pour l'instant, c'est juste la présentation duprogramme de la session. Ok donc là je vous représente l'API que j'avais mis en place la
00:00:16 :dernière fois, donc là j'arrive sur les URL et en gros ça c'est la data qui est disponible dansmon API. Donc j'avais récupéré des data qui venaient du listing des passagers du Titanic et
00:00:31 :avec malheureusement ceux qui étaient décédés ou non avec un booléen sur BAC. Donc ça c'estl'interface que vous offre l'API Django REST Framework quand vous développez une API avecREST Framework de Django. Donc ça c'est l'interface utilisateur et si par exemple on fait des requêtes
00:00:54 :avec Postman pour voir un peu quel type de data on peut avoir depuis Postman, donc ici si je faisune requête GET et que j'envoie, en fait on obtient un JSON qu'on peut facilement, avec lequel on peutjouer. Donc ça c'est vraiment la requête faite grâce à Postman qui est un logiciel qui permet de
00:01:16 :faire des requêtes API, je ne sais pas si vous voyez bien. Et troisième point, si jamais vousvoulez le faire avec une requête Python et bien c'est possible, je vous montre ici. Voilà donc là
00:01:31 :je mets mon URL, je mets mon payload et ici je vais demander une réponse et donc là si je vaisvoir la réponse et que je fais JSON, voilà j'ai récupéré dans mon terminal les datas depuismon interface, depuis mon API. Salut Simon. Donc voilà un peu la tête de l'API et les
00:01:54 :datas qu'on peut récupérer. Donc vous voyez qu'en gros c'est pour chaque passager on a un dictionnairequi correspond à son ID, donc ça c'est dans l'enregistrement de la base de données. Est-ce
00:02:03 :qu'il a survécu oui ou non, sa classe, son nom, son genre et son âge. Donc ce que je vous proposec'est que on fasse, ça je vais quitter. Ça va c'est clair pour tout le monde pour l'API ?
00:02:20 :On va aller dans, ok et puis on va créer un dossier de session, donc on y est 2023.11, on est le combien, on est le 2. C'est parti, c'est OK.
00:02:50 :OK, bienvenue à ceux qui arrivent.Donc comme d'habitude on va se créer, je vais ouvrir directement dans VS Code,on va se créer l'environnement virtuel comme d'habitude.
00:03:16 :Et on va l'activer. Pour ceux qui nous rejoignent, puisque je ne connais pas,je connais les habitués mais je ne connais pas tout le monde, donc si jamais vous êtes perdu,n'hésitez pas à le dire, il ne faut pas vous laisser submerger en disant je comprends cequ'il se passe et vraiment s'il vous plaît, je vous le demande, n'hésitez pas à dire si vous
00:03:48 :êtes perdu, si vous ne comprenez pas ce qu'on fait, n'ayez pas peur si jamais vous êtescomplètement débutant et vous n'allez pas, il n'y a personne dans la communauté qui va direah fais chier, il y a quelqu'un qui pose une question et tout, on est là pour ça,
00:04:01 :donc n'hésitez pas à poser des questions si vous êtes perdu, il n'y a pas de soucis.Je coupe ma caméra. Donc on crée, on installe Streamlit qui est la bibliothèque qui permet de
00:04:18 :faire les applications web depuis Python, on va voir si ça fonctionne. Du coup Streamlit c'est unframework à part entière, c'est pas lié à Django. Tu vas voir, il y a quelqu'un qui partage son
00:04:52 :écran. Du coup vous avez perdu le partage d'écran ou pas ? Oui, non c'est bon, il n'est pas enprincipal. Il y a quelqu'un qui a essayé de partager son écran. Oui, il y a quelqu'un qui a
00:05:28 :essayé de partager son écran. C'est peut-être une erreur. Et là c'est bon, vous le revoyez enplein écran ? Oui, c'est bon. Donc pour, c'est Quentin qui posait la question, import Streamlit
00:05:44 :as st, en fait tu vas voir, ça c'est vraiment une librairie que j'ai installée en faisantclick install Streamlit, et tu vas voir que ça se présente comme ça. Donc tu fais, une fois que
00:05:55 :t'as installé tu fais Streamlit run le nom du fichier, et en fait ça va te lancer, c'est unpeu au même titre que Django en fait, c'est un serveur de développement, sauf que là c'est pasun serveur de développement, c'est un serveur que tu peux utiliser en production, donc là il n'y a
00:06:10 :rien forcément, mais tu vois ici si tu tapes st write, ça supporte le markdown, donc là on peutmettre le fameux hello world, et donc tu vois qu'il se met à jour au fur et à mesure, tu vois,et ce qui est pas mal, c'est que tu peux créer des petits widgets facilement, donc name égale
00:06:33 :st.input, textinput, what's your name, et tu peux écrire st.write, hello, machin, qu'est-ce qu'il manque ici,il manque ça. Du coup c'est, après je sais pas trop comment ça se passe, mais c'est pas un
00:06:54 :framework où à la fin ça compile et ça fait du javascript ou je sais quoi ? Bah après ce qu'il y aderrière, justement, c'est l'intérêt du framework, c'est de ne pas trop savoir ce qui sepasse, donc tu vois ici, en fait je crois que j'en avais un qui était un peu pareil, à mon avis c'était
00:07:13 :reflex, ça s'appelait. Ouais je connais pas. C'est plutôt très récent, mais c'est vrai que c'était un peu le mêmeprincipe, on pouvait faire des trucs facilement comme ça quoi. Ouais, bah là en fait tu vois,
00:07:25 :là c'est sur un serveur local, mais moi quand j'utilise beaucoup pour n'importe quoi et je déploieça sur un serveur et tu as une adresse IP ou même un DNS, tu peux mettre en place avec un nom de domaineet puis tu as un serveur qui tourne, et en fait ici tu vois, tu as même une adresse de broadcast,
00:07:47 :donc en fait si tu travailles à une entreprise et que tu es sur un réseau local, tu peux balancer çasur le réseau local et n'importe qui peut y accéder depuis cette adresse IP. Ouais, non mais tout ça c'est maîtrisé, c'est bon.
00:07:58 :Ok, donc là on a fait notre petite application Streamlit, pour l'instant on n'a rien fait là, je vais juste, je vais virer ça.Ok, donc on va avancer, je vais peut-être dézoomer un peu parce que je n'ai plus grand chose, requête API, ok, donc là on va aller faire nos requêtes API
00:08:30 :comme on a fait tout à l'heure, donc si je retourne sur, je vais juste récupérer le code là-dessus,on va dire que def data from API, ici on va mettre l'URL, voilà, on va utiliser donc le module request qui permet de faire les requêtes HTTP,ici donc l'URL on va le mettre dans, je vais le mettre dans un fichier de config, c'est plus propre, config.json, et donc là on va mettre l'URL,
00:09:27 :ok, on va importer json, import json, je zoome un peu pour que vous voyez, et donc là on va mettre,Ok, donc en fait là ce qu'on fait,on va ajuster, pour ça j'en ai pas besoin,et on va faire un retourne à responses.
00:10:34 :Ok, en fait on aurait peut-être pu se mettrel'URL en input de l'interface,mais nous on va dire que voilà, on est là,et on va dire if st.button,
00:10:58 :et puis là on va dire get data,on va dire que data ça va être machin,et on va printer la data.Ok, printer la data, super.
00:11:09 :Voilà, donc là on a fait, voyez,on crée un petit bouton, get data,et en fait quand on fait get data,donc ici avec le bouton,en fait on crée un bouton,quand je dis if st.button get data,
00:11:22 :en fait je crée le bouton,et je dis si on a cliqué dessus,bah on va aller importer cette fonction là,et cette fonction là elle fait quoi ?
00:11:29 :Elle va juste faire une requête de l'API,et à quelle URL ?Bah à l'URL qu'on a définie ici dans le config gisem.Et après on va juste l'afficher.
00:11:39 :Donc si je retourne et que je fais get data,ok, il a pas aimé, c'est parce qu'il faut que je le relance.Config gisem, non, c'est parce que j'ai mal écrit.
00:11:56 :Ok, on y retourne.Donc là si je fais get data,qu'est-ce qu'il aime pas ?No connection with your phone.Ah oui, en fait je lui ai pas dit,là je vais juste,il faut que je lui dise ce que je veux, l'URL.
00:12:21 :Voilà, get data, alors.Bon voilà, il m'a mis un petit peu un format,un petit peu particulier,parce qu'en fait j'ai vraiment beaucoup de data,donc vous voyez il m'a tout rassemblé par 100.
00:12:36 :Ouais, merci Ludo, je viens de m'en rendre compte.Donc moi ce que j'aime bien faire,c'est que je vais transformer un petit peu ma datapour qu'elle soit un petit peu plus lisible,donc je vais utiliser Panda.
00:12:47 :Une porte Panda ASPD, ok,il va falloir que je l'installe.Ok, c'est installé.Donc là maintenant la data,je vais dire st.Je vais même la faire directement ici,je vais dire .dataframe.
00:13:13 :En fait on peut directement créer un tableauavec un dataframe depuis une collection JSON.Et donc là je fais st.dataframe,en fait et dans Streamlit il y a directementla possibilité d'afficher un dataframeavec le widget st.dataframe.
00:13:32 :Et donc là je lance.Ok, donc get data,expecting line column, qu'est-ce qu'il veut.C'est bizarre, il a fonctionné toute l'heure.Est-ce que quelqu'un voit le problème ?
00:14:04 :Est-ce que c'est le problème ?C'est la transformation.Ah oui, qu'est-ce que c'est que ce truc ?On est d'accord qu'il a fonctionnéil y a deux minutes.
00:14:29 :Est-ce que j'aurai pas un problèmeavec mon API ? Non, tout est bon.Tiens, tiens.Excusez-moi, j'ai le drone live.Moi c'est tout aussi intéressant.
00:15:10 :Alors, qu'est-ce qu'il n'aime pas ?Je voudrais juste déjà être sûr que mon URL est correcte.En fait c'est le D ici, URL.Ok, on va quitter ça.
00:15:37 :On va essayer de rentrer.J'utilise un interpréteur interactif Pythonpour aller essayer de manipuler directement.Donc on va faire importimport jsonet là on va voir pourquoi il ne veut pas.
00:15:55 :Ok, donc là normalement, data ça fonctionne.Et si je fais dataURLOk, donc normalement ça devrait fonctionnersi on fait ça. Donc pourquoiAh, mais en fait c'est à cause de ça.
00:16:24 :Ouais, en fait j'avais pas de problème au niveaude l'URL, je sais pas pourquoi.Je me suis focalisé là-dessus.Et en fait on va juste faire dataégal, ça marche normalement.
00:16:39 :Donc si je quitte et que je relance mon applicationAh non, il y a un problème là-dessus.HumOn va le voir déjà avecles requestsLe bizarre c'est queon est d'accord que la requête a fonctionnétout à l'heure.
00:17:24 :Et là si je fais çaAh non, j'ai une erreur.Avec Postman si tu requêtes à nouveau l'APIOuais, je pense qu'il y a peut-être un problème avecl'API, ouais effectivementBon c'est pas grave, je vais la relancer, je sais pas ce qu'il m'a faitJe la relance à côté
00:17:45 :Broken pipe, ouaisOuais, en fait c'était tout simplement çaJ'ai un problème avec l'API de l'autre côté, donc attendez je la relanceÇa fiche pas, juste parce qu'il y a l'adresse IPque je voudrais maintenir secrèteAh oui, il n'y a pas vraiment d'adresse IPCD apps lsOh
00:18:18 :J'ai l'impression qu'il y a un dérouléOk, on va refaire la requêteOk, c'est bon, c'est revenuDésolé, désoléAlors maintenant on peut quitterDonc là vous voyez qu'en fait on a vuJe sais pas qui, c'est Quentin ou c'était Simonqui m'a conseillé de relancer la requêteVous voyez qu'ici quand j'ai fait la requête, j'ai eu une erreur 502
00:19:10 :Ça voulait dire que j'avais une erreur côté serveurC'est carrément l'application qui tournait pas, qui renvoyait rien du toutC'était même pas une erreur de connexionC'est juste qu'il n'y avait rien qui tournait derrière l'applicationDonc normalement on peut repartir là-dessusOk, on va relancer notre siteOk, on va relancer notre site
00:19:40 :Ok, donc là vous voyez que maintenanton a notre DataFrameDonc en gros vous voyez que c'est rien de plusque ce qu'on a ici, c'est juste que c'est formatéun peu différemment, donc là en fait typiquementc'est un DataFramequi est réalisé avec PandaEt puis voilà, vous pouvez aller un peu
00:20:04 :Vous pouvez naviguer dans votreDataFrame, vous pouvez même le téléchargercomme un CSV, donc là il va apparaître dans mes téléchargementsen tant que CSV, et puis vous pouvez un petit peu icitrier, donc voilà, c'est quand mêmevous pouvez même demander un fullscreen et puis je croisqu'est-ce qu'on peut faire ici, on peut faire un
00:20:25 :search, donc si par exemple je chercheun loom, vous voyez qu'on trouve un nomSi jamais on cherche Jeanil m'a trouvé quelque chose, voilà, Monsieur Jean BaptisteDonc voilà, c'est pas mal, ça permetde rendre interactif un fichier facilementDonc maintenant, ce qu'il y apour que notre application soit un petit peu plus intéressante
00:20:49 :on va générer un petit peu de statistiquesDonc on va direft.dataframeon va dire data.describepour avoir un petit peu de statsgetdataDonc là vous voyez qu'on a 689lignes, bon c'est peut-être pastrès intéressantVoilà, donc on va se dire plutôt que ça serait biende faire quelques graphiques
00:21:22 :OKEt en fait, le getdata, je vais même pas le mettreEn fait, dès qu'on va lancer l'applicationon va balancer la datadonc on va dire data égalewithdata.dataframe
00:21:43 :ft.dataframeDonc en fait on va créer directement dès qu'on lance l'APIon va même pas mettre de boutonOn va dire qu'on le veut dans un expanderDonc un expander, vous allez voir ce que c'estVoilà, donc on a la dataelle est affichée comme çaon peut ne pas l'afficher si on veut
00:22:07 :et on va se faire quelques petits graphsdonc on va dire importon va faireAlors on va utiliser la bibliothèque Plotlyqui est une bibliothèque de graphique interactifdonc pip installPlotlyOKet puis on va l'installer iciimport Plotlyet puis on va se faire un diagramme camembert
00:22:55 :qui va nous permettre de représenter rapidement la proportiond'hommes, de femmes et de gens qui ont survécu et qui n'ont pas survécuDonc on va se faire unpie chartc'est un diagramme en tartespie chart égalepx, value surviveVoilà, mon assistantil me propose directement quelque chose, je pense que c'est pas mal
00:23:22 :et on va dire st.costu chart, donc là pareilc'est très unique, il fonctionne bien avec Plotlyon peut afficher notre pie chartrelanceOK, data et puisje ne vais pas le mettre dans mon expanderOKa priori j'ai un petit problèmeje ne vais pas le mettre
00:24:07 :alors pourquoi il ne l'affiche pason va regarder directementdans PlotlyPlotly chart piealors avec pxdonc qu'est-ce qu'il me fautOK, normalement ça devrait fonctionneralors pourquoi il ne se tourne rienon va relancer puis on va voiron va essayer avecah oui, non, on va faire avec
00:25:27 :le sexOK, donc je ne comprends pas pourquoiil ne m'affiche pas le pie chartc'est unplateau qui fonctionne du premier coup ce soiron va regarder dans l'aide deScreenitPlotlyalorssinon on va essayeron va essayer un autre type de graph pour voirsi c'est le pie chart qui ne marche pas
00:26:21 :OK, donc c'est le pie chart qui ne marche pasje ne sais pas pourquoi, je ne sais pas ce qu'il amais en gros, là vous voyez qu'on a un graphqui montre rapidement le nombre de personnesqui ont survécu ou non, malheureusement vous voyezqu'on a plus de personnes qui n'ont pas survécu
00:26:42 :on pourrait mettre aussion pourrait coloriserpar genredonc en fait ça permetde rapidement séparer le nombre de personnesqui n'ont pas survécuversusle genredonc là ce qui est intéressantparmi les gens qui ont survécuon a beaucoup plus de femmeset parmi les gens qui n'ont pas survécu
00:27:19 :vous voyez qu'on a beaucoup plus d'hommesdonc ça c'est le genre de graph qu'on peut avoirle genre d'informations qu'on peut avoir rapidement avec des histogrammesvoilà, donc là c'est le justetype d'application qu'on peut faire avec Screenitet avec la data et ce qu'on aimerait faire maintenant c'est
00:27:37 :d'avoir un système d'authentificationdes utilisateurs pour pas que n'importe qui puisse y accéderça va là pour l'application Screenitvous voulez en voir plus ou c'est bon ?
00:27:55 :ok, mercij'avais juste des petites questionsaprès c'est un petit truc à la con, je pense que je trouverais de mon côtétypiquement on peut empêcher par exemple l'export des données en CSVou des trucs comme ça, je vois que comme ça intégrer un petit peuici dans le DataFrame
00:28:21 :oui ça tu peuxc'est dans les options du DataFrameça doit être dans Exportil doit y avoir une option qui permet de dire exportmais bon c'est une bonne questionaprès de toute façon les données comme elles sont affichées dans l'entièretéelles peuvent toujours être récupéréesoui c'est clair
00:28:46 :parce qu'en fait l'affichage comme çade DataFrame c'est depuis la dernière mise à jour de Screenitqui doit aller un petit peu plus interactifet il me semble qu'avant il n'y avait pasl'export comme çade toute façon après c'est quelque chose que je pourrais regarder de mon côté
00:29:06 :oui c'est intéressantoui c'est une bonne questionje regarderai si on peut faire çasi jamais tu regardes aussi de ton côté que tu as l'impôt n'hésite pas à la partagertu avais d'autres questions Quentin ?
00:29:30 :après c'est toujours pareillà je vois que plus tu rajoutes des élémentsils sont tous positionnés en une colonneil y a des possibilités j'imagine d'arranger çaoui bien sûril y a un truc assez simpleavec ça tu vas voir on va faire l'exemple avecle loginmais en gros tu peux dire
00:29:57 :tu peux définir plusieurs colonnesqui sont comme çatu peux dire que tu en veux 3et après tu diswith callsil m'a fichu quelque choseje vais profiter de ce qu'il me diton peut direftle 1je vais me confaire 2 comme çacst.colons
00:30:51 :tu définis 3 comme çaje veux 3 colonnesau lieu de dire col1 col3tu peux donner 3lui il va faire0.250.50.25
00:31:16 :comme ça tu peuxdéfinir un peu les différents0.250.25tu peux définir comme çan'hésite passi tu as d'autres questionssur Streamlitla doc est très bien faitetout ce que tu peux fairemaintenant on va direqu'on ne veut pas que n'importe qui puisse se connecter
00:31:52 :à notre petite application Streamlitqui nous donne des statistiques de notre dataaprès on ne va pas revenir surl'authentification de l'APIça c'est un autre sujetlà on va dire qu'on veut uniquementrestreindre l'accès à notresachant que même si les gens n'arrivent pas à accéder à ça
00:32:17 :ils auront toujours accéder à la data brutemais ici nous on veut juste restreindre l'accès à notre dashboardpour ça ce que je vous propose c'est qu'on utiliseSuperbaseSuperbase c'est un service qui permetdeutiliserje vais me connecter avec monc'est un service qui permet de faire un peu
00:32:44 :de mettre en place des bases de données, nos codesnotamment avec Postgre donc en ce qui concerne Superbasedonc Superbaseje sens mon dashboardon va créer un nouveau projet parce que moi j'en ai unc'était pour une démoon va créerah c'est pas vraiil y a un problème
00:33:17 :il se fout de moi quand mêmeje peux pas créer le nouveau projetc'est quoi ce bordelça tombe un peu à l'eausur ce que je voulais vous montrer, ça fait un peu chierje réfléchis sur ce qu'on peut faire pour l'authentificationje réfléchis sur ce qu'on peut faire pour l'authentification
00:33:41 :bah ouais ouais j'ai vuje réfléchis est-ce que je peux le faire avec Firebasefacilementje peux le faire mais j'ai plus en fait exactementtout ce qu'il fauton va essayeren fait ce que je vais faire là avec Firebasec'est exactement la même chose avec Superbasedésolé pour le problème
00:34:28 :pour un coup c'est pas de ma fauteje peux le dire mais il y a un problème avec Superbaseouais Simontu parlais de base de données NoCodeconcrètement c'est quoi ?
00:34:44 :concrètement c'est quoi ?en fait Postgre c'est pas du NoCodeen fait Postgre c'est pas du NoCodemais là on peut le voirça permet de mettre en place des bases de donnéesavec des outils NoCodepar exemple une interface d'éditionune GUIune graphical user interfacequi permet justement de créer une base de données
00:35:19 :depuis une interface NoCodepar exemple ici je vais faire avec l'authentificationdonc là je vais avoir une base de données de userqui est construitede manière NoCodemais forcément derrière tu as une création SQLde ta base de donnéesen gros là tu voisje vaisquel est l'intérêt par exemple avec un outil comme PgAdmin
00:35:49 :qui pourrait nous servir à créer aussi la base ?l'intérêt c'est queavec PgAdminsi je ne me trompe pas il faut que tu aies ton serveur SQLque tu aies mis en place ton serveur de base de donnéeslà en fait avec Firebasec'est hébergé gratuitementet c'est pas toi qui crée la base de données
00:36:13 :load, downloadon va essayer çac'est dans le DataFrameje saute du copalanemais on va voirnon ça n'a pas l'air d'existerdans le DataFrametu as trouvé ça où Salvatore ?
00:36:55 :c'était dans quel widget ?et donc pour revenir à notreici notre base de donnéesil faut lui dire qu'on autorisece type de mode de connexionon pourrait dire vous savez quand on a des sitesoù on a sign in with Google, Facebook, etc.
00:37:29 :mais ici nous on va juste utiliser adresse email et mot de passedonc on va dire qu'on activelien envoyé par emailnon ça on ne va pas le fairedonc en gros ici on va avoir une base de données d'utilisateurmais c'est dinguel'aplomb avec lequel il donne la réponse
00:37:50 :alors que ça ne fonctionne paspeut-être que je me suis plantémais j'ai fait load, downloadil n'y a pas dans le DataFramepeut-être que c'est une vieille version de Streamlitqui l'a, je ne sais pasdonc là on peut ajouter un petit peudonc là on peut ajouter un utilisateur
00:38:14 :donc on va direok et le mot de passe on va mettre un truc un peu bidonok donc là j'ai un nouvel utilisateuret on va pouvoir utiliser çadésolé je suis un peu avec Firebaseje l'utilise moins souvent maintenant que Supabasedonc il faut juste que je me récupère
00:38:49 :paramètres du projetil me semble que c'eston va utiliser iciah oui je n'ai pas créé mon applicationdésolé là c'est un petit peu décousumais c'est parce que j'ai été perturbé avec le Firebaseen même temps c'est Titanicah magnifiquec'est si catastrophique tu trouves ?
00:40:10 :non, non, je dis ça pour rigolerok donc là on va récupérer la configj'ai juste besoin de çasi vous voulez on pourra revenir plus tard dans le détaillà je voulais juste vous montrer çapour la connexion Firebaseje vais le faireok on est làen fait ici je suis en train de créer la connexion
00:41:00 :entre mon script Pythonet le Firebasevoilà donc là on a notre config Firebaseil va bien sûr falloir que j'installec'est quoi le module déjà ?
00:41:48 :c'est Firebase Admin pour récupérer çac'est installéok c'est bonet donc maintenantc'est pas du tout comme ça que je voulais le fairedésolébon ben j'ai pas le choixil faut le chercherc'est compte de serviceil va falloir que je télécharge mon fichier de tokenvous assure que normalement c'est pas chaotique
00:42:55 :comme çaok donc làj'ai pas le choixj'ai pas le choixj'ai pas le choixj'ai pas le choixj'ai pas le choixok donc làen gros c'est mon fichierqui va me permettre de connectermon crédentielon a perdu le partage j'ai l'impressionouije repartage
00:44:00 :ok donc làsans vraiment avoir besoinimport Firebase Admindonc là j'ai mon crédentielqui vient dede mon compte Firebase pour cette application làet maintenant si je regarde sur la docil me dit pour me connecter il suffit de fairecomme cecije l'ai déjà le crédentiel
00:44:40 :je vais le foutre iciet donc là on va mettre notre crédentielqui estcelui qu'on a téléchargéet voilàest-ce que ça fonctionne maintenantdéjà je vais voir si j'ai pas d'erreurdonc là je suis déjà dans Streamlink maisj'ai pas d'erreur ça m'a l'air bonet donc maintenant je vais pouvoir aller faire mes authentifications
00:45:17 :etc. m'amuser avecl'authentificationouais Simon je t'écouteouais quand tu utilises une base de données comme çac'est la communicationqui se fait sur la base de donnéeselle est chiffrée nativementouais en fait après j'ai pasen détail mais t'as aucuneen fait t'as une API qui te permet
00:45:50 :en fait ici tu vois la connexionetc. c'est l'API de Firebasedonc après ouic'est chiffré parce quec'est un service qui a été racheté par Google donc tout ce qui estaspects sécurité etc. c'est géré par Google
00:46:08 :pour moi c'est encore plusc'est plus safe que de discuter avec une base de donnéesque tu pourrais mettre en placeenfin je dis toi mais c'estune manière de parler maisje me permets d'intervenir mais je suispresque prêt à parier que les requêtes elles sont HTTPS en fait
00:46:30 :là on est pas sur un protocole même si derrière c'est une basede données on est pas sur de la communicationde base de données en terme de protocoleon est sur de l'HTTPS avec du certificat SSL classiqueappartenant à Firebase donc le chiffrement en fait il s'opère à ce niveau là
00:46:45 :d'accordet après tout l'aspectchiffrement de la donnée pure de la base de donnéescôté Firebase bon bah là j'imagine qu'ils feront le nécessaire mais du coupc'est un peu moins grave à ce niveau làmais du coupta question Simon c'était ça pour savoirs'il y avait un
00:47:09 :c'est par exemple si tu as un petit serveur dans ton entrepriseet tu utilises une base de données distanteet que t'as un petit malin qui cherche à renifler ce qui passesur ton réseau et ce qui va voir la dataah oui d'accordbon bah là la question est
00:47:27 :dirait l'autre elle est vite répondueouais bah ok merci Quentin pourl'intervention aussiok donc excusez moi je vais faire un liveparce quec'était pas du tout ce que je voulais vous montrerhumvoilà ça va êtreje vais trop patauger là dans l'authentificationavec Firebase je vous montrerai la prochaine fois avec
00:48:06 :Superbasece qu'on peut faire facilement directement avec Streamlitc'est d'utiliser les secretsmais bon là je vais pas le faire ouais Simon je t'écouteouais ce que j'aimerais bien savoir c'est pour toi quelle est la différenced'utilisation entre une base de donnéesFirebase et Superbasequels sont les pour et les contre
00:48:30 :pour moi il n'y a aucune différence c'est plus une question de préférencesur l'utilisation de la plateforme en fait Firebaset'as des plans gratuitscôté Superbase et Firebasedonc les plans gratuits sont un peu différentsl'interface est un petit peu différente aussiil y en a beaucoup qui disent que Superbase c'est beaucoup mieux
00:48:51 :c'est plus interactif ils ont intégré les requêtes SQLavec de l'assistance à l'intelligence artificielle etcvoilà en fait Superbase c'est un petit peu plus sexyc'est un peu plus en voguemais voilà moi j'ai pas depréférence particulièreen termes de conception de projet pour moi c'est la même chose
00:49:12 :t'as un système d'authentification qui est très bien faitchez les deuxje trouve même que chez Firebase donc je sais pas si vous connaissezles deux mais en fait chez Firebase t'as deux typesde bases de données je sais pas si chez Superbase il y a çatu peux créer une Realtime Database
00:49:30 :chez Firebasedonc qui ressemblerait à la database que tu peux créerchez Superbase par contret'as chez Firebasequi me semble que tu n'as pas chez Superbase mais ça c'est à vérifiertu as la Firestore Database qui est en faitune base de données, documentsque tu peux créer un peu différemment
00:49:54 :qu'une base de données comme tu ferais avec Postgretu sais par colonne avecune structure de table bien définielà tu peux créer une base de données type document donc tu peux balancerun peu tout typede format JSON etc tu peux rajouter etct'es pas embêté par le format en fait
00:50:15 :de ta base tu vois iciproductiontu veux dire qu'il stocke des objets directement ?c'est pas des objets c'est des documents je sais pas si t'es familier avecla base de données type documentmais en gros tu peuxj'attends qu'il crée donc là tu voisje suis en train de créer une base de données Firestore ça marche par collection
00:50:39 :en fait tu dis je crée une collection donc tu vas direje vais mettreune collection de livreset en fait une collection vacontenir des documents donc un documentça va être ton livre donc là tu mets un IDje vais mettre j'irai aléatoirementtu peux mettre le titre donc tu dis que ça va être un string
00:51:03 :tu peux ajouter un champ tu vas direje vais mettre un résumétu vas dire que c'est pareilon va mettre un string et tu vas mettreune date par exemple donc là tu vas dire que c'est un timestampet tu vas lui dire bon je sais pas la date de publication
00:51:21 :voilà on va mettre çatu dis enregistrer donc là en faitt'as ta collectionde livres avec un document et situ vois si c'était une base de données structuréetu serais obligé d'ajouterdes documents qui ont la même structureque ta collection alors qu'icitu vois je pourrais très bien rajouter un autre document
00:51:48 :qui est tout à fait différent avecje sais pas ici je mets l'itemet là ça va êtreoù est-ce qu'il est numberet tu peux mettre je sais rienpublier et tu mets un bouletvaleurtu vois j'ai juste miset donc en fait tu vois au sein d'une même collection
00:52:15 :j'ai des documents qui sontde types différentsaprès ils sont topés sous forme de dictionnaireen gros ça va être du JSONmais tu vois et ça c'est une base de donnéessur laquelle tu peux faire des requêtes au même titrequ'une base de données structuréec'est un peu du NoSQL c'est ça ?
00:52:40 :oui oui ouidonc voilà lec'est dommage j'ai un petit peufoiré le truc avec l'authentificationmais en fait on peutgérer facilement depuis cette interface là nos utilisateursdonc on peut dire rajouter un utilisateur et puis on peut même direréinitialiser le mot de passe etc. on peut envoyer
00:53:05 :des mails aux utilisateurs et après vous pouvez vous en servirpour vous authentifierici depuis l'application Streamlitvoilà donc en gros il fautcréer une connexion avec la databaseon le fera la prochaine foisparce que là j'ai complètement foiré à cause dedu contre temps que j'ai eu avec Superbase
00:53:32 :mais vous verrez que c'est assez simpleet en fait après ce qu'on feraitdans notre application Streamlit on pourrait diredans une sidebar donc on mettraitwithst.sidebar
00:53:47 :on dirait ici on feraitune login formdonc on dirait withst.formlogin formloginloginet puis on mettrait le passwordpasswordok, submitet en gros est-ce que j'ai toujoursvoilà en fait là j'ai un sidebaron retrouverait le nom, le password, on ferait un submitet ici au niveau du submit
00:54:26 :submit bouton et là on géraitl'authentification avec notreen fait il faudrait aller interroger la base de données d'authentificationet dire est-ce que c'est correct ou pas correctet comme ça on pourrait ensuitetout ce qu'on affiche ici ça serait conditionné parest-ce que le login form ici il a donné
00:54:50 :une réponse correcte ou incorrecteest-ce qu'il y a des notions de pagesplusieurs pages ou plusieurs choses comme çades urlstu peux faire ça avec Streamlit, donc ça je le vire, on le fera la prochaine foistu peuxavec Streamlit créer des apps multi pagesen fait il suffit de créer un dossier qui s'appelle
00:55:15 :pages ici, là tu vas aller mettretu vas dire login.pyet puis on va mettredata-explore.pyon va faire ça déjàet en fait si tu fais runmainen fait tu vois t'as une sidebar qui se crée automatiquementlà il m'en met une aussidonc là tu vois t'as les différentes pages
00:56:01 :et elle se met dans l'urldonc là ici à la place de localhost avec ton nom de domainetu pourrais avoir différentes pageset tu peux choisir au nom d'afficher certaines pagestu vois là le mail, en fait moi je ne voudrais pas l'affichercomme starter d'applicationdonc tu vois juste pages
00:56:22 :et je l'ai déjà montré mais avec Streamlit si par exemple icitu veux un peu customiser, tu peuxfaire des css custom etcmais tu peux aussi facilement direje veux modifier mon thème, donc là je veux que labaguette couleur soit rose comme çavoilà ça va être comme ça
00:56:43 :donc là tu fais tes trucs etcsi jamais après tu relances l'applicationil ne va pas prendre en comptece qu'il a mis dans le cache je pensesi je relancenormalement il ne te le conserve pasmais si jamais toi tu veux le conserveril suffit ici d'aller dans
00:57:11 :settings là où tu astu peux faire compile to clipboardet ici tu crées un dossier qui s'appelle.streamlitet dans .streamlit tu crées un fichier
00:57:26 :qui s'appelle config.tomlet là tu copie-colle ce qu'il y a dedans et à chaque démarrageen fait il va aller automatiquement chercher dans .streamlit
00:57:38 :le config .toml et tu pourrasil va te récupérer ta config icide css un petit peu customet c'est ici aussi que tu peux gérerles secrets si jamais là tu faisun fichier qui s'appelle secrets.txt je crois
00:57:59 :je crois que c'est un txtici c'est un peu comme un fichier d'environnementtu peux l'enlever du git statustu le mets dans ton git inner mais en grostu peux aller récupérer les secretsles mots de passe par exemple d'authentification là-dedansavecsecrets en fait il va les mettre automatiquement
00:58:23 :dans une variable st.secretsdonc si par exemple tu avais un secretword égale st.secretsça marche c'est un dictionnairec'est des choses qu'on peut passerdans les variables d'environnement quand on containerise en docker ou ce genre de chosesmoi c'est ce que je fais en fait quand je containerise
00:58:44 :je balance ça comme un fichier .envça marcheet ouiil n'y a aucunsoucis tu peux containeriser facilementl'application et puis tu mets uncommande enfin tu mets un runtu vois ici ce qu'on fait le scrimlet run main.py
00:59:08 :tu le mets dans un run dans ton image dockeret puis t'exposes le portraittu veux et tout ça fonctionne bienbon voilàun petit peu catastrophiquel'authentification que je voulais vous montrerj'espère que vous avez un petit peu capté l'idéeet puis après j'espère que vous avez pu récupérer un petit peu d'info
00:59:32 :du coup je ne sais plus qui c'est qui évoquait la questionde quels sont les avantages entre une place de données hébergée ou nonune des réponses allait que si elle n'est pashébergée par quelqu'un d'autreon aurait pu intervenir pour corriger le problèmetout à faiteffectivement en fait dans SupaBase
00:59:53 :normalement ce qu'on fait c'est qu'on crée un projetet dans un projet on crée une applicationet puis on crée la base de données de userla base de données de data etc mais là je ne sais pasils ont un problème c'est la première fois que je vois ça
01:00:08 :on ne peut pas créer de projetc'est pas grave mais aprèssi jamais tu héberges ta base de donnéessur un VPS et que le fournisseur de VPS il a un problèmeje pense qu'en auto-hébergéon a quand même plus de chance d'avoir des larmesc'est clairj'aurai plus confiance en SupaBase et FireBase
01:00:32 :quand mon RAS vérifiequi héberge ma petite base de donnéesdu coup j'ai une dernière questionon peut gérer des petites bases de données type SQLitedans l'app directement ou pas ?
01:00:47 :oui tu peuxle problèmeenfin non il n'y a aucun soucistu peux te connecteret ça se passe comment les données que tu mets dans les tablesc'est des modèles ?
01:01:05 :soit tu crées ta base de donnéesà côté de SQLite avec ton langage SQLsoit tu utilises un ORMqui te permetl'ORM va transformer tes modèlestes classes Pythonen structure de base de donnéestypiquement c'est ce que fait Djangoil a un ORM pour discuter avec ta base de données
01:01:32 :avec SQLite j'utilise Ponyaprès tu astu fais un fichier de référence qui n'a rien à voiravec Streamlit quelque part ?c'est ça qui est beau avec Streamlitc'est que c'est un framework Pythontout ce que tu ferais avec Python tu peux très bien le faire à côté
01:01:53 :tout ce qui est création, lecture avec la base de donnéestu le fais avec Pythonmoi quand je fais une application Streamlitj'essaye au maximum de séparer le front-enddu back-endsi j'avais une interrogation base de données je le mettrais dans un autre fichieret Streamlit ne ferait que le front-end
01:02:14 :Simon tu as une question ?c'était plus pourrajouter un peu de l'infola dernière fois qu'on avait parlé de Streamlittu nous avais dit que c'étaitvraiment un framework orienté fronton ne peut pas faire avec Streamlit ce qu'on peut faire avec Djangogérer toute la partie back
01:02:38 :et tu nous avais notamment expliqué que tu te servaispas mal de Streamlit pour gérer la partie frontcouplé à Django qui luigérait la partie back avec des APIet je trouvais ça super intéressantje ne sais pas si tu l'avais ditc'est vrai que je ne l'ai pas
01:02:59 :mais c'est ce qu'on a fait icije vais remettre lec'est ce qu'on a fait icic'est une data qui vientde l'API icic'est une API Django REST Frameworkc'est vraiment une discussion avec la base de données de Djangoje ne sais pas si tu étais làou si tu as vu ça au début Simon
01:03:26 :ça c'est une API faite avec Django REST Frameworkqui interroge la base de données Djangoet Streamlit ici fait les requêtes directementà la base de données avec juste cette fonction làtoute simple, on fait une requête à l'URLde l'APImais oui du coup pourpour rebondir sur ce que tu dis Simon
01:03:50 :c'est vrai que c'est souventce que je fais, c'est à direque je ne suis pas du tout développeur frontj'utilise des frameworks comme Streamlitqui permet de faire des petits widgets interactifs etcmais tout ce qui est back-endj'utilise soit les plateformes comme Superbasequand elles fonctionnent ou sinon une base de données
01:04:14 :toute simple sur un MySQL serveurou des choses comme çaOui c'est pour ça que la notionde base de données ou de création de baseou des modèles ça n'a rien à voir à fairecôté front on s'en fout parce que c'est le dialogue par APIc'est pour ça que je comprends
01:04:36 :Ouais ouais c'est çaEn faittypiquement si j'avais une application à développeravecavec Djangoj'irais pas du tout voirSuperbase ou Firebase, j'ai pas besoinparce qu'en fait Django il gère ça très bienc'est à dire il a un ORM, on fait des classeson fait des modèles, c'est justement pour discuter avec la base de données facilement
01:05:11 :je me sers de trucs comme Firebasedans ce type d'applicationquand je dois utiliser Streamlitet que je dois accéder à de la datasoit j'accède à la data depuis une APIsi j'avais utilisé l'application Djangomais si après je veux uniquement utiliser Streamlitaprès j'utiliseraisun système comme Superbase ou Firebase
01:05:39 :pour avoir une base de donnéesadministrable facilementBonne soirée SalvatorVoilà pour la sessionje reste ouvert à toutes questionsou remarquesDites moi si ça vous intéresse que la prochaine foisje fasse cette fameuse authentificationMerci Ludo, bonne soiréecette fameuse authentification avec Superbase ou Firebasesi ça fonctionne
01:06:21 :si je le ferai, désolépour le foiragej'espère que vous avez découvert des trucsou appris des chosesOui c'était bienMerci Quentinc'était toi qui n'est pas venu depuis un anje te rassure, c'est pas si chaotique que d'habitudej'espère que ça t'a encouragéJ'ai pas trouvé ça tant chaotique
01:06:51 :on est tributaires du servicedu service émergémais c'est comme çaça nous a permis de découvrir le frameworket de voir que c'est plutôt relativement simpled'arriver déjà à faire quelque chose de sympathique côté frontc'est très intéressantça a l'air vachement orienté autour de la dataOui en fait ce que je dis c'est que
01:07:18 :c'est développé par et pour les data scientistsMoi d'entrée de jeuj'essaie d'y voir avec une applicationque j'ai, un projet que j'ai et que je n'arrive pas à aller jusqu'au boutà chaque fois je recommencedu coup j'essaie d'y mettre en facec'est vrai que c'est sympa mais je pense que ça ne conviendra pas spécialement
01:07:39 :Franchement on regarde sur la documentationtu as vraiment pas mal de chosespar exemple une simple application de todo listou des choses comme çatu peux le faire avec Screamittu peux avoir des boutons, tu peux cocherc'est un peu plus galère parce queje ne l'ai pas fait pour
01:08:03 :Après c'est la notion de ne pas avoir d'ORM derrièretu es obligéde faire un peu à la mainsoit je fais du Djangosoit du Reflex et à chaque fois ça intégrermais Reflex ça a à voir pour le coupReflex.dev c'est super intéressant comme framework
01:08:24 :je ne connais pasil y a une question de Edouardsi tu pourrais très bien utiliser ça pour faire un blogje pense que tu pourraisvu qu'il y a du markdownsi par exemple je devais faire un blogavec ScreamitFirebase je pourrais l'utiliseralors c'est quoi ça
01:08:51 :c'est un frameworkla galerie elle est éclatéeavant ça ne s'appelait pas une conneils ont débloqué des financementsils investissaient un peu plus sur le trucavec la page elle est faite en Reflexje trouve que c'est la meilleure des galeriesj'ai vu ta main leverje vais répondre
01:09:19 :c'est un peu bizarrec'est un framework piton ?oui c'est full pitonaprès c'est processé ça fait autre chosed'accordd'après ce que tu as vuc'est un peu le même typesi tu vas sur la doctu verras il y a les composantsce que tu pourrais appeler les widgets
01:09:51 :ça va plutôt être dansles composants en baslà je suis dans les composantsc'est des référencesc'est des trucs comme çapar contre tu balances du csstu tapes ton csssinon c'est un truc par défautc'est moins joliça ne te transporte pas du html pursi tu ne mets pas de css
01:10:24 :c'est pas si violenttu as les slidersça m'a l'air plus customisableque Streamlabsau début j'essayais de faire des datatablesavec pandasquand j'avais des motsdes surlignes en couleurdes badgesj'ai pu faire mon propre composantça fait comme un datatableet dedans j'ai mes badgessi jamais tu veux faire des tables
01:11:04 :intéressantes avec Streamlitregarde aussi vers AgreedAgreed ça te permetde faire des dataframesinteractifs rapidementtu peux aller naviguerdans ton dataframe facilementc'est plutôt pas mal faiten plus de Streamlitc'est un autre librairiec'est Agreedmerci pour ce truc làje vais regarderc'est quoi ton background ?
01:11:48 :t'es développeur ?je ne suis pas développeurmais ça fait une quinzaine d'annéesque je bosse dans l'ITj'ai un gros passé système, infrac'est pour ça que tout ce qui estréseau, cyberje le maîtriseet le développementc'est pin-upje fais un peu de pitonmais j'ai aucune maîtrise
01:12:24 :de l'HTML, du CSSc'est cooldes fois je fais des petites sessionssi t'es là de temps en tempsmoi j'ai fleuraprès je le maîtrise aussic'est plus quand il commence à y avoirpas mal de stage dans les buildslà c'est un peu perdutous les aspects
01:12:54 :direction de portmoi j'ai fleur à chaque foisj'imagine que tu maîtrisesle Docker hébergétoi tu t'en fais ?à chaque fois que je déploie des applicationspour des clientsj'essaie de les containerisercomme ça c'est plus maintenablej'utilise Caproverça te gère toute la partiecertificat SSL
01:13:30 :ça s'appelle Caproverc'est A P R O V E Rtu peux même lier ça à tes reposmême s'ils sont privésdès que tu poulesdans ton truc ça va rebuildça c'est un truc que je cherche depuisil faut juste que tu achètesun serveur à la base
01:13:57 :tu déploies Caprovertu as une page internettu peux gérer ce que tu veuxtu as plusieurs modes de déploiementje déploie avec Portainerpour que ça soit plus simplej'ai un NGX Proxy Managerje crée un nouvel hostc'est encore plus simplec'est encore plus simple à l'usage
01:14:27 :en termes de déploiementc'est soit par exempletu as une partie CLI sur ton postetu peux faire les déploiements à la mainsoit on s'y aille avec du GitHubtu as 5 ou 6 méthodes de déploiementça te génère toute la partie certificaten général tu peux rajouter d'autres domaines
01:14:51 :mais sinon il faut du wildcardau niveau DNStu as besoin de modifier du DNStu as un domaine en wildcardqui renvoie tout sur ce serveurtu crées des sous-domainesà chaque fois que tu fais une applicationc'est ce que je fais actuellementj'ai une interfaceet un wildcard sur mon certificat
01:15:21 :et à chaque fois que j'ajoute un sous-domaineil est liéet tu n'as plus besoin de mettre en place le proxy managersi tu veux tu as le live démoCaptain42 le mois passéc'est génialj'en déploie quelques-uns en ce momentils sont refaitsça c'est les appui qui sont déployés
01:15:48 :et ça c'est des imagessoit c'est des genssoit c'est fait exprès pour la démomais c'est des trucs qui sont déployés dessuset quand tu cliques dessustu as les infoset après dans la partiele conteneur HTTPSc'est le 80 à l'intérieur de ton dockersinon on va y accéder en HTTPS
01:16:18 :tout le flux sera en HTTPS valide via les transcriptset ça va être discuté en HTTPSentre ton appui et le caproverdonc tu t'en foustout ça c'est via le NGX proxy manageret après dans AppConfigtu as les variables environnementle port mapping si tu veux autre chose que du HTTP
01:16:42 :si c'est des flux TCPet ça c'est open source caproveril y a un conteneurcomment ça marche déjà ?tu as un script de setupah ouais ?
01:17:00 :tu passes quand même par la partie systemet tu peux mettre ton caprover dessusah oui d'accordet du coup tu mets plus en placeton NGX et tout le bordel ?
01:17:15 :bah écoute c'est vraiment génialje te remercie beaucoup pour la découverteça c'est trop bienet puis ça pousse assez loinparce qu'au final quand tu as des problématiquestu as un bouton en basje pense qu'il est activéet là tu vas voir toutes les perches de ton serveur caprover
01:17:39 :ah ouais putainmoi je mettais un uptime kumaje sais pas si tu connaistu as un autre docker conteneurque je vais rajouter des sondes pour aller monitorer chacune des applicationspar défaut quand tu déploies caproveret donc possiblement il y a un truc de ce stylemais je ne peux pas l'exercer
01:18:03 :c'est le même genretu peux filtrer par applicationtout ce que tu déploys maintenant tu fais avec caproverje fais uniquement avec caproveret je ne m'emmerde pas dans les applisoù nous les devs qui collaborentils se font plus chier à essayer de gérer la partie SSLtu gagnes tellement du temps
01:18:27 :tu es devops toi ?ouais en partieaprès multicasquetteje suis dans une société où on est 25 ou 30et en termes de stabilité ?
01:18:42 :en termes de stabilitéen production des serveurs comme çaj'en ai une idéeet ils ont à peu près 5 ou 6 applications chacunet je n'ai jamais eu pour l'instantà devoir mettre les mains dans le cambouisà me dire je ne vais pas m'en sortiret puis c'est down etc
01:19:06 :et ça fait de 2 ans que ça tournele plus vieux a 2 ansdonc ça vaje n'ai jamais eu besoin de restart des conteneursou des trucs à la voléeoutre le fait que des fois les devs font des trucs de maladeet ça te fait tout planter
01:19:27 :mais c'est plus dans des cas de testles montées de version de l'outil en lui-même ?ouais ça vaj'en ai fait pas beaucoupparce qu'en fait c'est Cactroverqui se charge de l'hébergementah non tu te déploies sur ton VPS je croisouais c'est ça c'est tout toi qui gère le truc
01:19:51 :donc après eux ils font des montées de version sur leur repo githubmais c'est à toi de déciderde le mettre à jour ou pas en lançant un scripten récupérant les sources et en lançant le scriptet les conteneurs c'est lui qui les fait tourner ?
01:20:06 :c'est bien Cactrover ?moi je le définis un peu comme un wrapper de dockertu vois le framework de docker en plusil va les paqueter les trucsalors du coup t'as pas la main directe pour lancer des chosestu peux te connecter en SSH et faire des docker exec
01:20:24 :ou des trucs pour rentrer en terminale dans les conteneursmais sinon il le fait tout pour toiouais mercit'as un catalogue avec des applis préfètesenfin préfètes compatibles directestu peux les faire toi même avec ton docker fileah oui en plus avec ton docker file tu peux directement créer
01:20:45 :tu peux déployer rapidementsi t'en prends un tu verras c'est danssi tu prends n'importe quoi qui est déjà crééah oui t'as les petits liens pour les ouvriret tu vas dans deploymentet là tu vois t'as les logs à l'intérieurdonc là tu vois qu'il y a eu deux
01:21:06 :et en bas tu vois t'as les méthodes pour déployersoit on s'élit soit avec un torbolc'est un espèce de git que tu fais sur ton post que tu uploadsah ouais sinon tu peux directement aller chercher dans le gitmoi chez nous on fait que comme çaavec un webhook et dès que tu commites
01:21:24 :ça rebuild ton acteah mon dieuet ça dure deux secondes tu fais des petits trucs à la condonc en fait il faut que t'aies un repot'aies ton projet et puis t'as ton image dockeraussi dedans qui soit déjà faiteton docker file qui soit déjà fait
01:21:46 :tout à fait c'est ça il faut que t'aies ton docker file dans ton repoaprès tout ce qui est secret tu les mets dans les variables d'environnementdirectement dans Caproveret après c'est un webhookque tu configures sur ton repoparce que là dès que tu mets ton repo
01:22:04 :la branche username password va t'ouvrir à une autre fenêtrec'est celle d'en haut je croist'es juste en haut du repoet là dedans ça c'est un webhookà copier coller dedanset le webhook tu le récupères sur githubtu le mets dedansou l'inverse je sais plus ce que c'est
01:22:28 :ton repo il peut rester privéça c'est magnifiquemerci beaucoupj'ai pas préféré cette session pour rienet puisdu coup désoléje vois qu'il y avait Sylla qui levait la main depuis longtempset j'en suis donc c'était Sylla en premier je croist'as une question ?
01:22:55 :bonsoirc'est pas graveau fait moi c'est Syllaje suis venu tout récemment de region sur Doctrinej'ai suivimonsieur Thibault sur E2meavec ses cours sur Pythonj'ai suivi beaucoup de ses coursmais en général je suis développeur Csharpc'est mon backgroundbeaucoup de Csharp et Javaactuellement on veut se re-rentrer avec du Python
01:23:31 :c'est pour ça que j'ai souscritetmoi je vois un peuc'est tout là où je voisdonc j'aimerais savoir s'il y a des channelsc'est vrai que je suis pas vraiment débutant sur Pythonmais j'ai un projet vraiment live qui marchedonc s'il y a vraiment desdes channels
01:23:58 :où on va vraiment apprendrec'est à dire les notions un peu avancéesc'est à dire surtout le Django ou bienavec les classes d'API pour les restes d'APIet voilàouais en faitles sessions du jeudi soirça n'a pas vocation de tutol'idée c'est pas de montrer quelque chose
01:24:25 :et qu'à la fin de la session vous sachiez le faireet que vous le fassiez tout seulc'est vraiment découvrir des choses ensemblelà tu vois typiquement c'est un bon exemplec'est super importantl'idée des mentorats c'est de faire vivre la communautéje vous montre des choses et parfois comme aujourd'hui
01:24:46 :c'est vous qui me montrez des chosesmais sinon si toi tu veux vraimentt'as les différents channels sur Discordje sais pas si t'es déjàdedansouais j'y suisdonc en gros t'as les différentes discussionsles différents channels mais franchement le mieuxc'est de faire tes propres projetsouais effectivement
01:25:16 :et dès que t'as des questionst'as déjà vu l'endroit sur Doctrinepour poser des questionsouais j'avais posé des questionset donc ça faut pas hésitertu bombardes des questions iciet puis on sera là pour te répondrec'est un peu ce que je te conseillet'as les projets du mois
01:25:43 :c'est une bonne chose pour progressermais vraiment tes projets persoje voudrais me faire une applicationqui permet de gérer mes to-do listdonc tu pourrais direje veux le faire avec Tangoje vais créer une base de données avec des modèlesde les cocher, de les décocherde les programmer
01:26:10 :tu pars de zéro et petit à petit tu construis ton projetet tu peux poser les questions qu'il faut quand t'as besoinok super ça marcheavec plaisiret Jean-Philippe t'avais une question aussije vais passer icitout à l'heure avec Streamlyon pourrait faire le projet de la to-do list
01:26:35 :ce que j'arrive pas à comprendrec'est comment tu fais fonctionnerpar exemple t'as un projet to-do list qu'on a déjà faitavec une classe de tâchesça fonctionne comment avec le Streamly ?
01:26:50 :c'est possible ?bah oui c'est possiblesi par exemple t'avais une classeattend je vais un peu virer tout çatout ça je vais le virer on a pas besoinon va juste faire un petit exempleje réfléchis un peu à comment on pourrait le faireimagine tu fais
01:27:14 :une classeto-doje me fais mon def inittu vas mettrele nombreet puis juste la descriptiontu fais tonself.itemnum et self.description
01:27:41 :et puison va fairetu pourrais peut-être réfléchir en même tempson pourrait se faire unune fonction d'honneur qui fait passer le trucde force à trous si t'avais unouais t'as raison faut le mettre sinon ça n'a pas d'intérêton va mettre statusstatuset en fait il va te falloir quand même un moment
01:28:12 :que tu stockes tes élémentsdonc on peut direself.statuson va le mettrestatuset puis on peut mettreon va définirla petite méthode qui va bien quand tu printsmais ça je sais pas si on en aura besoinretourne fok donc là en gros on a notre objet
01:28:48 :en fait moi ce que je ferais du coupje diraisje pense queje stockerail'instance de classe dans un fichier jsoncomme ça en fait je me ferai un petitun espèce de fichier tu voisje l'appelleraiaprès ça va être un petit peu compliquéet je ferai une fonction
01:29:19 :qui faitet quand tu t'appuies sur le boutonbah ça te crée une nouvelle instancedonc ça faitun truc comme çasachant que icice serait les paramètres que t'as récupéréet aprèsje feraien fait je feraije sérialiseraic'est transformer un objet en jsonc'est sérialiser
01:30:10 :et après je le balancerai dans le tout nouveau jsonet pareil quand je veuxsi jamais tu voulais faire une autre fonctionaffichéebah en fait tu irais lire chaqueobjet dans le jsonet tu le retransformeras en objetmais après ça serait peut-être un peuun canon pour tuer une mouche
01:30:37 :ça sera fait par la classemoi je stockerai directement dans le jsonet je récupérerai directement depuis le jsond'accord okaprès si tu veux vraiment utiliser les classesbah là typiquement il faudrait que tuque tu regardes du côté ORMest-ce que tu vois ce que c'est un ORM ou pas ?
01:31:01 :non j'ai entendu en parler tout à l'heurec'est un modèleun peu comme dans Djangoouais exactement en faitquand tu crées un modèle dans Djangoen gros tu crées une classeet le fait qu'aprèsil intègre ça dans une base de donnéespour créer des nouvelles data ou aller les lire
01:31:28 :c'est ça le rôle de l'ORMen gros quand tu lui disself.descriptionil sait qu'il doit aller ranger la descriptiondans la table Houdouau niveau de la colonne descriptionen gros grossièrement c'est ça que fait l'ORMdonc ce qu'il faudrait que tu fassesc'est que tu te crées un ORM
01:31:55 :tu utilises SQLAlchemy ou Ponyqui te permettent justement de transformer tes objets de classeet aller les foutre dans une databasedonc typiquement tu pourras avoir une database SQLitequi discute avec tes classesgrâce à l'ORM Pony ou SQLAlchemyet tu ferais tes liens comme çaet après tu pourrais aller interroger ta base de données
01:32:19 :depuis Streamlitmais c'est une bonne questionet après on peut essayer de faire çaà la prochaine session de Mentorat si tu veuxou à moins que toi tu veuilles le faire tout seul de ton côtémais si ça t'intéresse on peut regarder ça la prochaine foisouais c'est intéressant
01:32:40 :je trouve que c'est un bon exercice et une bonne questionessayons de faire ça la prochaine foiset essayons de ne pas faire un naufrage comme ce soirça fait partie je crois du jeuouais ça fait partie du liveet je me note pour la prochaine foisaprès on a tout survécu
Aucune occurrence trouvée pour « ».