Session du 04 avril 2024 à 20h00
Développement Web & Frameworks
Veille & Discussions
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
Imports Django et exposition sécurisée des apps
-
Un mot sur les imports.
-
Exposer vos web app local sur internet avec possibilité d'ajouter de l'authentification (Google par exemple) gratuitement, sans nom de domaine.
-
Discussion autour de chatGPT et partage de chacun.
00:00:00 :Ok, ça enregistre.Je vais enlever aussi ma caméra.On peut, si vous voulez, je vais attendre encore un petit peu.Quelqu'un a quelque chose à partager ?
00:00:29 :Avant qu'on commence, une remarque, un truc sur un mentorat de la dernière fois ?Ça va Gabriel ? Chez toi tout se passe bien ?
00:00:50 :Je pensais à un projet rigolo que je voulais partager.Ok, tu m'entends Pierre ?Oui, je t'entends.La semaine dernière, pour faire un petit feedback, j'étais un peu perdu.
00:01:07 :Par la suite, j'ai revu et puis j'ai retravaillé sur ces args et kewargs.Oui, c'est pas mal.Ça sera utile pour la suite.Mais là, je pense que le programme ne correspond plus à mes affinités.
00:01:22 :Donc, j'ai un peu hâte.D'accord, ok.Merci pour ton retour.Après, sur les imports, je proposais d'utiliser un projet Django,parce que c'est dans un projet Django qu'on a souvent des petits trucs d'import.
00:01:42 :Ce que j'utilise dans les imports, ça ne va pas chercher très très loin.Comme ça, vous verrez comment moi j'utilise.Vous allez voir que ce n'est pas du tout évolué ce que je fais.
00:01:53 :Peut-être que parmi vous, il y en a qui utilisent de manière plus évoluée les imports.Mais jusqu'à maintenant, je n'ai pas eu besoin de plus.
00:02:01 :D'accord.Ce qui m'intéressait, c'était le sujet qu'on pouvait mettre nos codes et nos sitessur des plateformes comme Google sans avoir de nom de domaine, même si j'en ai un.
00:02:18 :Ah oui, ça vous verrez que c'est assez puissant.J'avais déjà montré une fois dans un mentorat avec un tunnel Cloudflare,mais là, c'est encore plus évolué.
00:02:35 :Donc, vous allez voir que c'est assez intéressant.Oui, j'ai hâte. Merci.Et Gabriel, tu voulais partager un projet, tu as dit ?Oui, un petit projet rigolo si tu veux le voir.
00:02:48 :Vas-y, tu veux partager ton écran ?Vas-y, j'ai envoyé.Je ne sais pas si...Hop, il a masqué.On voit là ou moyen ?On voit, on voit. Tu peux peut-être zoomer un peu quand même.
00:03:01 :Alors attends, pour ces settings et les zooms, c'est à 150x125 peut-être ?C'est pas mal là.Ouais, ça va, c'est pas mal.Ah, c'est moyen ?
00:03:14 :Un peu plus, un peu plus.Un peu plus ?Ouais, même si j'ai 17 pouces, c'est limite là.Tu vois ce que je vis, Gabriel, tous les jeudis soirs.
00:03:24 :Et là ?Oui, c'est bien là, c'est bien.D'ailleurs, dans celui-là, j'utilise des modèles abstraits.Des modèles abstraits, donc il n'y a rien de créé en base de données.
00:03:34 :Et après, en fait, j'en hérite dans mes modèles.OK.Bon, tiens, l'import, il y en a ici, il y a du relatif et il y a du...
00:03:44 :Du coup, c'est un petit projet.Je vais le mettre sur l'écran du haut.J'ai lancé le serveur.Je ne sais pas si tu te souviens, Péa.
00:03:54 :De quoi ?Je ne sais pas si tu te souviens, je ne sais pas si je t'ai fait tester ça.Si, c'est ton jeu de rôle, ça.
00:04:00 :Ouais, mais en fait, j'ai mis des petits trucs...Ça fait longtemps que...Ouais, t'as mis des choses à jour.Ouais, ouais, ouais.En fait, c'est un projet.
00:04:12 :Bon, là, il n'y a qu'une histoire, on choisit une histoire.Bref, ça explique un petit peu l'histoire.Bon, le front, il n'est pas beau, mais...
00:04:21 :Bon, ça va.Par la suite, il y aura plusieurs personnages disponibles.Avec chacun ses caractéristiques.Il y a la vie, l'attaque, l'extériorité, le charisme, la chance.
00:04:32 :Et tout ça, ça va jouer sur le déroulement des combatset quand on veut fermer des objets dans son inventaire.Après l'attaque, on arrive là, on fait jouer.
00:04:42 :Donc, ça marche par branches.Et donc, en gros, dans les branches,c'est un bout d'histoire, en fait.Et dans chaque branche, il y a soit un ennemi,soit on peut passer à la prochaine, soit il y a une énigme.
00:04:55 :Et on est équipé par une arme par défaut.Ouais.C'est le début de l'histoire.J'ai un inventaire avec les consommables.Ouais, et toi, c'est où ?
00:05:04 :Je n'ai pas d'arme dans l'inventaire pour l'instant.Et j'ai mes sous qui sont ici.Et je peux abandonner la partie, bien sûr.OK.Et en cours de route, ça sauvegarde la partie.
00:05:13 :Et dès qu'il se passe un événement,j'ai, on va dire, une carte ici qui s'affiche,et qui explique ce qui se passe.Je vais juste faire une branche comme ça.
00:05:23 :Les combats, les ennemis, donc pareil,vie, attaque, tuer, machin.Bon.On peut RPG.Voilà, ça s'affiche ici, les gars.Et par exemple, je ne sais pas si je peux tuer...
00:05:37 :Je pense que je vais le battre sans difficulté.Ouais, il n'y a pas de difficulté.Imaginons, on bat l'ennemi.Boom.On gagne des objets encore.
00:05:44 :OK.Voilà, ton inventaire, il grossit.Avec les valeurs, c'est en fonction de la chance.Je continue.Hop.Donc j'ai un...Je peux aller voir un marchand entre chaque branche.
00:05:55 :Et je peux lui acheter des objets.Voilà.Avec mon argent.Là, bon, je change ça.Ça fait un inventaire.Il reste 8.Si je veux racheter, c'est mort.
00:06:03 :On n'a pas assez d'argent.OK.Voilà.Et après, on change de branche.Et il y a des énigmes.Et les énigmes...Voilà.C'est nouveau, ça.
00:06:14 :Il n'y avait pas les énigmes avant.Non, il n'y avait pas.Et les énigmes permettent de gagner une arme assez puissante.Et les énigmes, tu les as stockées...
00:06:22 :Elles sont stockées comment ?C'est dans une base de données que tu peux remplir ?C'est un modèle.Pareil.Il n'y a que l'admin qui peut la remplir, j'imagine ?
00:06:32 :Oui.Oui, oui.Euh...OK.Et donc, boom.Et là, je l'ai gagnée parce que j'étais le bon frère.Elle est ici, dans les armes.Je clique dessus, je suis équipé.
00:06:44 :Enfin, voilà.Puis après, dans l'histoire, on peut choisir différentes brancheset ça va modifier le cours de l'histoire.C'est top.Ouais.Pour l'instant, j'en suis assez content.
00:06:55 :Mais je l'ai commencé quand je débutais.Et pendant six mois, je n'ai rien fait.Le code, j'ai tellement affreux que j'ai mis plein de choses à plat,à réorganiser et tout.
00:07:04 :C'est beaucoup mieux qu'avant.Par exemple, quand tu attaques avec une épée de feu,tu peux infliger des dégâts de feu.Tous les tours, l'ennemi aura des dégâts de feu en plus.
00:07:14 :Tu auras un pompier qui va se déclémenter.Après, il n'aura plus le statut de feu.Et comment tu fais pour sauvegarder ta partie en cours de route ?
00:07:23 :Je vais te montrer.En fait, ça s'appelle sauvegarde d'histoire.C'est quoi ? C'est un modèle de sauvegarde d'histoire ?Oui, c'est ça.Tu as l'histoire, la branche actuelle, ton personnage.
00:07:38 :Et en fait, les branches ont des digits.Elle, c'est le digit 4.Et donc, si j'arrive dans la branche digit 4,dans sauvegarde d'histoire, j'aurai ici le digit qui sera à 4.
00:07:58 :Et quand je reviendrai dans le jeu, je reprendrai dans la branche 4.D'accord.C'est top.J'ai vu que quand tu reviens sur ton front,administration avancée,c'est parce que tu es logé en tant qu'admin que tu as cette option-là ?
00:08:18 :Oui.Bien sûr, je me suis bien embêté à faire des annonces customisées.Je vois que tu as des listes display pour ton interface admin aussi.
00:08:35 :Là ?Oui.C'est bien ça.C'est custom.Quand j'aurai plusieurs histoires,j'aurai juste à sélectionner une histoire que je veux.Oui, super.Voilà.Bravo.Merci.
00:08:51 :Donc ça, c'est une version...Je crois que tu l'avais mis sur Python Anywhere à un moment, non ?Oui, une version...Au début, il n'y avait pas grand-chose.
00:09:04 :C'était juste du combat.Mais là, il y a plus de choses.Il y a des énigmes.On peut infliger des coups critiques selon la chance qu'on a,selon l'index de qualité.
00:09:12 :J'ai mis en place...Bref, il y a un gros modèle.Il y a différentes fonctions avec des modèles de combat.D'accord.J'ai une classe battle.
00:09:26 :Et même ma classe battle va gérer mon loot,les statuts qu'on peut infliger,le combat en lui-même.Donc il y a pas mal de choses.
00:09:36 :Et après, même dans mes modèles eux-mêmes,dans les modèles eux-mêmes,j'ai pas mal de méthodes,des méthodes de classe pour éviter d'avoir du surchargé.Voilà.
00:09:50 :Donc là, j'ai l'attaque,les statuts qu'on peut infliger justement,les attaques...Enfin voilà, il y a plein de choses.Même pour les ennemis, ainsi de suite.
00:10:00 :Bah super, franchement, c'est bien.Oui, jouer en ligne à ton jeu, Gabriel ?Je l'ai pas...Enfin, en ligne, c'est-à-dire pour le tester,ou jouer avec d'autres personnes ?
00:10:11 :Bah, pour le tester.Non, je l'ai pas...Je l'ai pas encore mis en prod.J'ai envie de le mettre en prod.Mais t'avais pas une version, quand même, initiale, là, sur...
00:10:20 :Je l'ai supprimé, putain, je l'ai supprimé,je l'ai supprimé, mais...Mais, qu'est-ce que j'allais dire ?J'aimerais bien la mettre bientôt en prod,ça serait cool.
00:10:29 :Tu nous tiens au courant ?Ouais, y a pas de problème,mais j'aimerais bien mettre une histoire en plus,genre, différente, tu vois,genre un monde post-apocalyptique,assez moderne,et avec, genre, des objets différents, quoi,des armes de tout pousser,des dégâts de salivement,je sais pas, je le vois, je le vois.
00:10:45 :Avec différents PNJs,ce que j'ai prévenu avec le JNJ.Donc, pour l'instant, j'étais un marchand.Mais je vais voir pour...si je peux gérer les autres PNJs.
00:10:54 :Donc, voilà.Super.Ben, franchement, bravo,c'est...c'est un beau projet.Pour ceux qui...qui n'ont pas fait de Django,ou ceux qui débutent la formation, etc.,
00:11:08 :ben, vous voyez...ce vers quoi vous pouvez...ce que vous pouvez arriver à faire,combien, Gabriel ?Un an, à peu près ?Ce projet-là, je l'ai commencé...
00:11:21 :j'avais déjà un bon truc,ça faisait que 6 mois que je faisais du Django, je crois.Un an, moins, 4, 5, 4 mois.Et après, je bossais tous les soirs aussi, quasiment.
00:11:30 :Donc...Je suis un peu acharné dessus, mais...mon constructeur de forum,je l'ai fait au bout de...ouais, un mois, 9 mois, 10 mois.Et il est en ligne, ton constructeur de forum ?
00:11:42 :Ouais, ouais, bien sûr, il est...il est en ligne.Je te file le lien tout de suite.Je partage plutôt en écho, mais sinon...Vas-y, vas-y, partage.
00:11:53 :Je crois qu'on l'avait déjà vu,mais ça peut...tu peux le repartager.Je l'ai mis en ligne, pas sérieusement,c'est juste pour faire tester, justement,quand on fera une...
00:12:03 :ceux qui, des fois, bossent sur les mentorats,sur les projets,donc au moins, ils sont en ligne,pour le tester.Bon, le fond, c'est comme d'hab...
00:12:10 :T'as acheté un nom de domaine,pyforum.fr ?Ouais, ouais.Et...Là, on peut...Chaque personne...Enfin, tout le monde peut créer son forum,tant qu'il a un compte.
00:12:23 :Pour créer son forum, il faut un nom,choisir un thème, une description,un logo, c'est pas obligatoire.Et boum, en fait, ça va créer...Bon, je vais faire un...
00:12:31 :test.string.Thème, je sais pas, on va mettre...Description, c'est...sur Python.Je veux pas de logo.Et là, ça bug,je suis dégoûté.Non, c'est bon.
00:12:47 :Et en fait, ça crée donc un...un forum,avec une URL...dédiée, entre guillemets.OK.Voilà.Et...Celui qui crée le forum,il a le statut de forum master.
00:13:01 :Donc...Là, il y a une catégorie testqui s'est créée au début.Forcément, avec...un message test,pour voir à quoi ça ressemble.On peut répondre...
00:13:11 :Donc...Si j'ai une réponse...Tac.Je peux répondre dans les sujets.Voilà.En fait, je me suis inspiréénormément de PHP VV.On va aller sur le...
00:13:25 :Juste...voir les forums,si je suis annulé,le forum support.On va voir la liste des membres.Bon, il y a Thibaultqui s'inscrit dessus pour tester,déjà.
00:13:34 :Moi, en tant qu'admin,je peux cliquer sur Thibault.Et...Bon, il a des badges.Forme...Il a des badges.Il y a un badge, c'est bizarre.
00:13:45 :Je ne devrais pas l'avoir, celui-là.Je vais regarder ce que c'est que ce badge.Hum...Il est actif.Et en fait, là, si je clique,il est désactivé.
00:13:54 :Et donc, il ne peut plus rien fairesur le forum à part lire.Ok.Voilà.Je peux lui envoyer un message privé.Donc là, je fais...
00:14:02 :Conversation au sujet.Test.Hop.Et voilà.Donc, initié par Gablygabavec Dockstring.Et là, on a une conversationqui s'est ouverte avec Thibaultdans la messagerie privée.
00:14:13 :D'accord.Donc ça, ça ne passe paspar e-mail ou quoi ?C'est vraimentla messagerie privéeque tu as mis en place ?Oui, je l'ai mis en placevraiment dans la base des données.
00:14:21 :Voilà.On peut gérer son profil.Quand on est admin d'un forum,on peut avoir une vued'ensemble du forum.Ouais.On peut utiliser un message.
00:14:31 :On peut gérer son forum.Donc...Bon, la liste des membresqui apparaît.On peut désactiver toujours iciavec un moteur de recherche.Et la construction du forum,c'est ici.
00:14:44 :Donc...Élie, s'il te plaît.Donc là, je peux rajouterune catégorie, je ne sais pas.Genre...Un petit message.Donc...J'ai déjà un forum en AX1.
00:14:56 :Donc, on veut qu'il soitaprès, donc en AX2.Et je vais mettre...Je crois qu'il tombe.Hop.Je valide.Et là, ici, j'ai biença qui a été créé.
00:15:09 :Et si je vais dansdans l'accueil du forum,j'ai bien une nouvellecatégorie qui est apparue.OK.Là où je peux allercréer des suites de discussion.
00:15:18 :C'est vraiment super aussi, ça.Qu'est-ce que j'avais comme...C'est un truc...Donc là, tu l'as hébergésur Python Anywhere aussi, celui-là ?Ouais, ouais.Avec Postgres ou MySQLen database ?
00:15:34 :MySQL, parce que Postgreset MySQL, c'est coûte chère.Tu vas avoir du postgreSQL.Ouais.Et je ne sais pas siça change grand-chose.Je ne suis pas un pro, ça.
00:15:42 :Il y a des différencesentre MySQL et PostgreSQL.En fait, en termes delangage SQL, ça ne change pas.Ouais, pour moi, c'est...Le langage est le même.
00:15:50 :Il y a quelques différencesprès sur commenttes attributs sont nommésdans tes colonnes.Et après, sinon,ce n'est pas tout à faitle même gestionnairede base de donnéespour se créer MySQL.
00:16:02 :Ouais, ouais.Franchement,je ne sais pas.J'ai jamais eu l'occasionde tester vraimentsur un numéro de PostgreSQL.Je ne fais que avec MySQL.Voilà, du coup.
00:16:11 :Félicitations.Très, très propre.Et tout ça,tu les mets dans ton portfolio ?Ouais, c'est ça.Je les metsdans mon site webet dans mes projets, ici.
00:16:23 :Voilà.Et ça,je me suis faitune administrationbien plus chère.Je me suis faitune administrationbien plus chère.Avec Wagtail.Ouais.Avec Wagtail.
00:16:38 :Du coup, j'éditetous mes...Quand j'écris un article,tu vois,je vais ajouter mon...Je crée un article.J'ai vraiment mon éditeurperso avec...Je choisis ce que je veuxcomme catégorie.
00:16:54 :J'ai l'éditeur riche.Je choisis ce que je veuxmettre en tête.Enfin, tu vois,c'est vraiment sympa.Moi, j'ai testé Wagtail.Je ne suis pas fan.
00:17:01 :Je trouve queça surchargebeaucoup.Enfin, après,forcément,c'est là pour surcharger.Mais,tu vois,tout ce qui est éditiond'articles, etc.,j'avais trouvédes petites bibliosqui me permettaientde, je ne sais pas,ajouter une imagefacilement, etc.
00:17:17 :Après,je n'ai pas eu besoinde gérerma bibliothèque d'imagesautrement,tu vois.CK Editor,par exemple,c'est pas mal.Il y a la dernière versionqui est sortie,je l'ai testée.
00:17:29 :Moi, c'est ça,CK Editor.Avec CK Editor,c'est un peu galèred'ajouter une image,par exemple,depuis CK Editor.Et j'avais rajoutéune petite librairie JSet ça marchait très bien.
00:17:39 :Eh bien,là,CK Editor,maintenant,il t'oblige un peuà passer à la nouvelle version.Elle est vraiment cool.Je l'ai mise sur un projetpour tester.
00:17:48 :C'est vraiment sympa.Ah oui ?Mais tu peux facilementuploader des imageset tout ça ?Oui.Maintenant,c'est fait d'office.Tu n'as plus besoind'installer le uploaderen plus.
00:17:59 :D'accord.Je n'ai plus besoind'uploader.Super.Je suis vraiment d'accordavec ça.C'est vrai que,des fois,ça surcharge.Au niveau des migrations,je suis obligéd'exclure les migrationsde mon RepoGit,parce que ça fout la merdesi j'essaie d'appliquermes migrationsque j'ai en localsur le serveur en prod.
00:18:17 :Oui.Bon,j'ai vu que c'était courant.Oui,c'est normal.Non,parce qu'il y en aqui sont des mecsde migrationqui sontdes mecsde migrationen localqui les mettentdans les RepoGitet qui ne font pasde migrationsen production.
00:18:36 :Ah,oui.Je pensais que tu disaisle fait de mettresur ton RepoGitles migrations.Non,j'ai vu que ça se faisaitbeaucoupde ne pas les mettrejustementparce que ça ne réagitpas pareildes foisquand tu es en localou en productionet moi,effectivement,avec mes modèles Wagtail,
00:18:55 :je ne pouvais pasfaire mon applicationde migration.Mais du coup,que ce soit le Djangoou je me chargede Wagtail,dans le Wagtail,maintenant,je suis toujourschez les migrations.
00:19:06 :Ok.Super,merci beaucoupGabpour la présentationde tes propos.Merci à vous.Moi,je trouve que c'est bienque vousayez la parolependant les mentorats.
00:19:18 :Donc,n'hésitez pasd'autres personnessi vous avezdes chosesà partager.Ne soyez pasimpressionnésparles projetsde Gabriel.Enfin,si,soyez impressionnésparce quec'est très bien.
00:19:34 :Mais je veux dire,ce n'est pas parce quevous êtes moins avancéque Gabrielqu'il faut avoir hontedes projets que vous faitesou que vous montrez.
00:19:41 :Donc,si vous en avez,n'hésitez pasà partagerles petits exercicesque vous faitesou quoi,on peut en parler làavec plaisir.Voilà,je laisse juste30 secondesà qui veut se manifester.
00:19:54 :Sinon,moi,je vaisrefaire...Bon,on va parler un petit peudes imports.Alors,je vais créer un documentqu'il faut...Comment on va l'appeler ?
00:20:28 :C'est un truc...Voilà,donc,je suis...Oui,je fais confiance.Je suis repassésur VSCode.Je suis repassésur VSCodePyCharm5-3.Voilà,donc,maintenant que ça,c'est dit.
00:21:19 :De quoi ?Tu es en colère ?Je suis en colère,oui.Je ne sais pas,PyCharm,dès que je crée un projet,l'environnement virtuel,ils le trouvent jamaisou ils disentqu'il n'est pas compatible.
00:21:32 :Enfin,je ne sais pas,j'ai toujours des merdesavec l'environnement virtuel.Je ne sais passi c'est liéà macOSet puis,je ne m'y retrouve pasavec les raccourciset tout ça.
00:21:43 :Je trouve qu'il y atrop de...Je trouve qu'il y atrop de surchargeet je n'aime pas tropquand c'est trop surchargé.C'est personnel.
00:21:50 :Alors,imaginez que vous soyez...Je vais créerun environnement virtuel,mais est-ce qu'il y a besoin ?Non,je pense qu'il n'y a même pas besoin.
00:21:57 :C'est quoi pour vousle problèmequand vous avez...En fait,je pense que ce que je peux faire,c'est qu'on peut ouvrir...Je vais ouvrirun projet Djangolà où on a un projet Djangoet là où on a un projet Mac.
00:22:07 :Donc,on peut ouvrirun projet Djangolà où on a un projet Mac.Et là,on peut ouvrirun projet Macet là où on a un projet Mac,on peut ouvrirun projet Djangoet là où on a un projet Mac,on peut ouvrirun projet Djangoet là où on a des imports,
00:22:21 :on peut dans tous les sens...Voilà.Est-ce que ce serait possiblede zoomer un tout petit peu ?Comme ça.Ouais,super.Pas plus parce que je saisqu'après,ce sera assez large.
00:22:31 :Ok.Donc là,on est dans un projet Djangoclassique.Donc,imaginez que vous soyezdans...Où est-ce que je suis ?Là,on est dans un projet Djangoclassique.
00:22:42 :Donc,imaginez que vous soyezdans...Où est-ce que je suis ?Là,on est dans un projet Djangoclassique.Où est-ce que je suis ?
00:22:50 :Là,par exemple,ici,je suis dans...Donc,j'ai un projetbooklist.Ok.Et dans mon projetbooklist Django,j'ai une applicationbook.Ok.Dans l'application book,si je vais dansles URL,ici là,j'ai ce qu'on appelleun...
00:23:09 :J'ai différents typesd'imports.Là,j'ai un importd'une librairie,enfin,du module Django,enfin,du module contribde la librairie Djangoet j'importele...la fonction admin.
00:23:27 :Bon,je ne m'en sers pas en l'occurrence ici,mais ce n'est pas grave.Donc,ça,c'est une bibliothèque Djangoque j'importe facilementparce que c'est un packageque j'ai installé.
00:23:36 :Après,ici,il y a un type d'importqui est différent.C'est un import relatif.En fait,le fait de dire ici.views,c'est pour préciserque c'est un importqu'on faitdans l'application bookrelativementà...
00:23:51 :où est le fichier ?Là,vous voyez que mon fichier URL,il est dans mon application book.Donc,quand je fais .views,il sait que je vais allerchercher là-dedansparce qu'en fait,views,il existe dans plusieurs applications.
00:24:02 :Donc,si je faisais un importviews depuisn'importe oùdans le book list,il ne comprendrait pasparce qu'il y en a plusieurs.Donc,le fait d'êtredans URLet de dire .views
00:24:13 :import index,je sais qu'il va allerdans viewset il va aller importerla fonction index.Donc,ça,c'est vraimentun import relatif.Après,vous avez des importsqui sontde ce type-là.
00:24:26 :Donc,on va aller voirdans...Excuse-moi,j'ai déjà une questionà ce stade.Je peux la poser maintenant ?Ah bah oui,bien sûr.Là,dans l'import relatifque tu viensde nous montrer,donc,ça,ça marchesi tu lancesle programmedepuis ce fichier URL.
00:24:45 :Oui ?Non,pas forcément.C'est...Il faut que...Parce quequand tu lanceston script Django,tu vois,là,je suis...CD...En fait,moi,je vais lancerd'ici mon script.
00:25:01 :Tu vois,je vais fairepython managerun server.Là,si je regardeoù est-ceque je suis,là,je suis dansDjango.Donc,là,si je regardeoù est-ce que je suis,je suis...
00:25:17 :Au point d'entrée.Ouais,je suis au point d'entrée.Là,je suis dans ce dossier-là,dans Booklist.OK ?OK.Mais,le fait quec'est un import relatif,depuisce module-là,en fait,au moment oùl'URL,il va aller chercher Views,il...
00:25:35 :Lui,il...Comment dire ?Il est...Il existeau même endroitqueque le Viewsqui est au même endroit que lui.Ce n'est pas...
00:25:45 :Le script,il n'est pas lancédepuis l'application ici.C'est ça.Mais,est-ce que,à un moment,il y aun fichierqui va importerton fichier URL ?
00:25:56 :Parce que,moi,c'est çaqui ne marche jamais.C'est quandje doisappeler un fichierqui, lui-même,fait des imports relatifset s'ils ne sont pasau même niveaude l'arborescence,les deux,tu vois,par exemple,si j'ai un fichier mainet qu'ensuite,tout le reste,c'est dans un dossier
00:26:15 :genre fonctionet que,tu vois,dans une de mes fonctions,j'ai un import relatif,ça ne marche plusquand j'appelledepuis le fichier main.Enfin,le point-là,il m'embête,en fait.
00:26:27 :D'accord.En fonction de làoù je lance le script,ça marche ou ça ne marche pas.Et est-ce quetu as ton fichier initdans ton dossier ?
00:26:34 :Oui,j'ai toujours un fichier init,mais je n'ai jamais compriscomment ça marchait,ce truc-là.En fait,init,c'est rien.C'est juste,tu vois,lui,il est vide.
00:26:46 :C'est juste pour signifierà Pythonque c'est un package.Et donc,typiquement,tout ce qui estce qu'on appelledot import,ça fonctionne.Je ne sais pasà partir de quelle versionde Pythontu n'as plus forcémentbesoin du init,mais en gros,le dot import,comme ça,il fonctionne bien
00:27:04 :quand tu as le init.En fait,quand Python,il sait que c'est un package.Parce que si c'est justeun package dedans,il ne va pas capter.
00:27:11 :Oui,mais je mets toujoursun initpar écrit de conscience.Oui,c'est une bonnehabitudede le garder.Parce qu'en plus,dans le init,tu sais,des fois,quand tu fais,quand on fait,par exemple,si je fais Python,des fois,dans un module,enfin,ce n'est pas recommandé,
00:27:31 :mais on fait parfoisfrom moduleet on faitfrom moduleet on faitfrom moduleet on faitfrom moduleimportça,étoile.Et en fait,ça,étoile,ça peutêtre défini ici.
00:27:47 :Tu définisun allet là,en fait,tu vas listertous lesfichiers Pythonqui sont dans ton dossier.Donc là,typiquement,si on faisaitfrom bookimport all,donc là,typiquement,il va tout importer.
00:28:03 :Il va importer admin,apps,model,test,etc.Donc là,j'ai quemon admin,je ne sais pluss'il faut mettre le .py.Quand tu vas fairefrom bookimport all,il va juste importer admin.
00:28:17 :Voilà,c'est justeun exemple deà quoi il peut servirle init,mais souvent,il est vide.Ok.Ok.Et donc,est-ce quetu auraisun exemplepar hasardje ne sais passi on pourraitle reproduire ici,ton trucqui ne marche pasavec le .views
00:28:37 :avec l'importrelatif ?Là,je n'ai pasd'exemplesous la mainparce queça m'a tellementarraché les cheveuxque j'ai arrêtéde fairedes tentatives,mais en fait,c'est toujoursla même chose.
00:28:52 :En fait,moi,mon réflexequand je veuxcréer un projet,c'est de faireune architectureavec un fichiermainet ensuite,un dossierau même niveauque le fichiermainqui s'appellefonction,par exemple,ou classe.
00:29:10 :Et dans ce truc-là,je metsun fichierPythonpar classe,par exemple.Et donc,mon main,il va appelerles classes.Oui,donc ça,ça fonctionne ?
00:29:23 :D'accord,oui,ça,ça fonctionne.Mais ensuite,mes classes,elles s'appellentles unes les autres,en fait.Oui,d'accord.Donc,quand dans mon fichierde classe,je metsimportel'autre classe,ça,ça marche.
00:29:42 :Ça,ça ne marchepas depuis le main.C'est-à-dire que le main,quand je l'appelle,il ne comprend plus,du coup,si je metsdes points,en fait,il ne comprend plus rien.
00:29:53 :Et quand tu ne metspas les points,quand tu mets explicitementle nom du module,ça fonctionne ?Ben,ça dépenddepuisoù je l'appelle,en fait.
00:30:03 :C'est parce que,tu sais,des fois,pour tester ton script,tu as besoinde le lancerdepuis la classeelle-mêmeet du coup,le truc...
00:30:13 :Je vais essayerde reproduirece que tu dis.Je suis désolé,j'aurais dûpréparer un trucpour...Non,t'inquiète.D'accord,pour la prochaine fois,si tu veux.
00:30:25 :On va essayer là.Non,j'essaye là.Si on voitque ça ne marche pas,qu'on n'y arrive pas tout de suite,on regarde çasans souci.
00:30:33 :Ok,ça marche.Donc là,imaginons,t'as ton main.pyqui estcomme ça.Après,ici,t'as,on va dire,moduleset dans tes modules,tu as...
00:30:47 :Classe 1,classe 2,c'est ça.Ouais,je vais dire,on va direcamp,module,histoire de pas...Parce que,il faut faire attention,par exemple,tes dossiers,tout ça,c'est comme ça.
00:31:02 :Donc là,c'est comme ça,t'as config,t'as un truc comme çaet puis là,on va dire,write,write,module,en py.Ok,donc...Disons que,par exemple,là,ton write module,il a besoin de ce qu'il y adans compte module.
00:31:20 :D'accord,donc attends,compte module,on va dire,on va définir une fonction,def,add,function,donc,a,b,retourne,a,plus,b.Ok,et dans write module,on va dire,def,print,hello,et on va juste mettre,retourne,hello.
00:31:44 :Ok.Et donc là,t'es dans compte moduleet tu dis,from,from,from,from,from,from,from,from,from,from,machin,donc là,ça veut dire que tu dis,from module,donc là,toi tu vas dire,from,write module,import,print,hello.
00:32:10 :Par exemple,ok.Ok,et donc ça,ça tu dis que ça fonctionne pasquand tu lances ton script,ici,là,lui,le main il fait quoi ?
00:32:21 :Là,le main,il doit récupérertout ce qu'il peut.D'accord,donc là,on va dire,from,modules,dot,count module,donc là,c'est dans le count,import,add function,comme ça ?
00:32:37 :Ouais.Et donc là,on va dire,print,add function,deux,trois.Donc là,je suis dans le main,ok.Attends,je vérifie.Donc là,on va dire,print,add function,deux,trois.
00:32:55 :Main,module,ok.Et donc là,tu me dis que normalement,si je lance le main,je vais avoir un problème d'import.Ça fonctionne.Alors maintenant,essaye de le lancer depuis,depuis,count module.
00:33:20 :Ah,je vois,d'accord.Ah oui,c'est des,c'est des,j'étais quoi dans les modules ?Ah,et depuis module,ah mais déjà là,depuis module,ça va,tu ne peux pas lancer,là le main,ça ne va pas fonctionner.
00:33:36 :Le main,tu ne vas pas pouvoir,attends,on va essayer,mais toi,ce que tu voudrais faire là,c'est ça,c'est python 3,c'est ça que tu veux faire ?
00:33:48 :Là,ce que je voudrais,c'est que tu te mettes danscount module,et que tu essayes de,que tu testes ton moduledirectement depuis lui,quoi.
00:33:56 :Ah,d'accord.Donc là,count module,ici ?Quand tu fais ça ?Oui,c'est ça.Et là,si je faisais,ah oui,d'accord,si je faisais directement.
00:34:09 :Oui,tu sais,tu mets un if main égale,if name égale main,et tu lances le truc.Mais là,tu ferais un printllo,un truc comme ça ?
00:34:25 :Oui,c'est ça.Ok.Alors,relative import with no parent package.Voilà,ça commence.D'accord,mais en fait,ça,c'est parce que tu lances,parce que tu fais,tu lances ton script,en fait,là,quand tu fais ça,tu utilises VS Codeou PyCharm ?
00:34:47 :Moi,j'utilise les deux.Ok,si tu fais ça ici,pour moi,c'est normalparce queils ne voient pasque tu es au seind'un dossier.
00:34:59 :Pour moi,ce n'est pas une erreur,en fait,le fait que tu aiesune erreur relative.Mais toi,ton problème,c'est que tu ne peux pasle tester,en fait,c'est ça.
00:35:10 :Le fait quetu lances ton scriptcomme ça,en fait,ce qu'il faudrait que tu fasses,pour moi,c'estsi tu...Attends,je vais vérifier quesi tu lances depuis8 ans,module,quant module,relative,ouais.
00:35:35 :Peut-être un trucqui serait plus parlant,c'est qu'en fait,souvent,moi,ce que j'ai envie de fairedans mes programmes,c'est de mettre un fichieravec les constantes globalespour pouvoir les appelerdepuis n'importe quel fichierdu programme.
00:36:04 :Ouais,ok.Et toi,tu les mets dans module.Ouais,mais là,c'est pareil,je ne sais jamaisoù mettre ce truc-làparce que dès que j'ai des dossiers,je ne sais plus commentl'appeler correctement,en fait.
00:36:17 :Ouais, d'accord,par exemple,là,c'est dans les modulesque tu aurais ton…Peu importe,en fait,même si je ne le mets pasdans les modules,même si je le metsà un autre endroit,même si je le metsau même niveauque le main,si je veux les appeler
00:36:32 :depuis le module,du coup,ça va poser problèmepuisque je l'appelle aussidepuis le main,en fait,tu vois,en fait,je n'ai pas trouvéde moyenque ça soit appelabledepuis partoutsans que çase vêtre de partout,quoi.
00:36:47 :Je vois ce que tu veux dire.Il faut que…C'est bien qu'on en aitdiscuté là maintenantparce que je penseque si tu avais poséune question sur la plateforme,ça aurait été compliquéà comprendreet je n'aurais pasà reproduire.
00:36:58 :Là,je comprends ton problème.Déjà,en fait,si on arriveà régler ce problème-là,on sera content,je pense,tu vois,le fait que le Printellovoit un truc.
00:37:09 :Donc ça,je vais regarderet puis je reviens vers toiparce qu'à moins que,bien sûr,quelqu'un ait une réponsetout de suite,tu vois,de poser un trucet de poser une explication claire.
00:37:20 :Donc,je vais regarder ça.Merci.Moi,je t'en prie.Voilà.OK.Donc,je comprends le problèmequ'il y avait.Je vois que Syllaest arrivée.
00:37:37 :Je crois que Sylla,il avait aussi…C'est peut-êtrele même genre de questionque tu avaissur les imports,Sylla.Allô ?Oui.Bon,comme je viens de te résoudrela session,oui,mais c'est…Bon,je pense,je me rappelleune fois,on avait travaillésur,ça dit,comment diviser
00:38:02 :mes modèles,par exemple.Genre,j'ai un modèleemployé,personne.Donc,je voulais classerchaque,disons,entité,chaque objetde classedans un fichierà séparer.
00:38:17 :Ça y est.Sans mettre toutdans un fichier modèleou bien sans mettre toutdans un fichier view.Attends,excuse-moi,tu voulais chacunde tes modèlesdans un fichier séparé,c'est ça ?
00:38:28 :Exactement,oui,oui.Et du coup,il fallait créer,dans le modèle,il fallait créerun modulejuste et puisimporterles modèlesdans,disons,dansles viewsque tu asdans les viewsque tu veux utiliser.
00:38:46 :Mais il faut créerun,juste un,un,comment dirais-je,un moduleet,je pense,c'est ça,créer juste un modulequ'on avait fait,je crois.
00:38:58 :Comment ça marche ?J'avais trouvé la solutionpour le faire.Ouais.Ouais.Je ne sais passi c'est çala question,je ne sais pas.
00:39:07 :Euh,non,mais moi,c'était plus,toi,si tu avais une questionà évoquer un peule problèmeque Simon avait,c'était pour savoirsi toi,tu avais vraimentun cas particulierque tu aimerais évoquerpour les importsou après,si tu as résolu ton problème,très bien,mais,euh,
00:39:27 :non,le,ce que je me rappelle,les imports que j'avaissoulevé l'autre fois,là,c'était pour,comment divisermes modèles,mes views,avec un fichier séparéet puis les importerl'un à l'autreet puis dans mes trucs,dans mes fonctions.
00:39:42 :Et juste,avant qu'on repasse à ça,je ne sais pas si tu as vu,Simon,mais là,en fait,juste si tu mets,si tu enlèves l'import relatif,il me semble queça fonctionne.
00:39:52 :Donc là,ça va fonctionner,mais plus depuis le main,là,du coup.On va aller voir ça.Ok,on va voir le main.Ouais,ok,donc,je vois bien le,je vois le problème.
00:40:05 :En fait,c'est peut-être un problèmed'architecture,en fait,c'est-à-dire qu'il ne faut pasque je les construise comme ça,mes projets.Non,ça,c'est,enfin,c'est illicite,comme,comme architecture,avoir ton mainavec tes modules là-dedans.
00:40:22 :Donc,ok,mais ça,c'est un problèmed'architecture,c'est-à-direqu'il ne faut pasque je les construisecomme ça,mes projets.Non,ça,c'est un problèmed'architecture.
00:40:36 :Donc,ok,ben,je vais regarderet puis je reviendraiavec un truc,une explicationpour ça.Et puis,alors,pour,si là,donc,si je reprendsun mode,un,un truc Django,euh,voilà,effectivement,c'était un truc Djangocomme ça,en époque,ok.
00:41:00 :Donc,là,tu as un projet,tu as un projet Django,donc,tu as tes différentes applicationset toi,en fait,là,tu as un modèleet dans tes modèles,en fait,toi,tu as plusieurs classesqui représententchacun de tes modèles.
00:41:16 :Voilà,au fait,dans,je vais créerun module modèle,par exemple.Ici,là,le modèle,ouais.Voilà,et puis là,je,là,je crée maintenanttous mes modèlesparce que pour moi,il n'y a pas de,il n'y a pas de souci à faire ça,tu peux avoir plusieurs modèles
00:41:36 :dans un,dans un,dans une même application.Voilà,exactement,c'est ça,ça,et ça marche,ça marche.Oui,oui,ça marche bienet en fait,il faut,là,la question qu'il faut se poser,c'est,est-ce que j'ai besoind'un nouveau modèleou est-ce que j'ai besoind'une nouvelle application ?
00:41:57 :C'est toujours un peu le truc.Ok,d'accord,ok,donc,un nom,un auteur,machin,si par exemple,je voulais définir,je ne sais pas,une bibliothèque.
00:42:09 :Voilà,ou bien un étudiant,je ne sais pas.Oui,un étudiant,bah typiquement,ce serait une nouvelle application,tu vois,ce serait pas,ce serait pas un nouveau modèleparce que tu vas,ça ne va pas bien organiserton code,ça n'a rien à voir,tu vois,un étudiant
00:42:25 :et un,un livre,un livre,ça n'a rien à voir,donc,ça serait une autre application,par contre,il n'y a aucun soucià ce que,donc là,tu vois,par exemple,moi j'avais créé une autre applicationqui s'appelle Review,donc là,j'ai mon modèle,tu peux importerun modèle d'une autre application
00:42:47 :qui est dans un autre,un autre module,comme ça,tu vois ici,là,je vais carrément appelerle nom de l'application,les modèles de l'application,et je vais importer le modèleque je veux.
00:43:00 :La classe du,ouais,la classe du,ouais,et tu peux l'utiliser ici,ensuite,sans problème.Effectivement,ouais,ouais,ouais.C'est exactement ça,c'était ça,mais,bon,comme ça maintenant,parce que moi,mon souci c'était quoi,dans un modèle,Django par exemple,j'ai,disons le même projet,j'ai,je ne sais pas,
00:43:24 :j'ai deux,trois,quatre modèles.Non,ce n'est pas,ce n'est pas un problème,regarde,tu n'étais pas là au début,mais,Gabriel,nous avons présenté un de ses projets,il y avait,enfin,je ne sais pas Gabriel,si tu peux confirmer,mais dans ton fichier modèle,tu peux avoir 10,
00:43:41 :20,20 classes,quoi,il n'y a pas de souci.Voilà,ouais,ouais,ce que je disais,c'est qu'en fait,mon modèle,parce que j'ai trois paquets,en fait,j'ai plusieurs fichiers de modèlesdans un package modèle.
00:43:55 :D'accord,mais ça marche de la même manière,en fait,tu vois,là,par exemple,si là,j'ai une classe reviewet une classe read page number,c'est juste deux modèlesdans la même application.
00:44:06 :Et dans la même,dans le même fichier.Dans le même fichier,ouais,sauf que,ce que dit Gabriel,c'est que tu peux avoir aussiplusieurs fichierssi tu veux tout sépareren mode package,mais ça revient,ça revient,ça revient au même.
00:44:19 :Exactement,exactement,en mode package,voilà,c'est ça.Mais je pense,bon,j'ai vu aussi,je ne sais pas si c'est le cas,il y a d'autresqui disentd'éviterde mettrebeaucoup de package,c'est-à-dire séparerles modèles,je ne sais passi c'est,c'est pas bonou c'est bon,
00:44:40 :je ne sais pas,parce qu'il y abeaucoup de projetsque je vois,ils mettent,la majorité que je vois,ils mettentles modèlesdans le même fichier,je ne sais pas,les modèlesà Django,par exemple,ils ne séparent pas,en fait.
00:44:55 :Ouais,genre comme ça,quoi.Voilà,comme ça,exactement,ouais.Ok,bon,après,je ne sais passi il y a,si il y a,ça marche de la mêmemanière,c'est juste quece qui est bienavec Django,c'est en faitla modularité,c'est-à-dire quequand tu faisun module
00:45:18 :ou une application,tu vas pouvoirla réutiliserbeaucoup plus facilementque justeune seule partiequi t'intéressedans un autre projetparce que là,par exemple,si dans un autre projet Django,je voulais utiliserjuste le modèlereview,il faudrait que je viennedans le modèle,que je fasse juste
00:45:35 :le copier-collerde cette classe,etc.,tu vois,c'est moins propreque juste d'aller chercherle packagereviewqui m'intéresserait.Ouais,ouais,ça aussi,ça va,ouais.
00:45:49 :Donc,c'est en çaqu'on a parlé.Voilà,donc,pour la prochaine foisou sinon,je t'enverrai,Simon,sur le Discord,tu feraisun petit cas,enfin,je pense qu'on le verrala prochaine fois,je ferai un cas,un exemple concretde ce donton a parléavec les imports
00:46:09 :comme ça,ce sera plus clair.Super,merci beaucoup.Surtout,pour les constantes,en fait,c'est surtout çaque j'aurais besoinde,ouais.Merci beaucoup.Ouais,d'accord,pas de souci.
00:46:24 :Et après,pour les constantes,tu peux aussi utiliserdes fichiers .infqui te permettent,je ne sais passi tu as déjà utiliséce genre de truc,parce que toi,tu veux utiliser Pythonpour mettre tes variablesd'environnement.
00:46:36 :En fait,regarde,on va regarder,j'ai vu,Jean-Phil,que tu avais une question,tu peux la posersi tu veux.Je peux attendre,montre ton truc,c'est,je ne sais pas,juste après.
00:46:49 :Ouais,d'accord,merci.En fait,j'imagine,Simon,tu peux avoirmain.pycomme çaet on va essayerde faire des moduleset puis là,on va mettreun super moduleen pyet on vamettreun super moduleen pyet on vamettreun super moduleen pyet on va
00:47:13 :mettreun super moduleen pyet on vamettreun super moduleen py.Moi,ce que je fais,c'est que je créeun fichier environnementet je faisma variableégaleéloet en fait,pour allerici,si tu faisdans le main,donc tu peux faireimport os
00:47:35 :et je croisqu'il fautinstallerunimportoset je croisqueje vaisinstallerunOpourpourinstallerpy.onje vais l'installerau globalje vaisl'installericietje vaisinstallerlapositiondanslatwoetje vaisinstallerunOpourlapositiondansla
00:48:14 :deuxetje vaisrentrerdansle�도etje vaisinstallerunOpourladeuxetje vaisinstallerunOpourladeuxetje vaisinstallerunOpourladeuxetje metsleOpourladeuxetje attachedleOpourladeux
00:49:00 :etje metsleOpourladeuxetje suisfinje strange.Je vaisrécupérerlenom deta variable.En fait,c'est un peucomme un dictionnaireet là,ça marchepartout.
00:49:41 :En fait,cette bibliothèque-là,load.env,elle simulele fait de mettre en variable d'environnementdans ton système,que ce soit Windows, Linux ou Mac,de mettre des variables qui se trouventlà-dedans.
00:49:56 :Et en fait, ça, ça marche comme un dictionnaire.Donc là, tu as la clé et là, tu as ta valeur.Et tu peux accéder depuis n'importe oùparce qu'en fait,comme tu l'as mis dans ton environnement,dans ta session d'environnement,que tu sois n'importe où,ça va fonctionner.
00:50:11 :Si tu le lances...Mais ça l'a mis pour de vrai, en fait.Non, ça simulele fait qu'il soit dans tes variables d'environnement.Ça ne va pas modifier tes...
00:50:22 :Par exemple, si tu es sur Windows,ça ne va pas aller modifier ton pass environnement.Tu vois, il n'y a pas de...Donc tu vois, là, je suis là, je suis dans mon super module,il me l'importe.
00:50:31 :Et là, je suis dans le main,il me l'importe,quel que soit l'endroit où je suis.OK, ben voilà, c'est super, ça.Mais ça, c'est...
00:50:39 :Enfin, en tout cas,ça, c'est pour tout ce qui est constant, variables, etc.C'est comme ça qu'on fait.Et là, tu vois, je l'ai appelé ventre,mais tu pourrais le changer en disantmes variables.
00:50:53 :Sauf que, si tu le fais comme ça,il faut juste que dans le load.env,tu lui spécifiel'endroit,le chemin absolu de ce truc-là.Ou sinon, tu peux...
00:51:07 :Enfin, ça dépend d'où tu le lances,mais...Parce qu'en fait, avec le load.env,c'est automatique.Par défaut, il va chercher tous les fichiersqui s'appellent .env.
00:51:16 :Tu vois, c'est juste une convention.Ah, OK, d'accord.C'est pour ça que moi, je l'ai appelé .env,ou sinon...Et en fait, ce qui est pas mal,c'est que le load.env,
00:51:24 :il va aller chercher récursivement le .env.Tu vois, quand t'es ici dans mon super module,donc je suis à l'intérieur du module,il va aller chercher un .env
00:51:33 :dans le dossier courant.S'il le trouve pas,il va remonter d'un cranet il va aller chercher dans le module parent.Donc là, il va le trouver.
00:51:41 :D'accord.Et le fait qu'il cherche des trucsqui s'appellent .env,ça risque pas de poser problèmeavec mon environnement virtuelqui s'appelle aussi .env,le dossier de l'environnement virtuel.
00:51:52 :C'est pas des fichiers,mais c'est le dossier qui s'appelle comme ça.Ton dossier, il s'appelle .envpour ton environnement virtuel ?Ouais.Enfin, souvent, c'est comme ça que je l'appellepour que ça soit un dossier caché.
00:52:03 :OK.Mais s'il faut pas,j'arrête de faire ça.Moi, je te conseillerais,tu peux,mais je te conseillerais plutôtde mettre .envpour vraiment virtuel .env.
00:52:14 :Parce que .env, en fait,c'est plutôt réservéà tout ce qui est variable d'environnement.OK.Mais voilà, c'est un conseil,c'est pas...Ça vient peut-être du faitque Thibault le fait comme ça.
00:52:26 :Thibault crée, excusez-moi,un environnement virtuel .env.Ah, OK.Oui, peut-être, ouais.Après, moi, je veux pas aller en contrede ce que dit Thibault,mais après, chacun fait comme il veut.
00:52:37 :Mais moi, je préfère réserver .envpour mes variables d'environnement.Après, peut-être que ça peut marcher,parce que là, c'est un dossieret là, c'est un fichier,donc c'est pas la même chose.
00:52:45 :OK.Mais bon, voilà, c'est plus...Je préfère pas appeler deux fois la même chose.C'est une mauvaise pratiqueou pas de mettre un point devant le .env ?
00:52:53 :Ah non, non, pas du tout.Le fait de mettre un point,ça fait un dossier cachéet ça le met aussi directementdans les Gitignorespour pas que ça aille sur ton GitHub.
00:53:04 :Donc, non, non, c'est pas du toutune mauvaise habitude,c'est une bonne habitude.OK.Mais je regarderai quand même, hein.T'inquiète pour ton truc, Simon.
00:53:16 :Super, merci.Désolé, Gabriel, il y avait Jean-Phi avant.Oui, bien sûr.C'est vrai, c'est rapide,c'est juste une question.Quand t'as plusieurs modèlesdans Model.py,
00:53:31 :quand tu fais tes templateset tu veux faire, par exemple,des grudes et donc un templatepour chaque action,dans le template,tu crées des folders pour chaque modèleet après tu mets les HTML,les templates comme ça,par folder ou comment tu fais ?
00:53:54 :Quand tu veux dire,quand t'as plusieurs classeset pour chaque classe,tu veux faire des grudes,tu fais un HTML pour chaque action.Donc, tu peux supposerque t'as cinq actionspour chaque modèle.
00:54:08 :Tu fais le template,le modèle 1et tu mets ces cinq templates.Après, tu fais un autre folder,tu mets le modèle 2avec ces cinq templates.
00:54:17 :Comment tu fais ?Je crée un template,je crée un template,je crée un template,je crée un template,je crée un template,je crée un template,moi, je n'utilise pas ça.
00:54:33 :Moi, en fait,j'ai toujours tous mes templatesqui sont par application,tous mes templates HTMLqui sont par application.Donc, ça,je n'ai jamais eu besoin d'utiliser.
00:54:45 :Est-ce que…Tu peux faire plusieurs modèlesdans la même application,un template avec le nom de l'applicationet tu mets tous tes templates dedans ?
00:54:58 :Oui.Après, je ne sais pas si…Je ne sais pas, par exemple,Gabriel, je ne sais passi tu fais autrement,mais en tout cas,moi, c'est comme ça que je fais.
00:55:06 :Vas-y.Par rapport à làoù tu mets tes templates ?Oui, en fait,la question de Jean-Phil,c'est quand tu as…Donc là, typiquement,dans ce cas-là,quand tu as plusieurs modèles,enfin, plusieurs classes,en fait, dans ton modèlespour tes templates,est-ce que tu faisun dossier par classe
00:55:26 :ou est-ce que tu metstout dans le template ?Moi, ce que je fais,c'est que j'ai mon template ici,tu vois,je l'enlèverai après,mais en gros,j'ai mon template,après, tu rajoutesle nom de l'applicationet après,tous mes templates,je les mets là-dedans.
00:55:46 :D'accord.Tu ne fais pas des sous-dossiersaprès par modèles ?Non.Ok.Et je ne suis pas sûrque ça fonctionnesi tu fais ça.
00:55:54 :Tu l'as déjà essayé ?Non, parce que là,c'est la première foisque je fais un trucavec justementla même application,plusieurs modèles,et donc j'essayede faire le décrypteavec des viewsen forme de classe, là,et là, je commenceà avoir du malà lire mes fichiers,
00:56:11 :à voir que les nomsse ressemblent,et ainsi de suite,et je me demandaissi on pouvait faire çajustement pourque ça ne soit plus lisible.
00:56:19 :Je l'ai testé.Mais je ne pense pasque ça fonctionne,parce qu'en fait,quand tu vas voir,si tu vas dans ton settingset que tu vas voirtes templates,les chemins de ton template,où est-ce qu'il est ?
00:56:37 :Les templates,Dears, AppDears True.En fait, le faitque quand tu fais AppDears True,lui, il va aller chercherun dossier de templatedans chacun des applications.
00:56:52 :Donc là, il va trouverTemplates Review.Après, s'il y a plus...Enfin, c'est à tester,mais peut-être.En fait, ça se trouve,ça peut fonctionner,parce que normalement,il va aller voir récursivementtout ce qui se passedans templatesde l'application.
00:57:09 :Donc, normalement,ça devrait fonctionner.Ok, vas-y,je vais faire un test.Un chemin rallonge, en fait.C'est juste ça.Oui, c'est un chemin rallonge.En fait, tu partirasde template.
00:57:18 :J'imagine, après,Review, il metdeuxième fois Review.Donc, je pense,ça sera Review,Slash Review,Slash ton fichier, en fait.Oui, c'est ça.Mais je penseque ça va fonctionner,parce que ça, c'est récursif.
00:57:29 :Normalement, il va voirtout ce qui se passe.Moi, je pensaisplutôt à Templates Review,Book,Templates Review,Read,je ne sais pas trop quoi.
00:57:37 :Oui, oui.Si, normalement,ça devrait fonctionner.Ça marchera, je le fais.Je le fais, moi,sur les projets,ça marche,pas de problème.Mais moi,je sais que,moi, perso,je ne le fais pas.
00:57:49 :Je ne m'embête pasà faire ça.Mais si,pour un besoin de lisibilité,peut-être que tu en as besoin.Oui, peut-être.Je vais m'améliorer aussila façon de choisirmes noms,des fichiers,tout ça aussi.
00:58:00 :Ça peut jouer, quoi.Oui.Ça sera plus lisible.Enfin,je vois ça.Merci.Oui, pas de souci,avec plaisir.Avant de terminer,je voulais vous montrerle fameux trucqui permet d'exposerfacilementces applicationsgratuitementsans nom de domaine.
00:58:16 :Donc,ça s'appellengrok.Donc,là,imaginez,on va se faireun petit truc.Ls,cd.On va se le mettrelà-dessus,dans les mentorats.Et on va fairenano-dashboard.py.
00:58:31 :Ah,il va me manquerquelque chose.Donc,on vafairengrok.Donc,là,on vafairengrok.py.Là,mon fameuxStreamlit.On va créerune toute petite apple Streamlit,je sais,pour que vous,pour illustrerYimportStreamlitas stetst.
00:59:20 :writeça lesaccompagneet puis on va mêmefairenameégale stje crois que c'esttextinputenteryour nameet on va direst.
00:59:49 :writehellomon petitet là on va mettre le nameokdonc là on va déjà voirsi ça fonctionnemais normalementil n'y a pas de soucisStreamlitStreamlitrundashboardje m'appelleJeanhello mon petit Jeanok donc là c'eston s'est fait une petite applicationweb hyper dégueulasse
01:00:17 :maisça fonctionneon peut mettrece que vous voulezMichel,helloon va même mettrehello mon petit Jeanokdonc là c'estje vais juste faireun dernier trucparce que làmon applicationelle s'appellebizarrementdashboardokdonc là imaginez que vousayez une applicationdonc on va la lancer
01:00:54 :eton vaon vaon vaon vaon vaqui tournesur votre pcdonc là en l'occurrencec'est sur le localmais bon on va faireet elle tourneon saitsur le port8501voilàje vais aussicréerun nouvel ongletvoilàdonc aprèsdonc si vous voulez
01:01:26 :imaginez que vous créezcette application làvous avez pas de nom de domaineet puis vous voulez la partageravec quelqu'unou la faire essayerou même la mettre en productionj'en sais riendepuis un serveurvous pouvez facilementavec ncrocon va créer un tunnelet vous allez voir
01:01:39 :c'est hyper facileça va vous voyez assezlà ou pas ?parfaitokexcuse moije voulais juste savoirc'est ncrocou comment ça s'écrit ?
01:01:50 :c'est ncrocattends je vais l'écrire làc'est r o p comme l'imagequ'on croquencroca croquepardonokg r o qokncrocvous pouvez vous créerun comptec'est gratuitavec une adresse mailet vous allez arriversur ce dashboard làet il fautdonc ça
01:02:12 :si vous êtes sur maccomme çac'est comme çaque vous pouvez l'installersi vous êtessur windowsvous pouvez soitl'utiliseravec chocolatéoufaireou l'installeravec windowset voilàet après il faut justeil faut juste ajouterdans ncrocla configvotre tokença c'est mon token
01:02:34 :icic'est un truc privéil ne faut pas le montrernormalementmais moi c'est juste un comptede démonstrationje ne m'en sers pasvous faites justeces deux commandes làdonc là je suis sur macdonc on fait çaet vous ajoutezle token à votre configlà je ne vais pas le faire
01:02:48 :parce que je l'ai déjà faitet après il suffitjuste d'exposeravec cette commande làle portde l'applicationdonc làmoi je faisncrochttpet donc làon a dit que j'étais surle port85on lanceet donc làc'est exposéj'ai pas euj'ai pas eu besoin
01:03:08 :d'aller ouvrirun portsur ma boxquoi que ce soittous mes ports sont fermésvous pouvez y allermaislui il m'a crééun tunnelet donc vous allez voirmaintenant dansendpointset donc làvous allez avoirunununun urlqui estcelui-cidonc là vous faites
01:03:29 :visit siteet donc làsi je vous balancecet url làdans la convovous pouvez y allervous allez tombersur l'applicationqui estqui est exposéequi est exposéechez moije vous laissealler testermais normalementça fonctionneeffectivementet doncvous voyezquandlà franchement
01:03:50 :j'ai fait quoij'ai justecréé un tunnelet en plusde ce que je peux voirnormalementsi je vais voirsur mon dashboardje peux voiril y a untrafic inspectordonc là on voittypiquementnormalementtoutes lesconnexionsles gens qui se connectentdessus normalementje crois
01:04:11 :voilàdonc là on ales différentsles différents hostsbon là les ipelles sontmasquéesmais çanormalementc'est vousqui tentez de vousconnecteretil y aunununouais une questionoui alorsdonc çac'est un tunneldoncc'est hébergésur ton pcton projet
01:04:37 :ouais donc làtu vois moi je suissur monen faitj'aiun terminalsur lequelj'ai lancél'applicationdonc làelle tourneen continuetj'ai crééun tunnelqui va venirfaire un lienentre le portexposé icide mon applicationet le portça vafaire une
01:05:00 :ouverturede portsur votre boxavec jangoce serait pas compliquédu coup de faire çanon ?non non nonavec jangoc'estexactementla même choseavec jangotypiquementton portce seraitje sais pasle 8080ou 8000je sais pascombienet çamarcheraitde la même
01:05:24 :manièretu vois iciet ça fonctionneouaisje connais vraiment rienlà danstout ce qui estdevops tout çadu coup je suis un peuperdudès qu'on parle de çamais c'est intéressantj'aimerais bien savoirc'est intéressantet vous allez voirqu'il y a un trucencore plus sexy
01:05:41 :vous pouvez fairedevous pouvez aussiparce que làlebon il y a peu de chancemais si quelqu'un tombesur cette URL làil aura accèsà l'applicationcomme vousvous pouvez mettreen placedesauthentificationsdéjà intégréesavec Googleil suffit justed'ajouteron va ajouter ça
01:06:01 :donc lànormalementlà normalementil marche plusl'URLparce que j'aiarrêté le tunnelouaisil fonctionne plusje vais le relancersi je comprends bienen faitça marchetant que ton ordinateurest allumémaisquand tu l'éteinsça ça marche plusc'est ça ?
01:06:20 :ah oui çaça marche plusmais en faitsi par exemplet'avais un serveurje sais pasun Raspberry Piousi t'avaisun serveur remotetu pourrais lancerton applicationen local comme çasur le serveur remoteett'auraisl'adresse publiquecomme çat'as pas besoinde t'embêter
01:06:40 :avec unavec unnom de domaineou quoiparce que t'as pasenvie de donnerl'adresse IPou mêmeje sais past'as ton portqui est fermésur ton serveurvoilàdonc je trouveque ça c'est intéressantquand tuvraiment tu fais duquand tu hébergestoi même
01:06:59 :sur un Raspberry Piou sur un NASc'est intéressantsinonbon bah voilàc'est past'as un serveuril est déjà exposéet c'est gratuitc'est gratuittu peux avoirautant de tunnelsque tu veuxet donc làje vais vous montreravec l'autorisationest-ce quequelqu'unpeut me donner
01:07:18 :un emaildonc làje vais mettrele mienactv.gmail.comest-ce quequelqu'unveut bien me donnerson emailpour qu'on fassele testje te l'ai écritsi tu veuxouaismercibah j'en ai reçuplusieurson va tousle testerje vais en rajouterun autreeuhc'est
01:07:41 :c'estc'estc'estc'estc'estc'estc'estc'estc'estc'esteuhon va essayercelui-làavec Simonvoilà ça arrivetrop viteje vais justeje vais en mettrequelques-unsdissoléje vais pas tout les mettremais maintenantsi je relanceen faitje vais juste relancereuhmonmon tunnel
01:08:11 :sauf que làj'ai ajoutéles optionsque vous avez euedonc8501etdonc làje le lanceet maintenantje vais vous redonnerle nouvel URLend pointeuhdonc ça doit êtrecelui-cidonc lànormalementen fait sieuhattendezc'est celui-làeuhvoilàje vous le mets ici
01:08:42 :normalementsi vous allezvous connectereuhil va vous demanderun compteGmailet donclàles seulscomptes Gmailqui vont fonctionnereuhça va êtreceluide Gabetc'estceluideGabetc'estceluideGabetceluideSimonje croisouaisoket les autres
01:09:17 :je pense queça va pas fonctionnermalheureusementil y a que Simonet Gabqui ont pueuhoksuperet en faitce que vous pouvez même faireje crois que vous pouvez le gérericidepuiseuhouaisvous pourriez faire la même choseil fauteuhle mettre
01:09:37 :euhà votreeuhà votreendpointmais euhvoilàetsachez queavecNgrokdonc vous avezje crois que c'esteuhautant de tunnels que vous voulezmais vous voyez que c'est desURLqui sont un peu barbareset vous avez droità un nom de domaineeuh
01:09:58 :gratuitavecvotre comptegratuitdonc làtypiquementvoyez queça ce sera le nom de domaineque vous pourrez utiliserpour l'applicationque vous voulezpartagerexcuse moile numéro8501là que tu as trouvétout à l'heurec'esttu l'as trouvé où et commentce truc là ?
01:10:23 :euh8501 c'est le porteuhsur lequel tourne l'applicationweben fait quand tu lanceseuhtypiquement avecStreamliteuhle port par défautc'est 8501euhmais si j'avais lancéun Djangoce seraiteuh8000si j'avais lancéeuhdu Flaskce seraitje sais plus exactementc'est quoi le port
01:10:47 :mais euhen gros c'est le portsur lequel tourneta web applicationokeuhaprès ce que tu peux fairec'esteuhje vais relancer un autretu peux définireuhle port sur lequeltu le lancestu vois làje dois l'avoireuhest-ce que je luidonc là je vais faire
01:11:19 :un peu comme çaouaistu vois typiquementtu peux direStreamlit runbrowser serveur portet là tu peux direbah je le lancesur le port 8503par exempleet là j'ai 8501ça c'est des chosesque tu définis toi-mêmequand tu lances tes web appssur quel port
01:11:44 :tu veux le lancereuhvoilà comment vous pouvezexposer assez facilementvosvos applicationsdoncje pense que c'est pluspour dudu testeuhaprès en productionil n'y a pas de soucisça peut marcher je pensemais euhje pense qu'il y aune réduction de bande passante
01:12:07 :sur les compteseuhfreemais bon voilàça peut faire le tafpour un besoin ponctuelouquand on n'a pasun gros besoinça fait bien le tafje trouvemoi je l'ai utilisésurune applicationque j'avais déployéchez un clientsur un serveur NASexcuse-moi P.A
01:12:25 :ouaislà j'essayais de rentrerdonc j'ai cliqué sursur ton siteNocouaisenfin sur ton applicationhum humet j'ai rentréune adresse e-mailquelconqueen fait je dois rentrerl'adresse e-mailde docstringpour que je puisse rentrerparce queil me refuse l'entréeeuhsur ce truc là ?
01:12:44 :euhouieuhouais c'est normalparce qu'en faitj'ai juste miseuhenquand j'ai lancémon truceuhje ne suis pas sûrd'avoir làeuhj'ai misen hautouaiseuhattendstu voisest-ce que tu vois icilà en hautla commandequi a été lancée
01:13:08 :attends je vais zoomermais je crois quequand je zoomça zoomnon ça zoom pasc'est pas la peineouais ça zoom pasmais en faittu vois iciil y a que les e-mailsde Gabrielet de Simonqui vont fonctionnerah oui oui d'accordok parce que
01:13:23 :tu as rentréque le réseauouaismais euhsi euhj'ai hésité en faitouais pas de soucieuhvoilàbon je vaisarrêter le tunneleuhokeuhbah voilàpourpourun grocet puis pourla sessiond'aujourd'huidésolé Simonj'ai pas répondutout de suiteà ton
01:13:48 :à ta questionlà sur les paquetsmais j'ai comprisce que tu voulaiset euhon vaon vaon vaon vapas détecterles produitstrès vitecomme tu les voulaiset euhje pense que pourla prochaine foisje te montreraiscomment ça fonctionnelàpour relatif
01:14:08 :aprèstu as une solutionqui fonctionnentlà pour tes variablesouais ouaismais c'est déjàsuperetbah très bienalorseuhetsinonquoi est ce queje voulais direeuheuhil n'y a pas grand choseà rajouterà part peut-êtreles sujetsdu prochaineuhbah déjà
01:14:36 :ouaisil y aurapeut-êtreapprofondircette questionde Simonlà sur le moduleouais c'est bienouaisdonc çaje vais le noterensuiteeuhattendezje noteeuhouaisaprèsqu'est-ce que vous avezd'autrecommeidée ou besoinj'ai vuqu'il y avaitje crois queCéciliaqui avait demandé
01:15:04 :sur Docstringaussilesle loggingavecDjangoouieffectivementouaiseuhlogging par exemplec'est que ça passedansl'application Djangodansdans un fichierpar exempleque ce soit à côtéerreurinfoou bien la description qu'on rencontrehum humc'est comme çaokLogging Djangoest-ce que
01:15:30 :euhest-ce que ça vous intéresseles déploiementsavec Dockeret tout çasur les serveurseuhou est-ce quec'est des chosesqui sontpasmoi je sais absolumentpas ce que c'estmais du coupça m'intéressepourquoi pasouais par curiositéde toute façonmoi je commenceoui
01:15:50 :je commencec'est importantc'est superc'est superc'est supereuhest-ce queparce que en faitla dernière foisje croisj'en ai déjà faitdans les mentorasmais c'était au débutpeut-être quevous étiez pas encoretrop taquémais ce qu'on peut fairec'est déployerunune application Django
01:16:10 :avec sa base de donnéespost-crésur un serveuravec Dockeret Docker Composesi vous voulezokoui c'est génialça c'est boneuhdéploiementdockerDjangoet non moipour une autre foispas forcément la semaine prochainemais un jourouaiseuhparler un peudesdes tests
01:16:33 :enfin des tests unitaireseuhet notammentdes testsde fonctionqui renvoient pasune valeurmais qui doivent fairede l'affichageou qui font des modificationsenfin des choses comme çaenfin qui font des choseset pas qui renvoient quelque chosed'accordetalors comment tu test une fonction
01:16:50 :qui te retourne pas une valeurmais qui faitqui transforme quelque choseououais là c'est çaokbon là c'est déjà pas maleuhest-ce queaussi la dataça vous intéresseouest-ce quec'est pas une valeurc'est pas une valeurfaire des graphesdes statistiquesdes choses comme ça
01:17:21 :ah ben là ouaisc'est le coeur de ce que j'aimedonc ouiperso heinles autres j'aime pasvraiment ouaisparce que des foisj'aime bien préparerenfin j'aime bienje fais des petitsdes petits cas pratiquesoù on fait un peu de dataoù on gèreon fait un graph
01:17:36 :on fait des statson l'expose dans un dashboardeuhaprès comme c'est des trucsque j'ai déjà faitje le mettrais dans le programmeavantcomme ça ceux quiqui ont déjà vueuhon pourraitenfinc'est prévenucomme çavous viendrez passi ça vous intéresse pas quoi
01:17:54 :ah ouije voulais savoirune petite chosele programmej'ai remarqué qu'ils sontquasiment au dernier momentil y a pas moyende les mettre avantouaisje vais essayerde faire un effort là dessusvoilàc'est juste çaau moins début de journéepeut-êtrecomme ça je vais pouvoir
Aucune occurrence trouvée pour « ».