Session du 08 février 2024 à 20h00
Pratique & Live Coding
Outils & IDE
DevOps & Environnement
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
Déboguer efficacement Python avec PyCharm
Nous allons voir comment faire du débogage avec PyCharm (et un peu de VS Code).
-
Comment mettre des points de debug.
-
Comment lancer son script pour vérifier son exécution.
-
Comment analyser son script pendant le debug.
00:00:00 :Ah, on a Gab et on a Baptiste aussi. Salut Gab, salut Baptiste, content de te voir ducoup Baptiste. Bonsoir, content de vous revoir. Ouais, que t'aies pu venir du coup. Bon ça va,
00:00:31 :je vois qu'on a choisi la même thématique de foncer avec la petite neige, c'est bien,c'est l'époque. Mes collègues vont être au monde. Ah ouais. Non mais j'aime bien,
00:00:45 :j'avoue qu'au début j'étais pas fan et puis Pierre-André qui fait les mentorats en règlegénérale, il avait commencé à le faire et je trouve que ça met une petite ambiance dansles rediffusions, j'aime bien. Pierre-André c'est le jeune cadre new-yorkais. Ouais,
00:01:03 :ouais, lui il a, ouais, j'aime bien ses choix, ça met dans l'ambiance. Alors on va attendreencore quelques petits instants que tout le monde arrive. Bonsoir. Salut. Donc ce soir on va
00:01:23 :voir du debug, c'est quelque chose qui a été demandé par plusieurs personnes. Il y a pasmal de petits sujets qui ont été demandés ces derniers temps et là en plus PA n'était pasdisponible ce soir, du coup j'en ai profité pour reprendre un petit peu ces sujets. Attendez,
00:01:39 :je remets mon micro pour pas que ça se casse la gueule. Hop, c'est bon. Donc il y en a d'autres,là je les ai plus en tête mais j'avais testé, il y avait des trucs de Django si je me souviensbien, j'ai vu les groupes aussi, il y avait pas mal de questions là-dessus, notamment parce qu'on
00:01:53 :en a parlé aussi pour le projet de forum. Il y avait d'autres sujets là, je les ai notés surmon notion donc on les reprendra. Là ce soir on va s'intéresser au debug parce qu'effectivement
00:02:05 :c'est quelque chose sur lequel j'ai une toute petite formation sur docstring mais qui estjustement que j'avais voulu être un peu générique parce que les outils de debug finalement une foisqu'on les connaît un petit peu, on les retrouve d'une façon assez similaire d'un endroit à unautre. Donc que ce soit justement ce que je vais vous montrer là ce soir, que ce soit PyCharm
00:02:27 :mais aussi avec d'autres outils. Là je finis ma formation sur le scrapping, vous en avez peut-êtreentendu parler, une grosse formation de Deezer, je m'en reparle aussi un petit peu. Et justement
00:02:39 :dans cette formation on utilise Playwright et dans Playwright il y a un petit débuggeur intégré quia aussi des outils de debug qui sont similaires à tout ce qu'on utilise dans les autres logiciels.
00:02:49 :Donc voilà une fois qu'on les connaît généralement on peut assez bien transvaser nos connaissancesd'un logiciel à un autre mais des fois il y en a qui ont des petites particularités aussi et jepense que c'est bien aussi de voir plus concrètement, notamment dans PyCharm parce qu'il y a
00:03:04 :beaucoup beaucoup de fonctionnalités dans PyCharm qui sont intéressantes.Attendez je vais finir. C'est bon il n'y a plus de gens qui rejoignent, je vais lancer le partage
00:03:20 :d'écran, je vais vous mettre sur le côté, on va partager tout ça.Ok donc on va commencer. Donc on va voir un petit peu, on va voir dans PyCharm aussi comme
00:03:40 :je vous disais avec un petit exemple que j'ai préparé, on pourra en faire d'autres. Là l'idéede toute façon vous allez voir avec le debug c'est un peu, il y a une partie technique c'estsûr parce que bon il y a des outils à maîtriser et vous allez voir dans ce que je vais vous montrer
00:03:55 :là avec PyCharm qu'il y a des fonctionnalités assez avancées qui sont intéressantes mais c'estaussi une façon de faire bien sûr parce que c'est un peu le problème des fois que je vois,c'est qu'il y a des gens qui comprennent les outils mais après dans quel cas l'utiliseret comment débugger, ça après c'est aussi le côté théorique dont je parle de façon un petit
00:04:16 :peu éparpillée dans toutes les formations. Là justement j'en profite du coup pour parler decette formation sur le scrapping donc elle va sortir sur Youtube normalement entre le 12 etle 15 février donc c'est la plus grosse formation que je vais sortir sur Youtube qui va durer unedizaine d'heures et il y aura bien sûr la formation aussi qui va probablement être un parcours vu la
00:04:39 :longueur du truc donc je vais vous montrer là par rapport au parcours, je vais vous remettre là,donc ce sera un parcours ici dans les parcours et formations je pense que ça va être un nouveauparcours ici et j'ai donc scrapping 4 formations donc les bases du scrapping, contourner les
00:05:05 :obstacles, scrapping avancé et j'ai deux projets aussi que j'ai pas ici sur cette page mais unprojet scrapping Airbnb et un projet de scrapping d'Amazon donc j'ai vraiment voulu faire un trucqui va vraiment du début jusqu'à la fin parce que toutes les formations de scrapping que jevois s'arrêtent à des exemples super bateau avec des sites d'exemple et en fait on arrive
00:05:32 :jamais finalement quand on arrive sur des vrais sites sur lesquels on veut récupérer desinformations à les récupérer parce qu'on se fait bloquer parce que les cas de figure sont pluscomplexes qu'un site d'exemple etc et à la fin j'ai même on va jusqu'à mettre le script sur un
00:05:44 :serveur privé virtuel mettre un cron job en place pour récupérer les informations régulièrement pouravoir des alertes et là où ça rejoint ce que l'on va voir ce soir aussi c'est qu'il y a toute unemise en place de la gestion des erreurs parce que là encore c'est quelque chose d'important et c'est
00:05:59 :pour ça que ça rejoint un petit peu le debug parce que bien sûr quand on fait de la gestiond'erreurs là comme vous le voyez ici par exemple avec un try except c'est le genre de choses qu'onpeut détecter aussi avec du debug pour détecter les erreurs pour voir les types d'erreurs qui
00:06:14 :peuvent arriver comment les gérer etc et c'est quelque chose que je vois assez rarement abordéet donc là j'ai voulu faire des scripts c'est pour ça que ça dure dix heures vous allez voir c'estassez long des fois il y a des scripts qui pourraient faire quatre lignes et finalement ça
00:06:25 :fait 50 lignes parce qu'on met un logging en place parce qu'on met des try except parce queon envoie les informations où il faut donc avec des fichiers de logging etc finalement ça finit parfaire beaucoup de code mais c'est important de faire ça surtout sur le scrapping parce qu'il
00:06:40 :y a plein de choses qui peuvent arriver il y a des requêtes qui peuvent planter il y a des chosesqui peuvent changer au niveau du site donc il y a plein plein de choses comme ça qui peuventarriver il faut donc gérer tout ça sinon en fait le script là encore il marche une fois sur dix
00:06:51 :donc je vais commencer par vous montrer dans PyCharm on verra un petit peu aussi VS Code jemaîtrise moins VS Code ça fait un petit moment que je l'utilise plus je l'utilisais il y a quelquesannées comme outil principal et depuis je suis passé sur PyCharm que j'adore et dont je ne
00:07:07 :passerai plus pour info combien de personnes là dans le chat si vous pouvez me dire sont sur surPyCharm ou VS Code ou autres s'il y en a d'autres pour que j'ai une petite idée si finalement bonaprès si tout le monde est sur VS Code il y a quand même pas mal de gens sur VS Code ça a l'air
00:07:24 :un peu 50-50 ok bon ça a l'air assez partagé de toute façon comme je vous dis moi je vais vousmontrer déjà sur PyCharm parce que c'est ce que je maîtrise le plus et c'est aussi là où il y ale plus de fonctionnalités après probablement qu'elles sont aussi sur VS Code et c'est juste
00:07:40 :que je les connais je les connais pas hop on va faire un peu de ménage là dedans et doncdonc voilà je vais commencer avec ça donc là j'ai un script assez simple je vais le lancer vousallez voir ce que ça donne en gros c'est juste un script qui va ouvrir donc c'est le genre de
00:07:59 :script voilà donc là ça se ça s'arrête justement parce que j'ai pas fait de pause ou de quoi quece soit on lance le script ça ouvre tout simplement un navigateur qui va naviguer sur Google et làvous voyez c'est ce dont je vous parlais c'est le petit débuggeur de Playwright qui dispose ici
00:08:16 :aussi d'outils qui ressemblent aux outils de débug qu'on va voir tout de suite donc il y a un outilde débug à l'intérieur de Playwright qui ressemble presque à celui de PyCharm qui est un peu plussimple mais enfin celui de Playwright est plus simple que PyCharm et vous pouvez donc c'est ce
00:08:34 :que je montre dans la formation après c'est là où ça devient un petit peu compliqué choisir defaire le débug soit dans Playwright soit dans PyCharm donc les outils de débug et c'est je croisque c'était ta question aussi si là si je me trompe pas que tu avais posé sur le discord je sais plus
00:08:48 :si c'était toi ou quelqu'un d'autre parce qu'en fait le débug du coup ça se fait vraiment avecle logiciel il y a des façons de faire du débug avec pdb si je me souviens bien ouais ça doitêtre ça pdb point c'est ça point si je me souviens bien c'est ça c'est des débuggeurs que vous pouvez
00:09:06 :lancer en ligne de commande vous allez mettre un par exemple un pdb si je me souviens bien pourun pause pour faire une pause donc ce qui est un peu la même chose que de faire enfin qui est lamême chose en fait que de faire ce qu'on appelle un breakpoint un point d'arrêt donc il y a des
00:09:20 :débuggeurs qui existent comme ça qui sont des lignes de code que vous allez écrire et aprèsvous pouvez lancer votre script dans un terminal et après dans le terminal vous allez pouvoir unpeu comme avec vim par exemple en entrant des commandes dans le terminal continuer arrêterredémarrer quelque chose moi j'ai jamais trop utilisé ces outils là vu qu'on a dans les trois
00:09:41 :quarts des outils qu'on utilise des outils de débugging je trouve que ça sert pas à grandchose d'utiliser des outils qui nécessitent de rajouter des lignes de code et qui sont moinsuser friendly comme on dit en bon français. Donc l'outil principal du debugging c'est le point
00:09:57 :d'arrêt donc le breakpoint ici qui vous allez voir est assez puissant avec PyCharm et je pensecomme je vous le dis avec BaseCode aussi c'est juste que je l'ai moins exploré. Donc le point
00:10:08 :d'arrêt qu'est ce que ça fait ça fait juste dire qu'on veut s'arrêter à un endroit du script etpour du coup s'arrêter effectivement dans ce script il faut lancer son script en mode débugdonc c'est là je crois si là c'était ta question parce que donc je ne sais plus si c'était toi
00:10:22 :mais il y a une question cette semaine sur Dougstring justement sur le debug qui disaiten gros j'ai mis un point d'arrêt je lance mon script et le script ne s'arrête pas. Oui
00:10:30 :c'est moi. Après je mets le rand mais il n'arrive plus jamais dans ma fonction. Donc c'est ça enfait là si je retrouve mon script qui est ici donc là tu vois effectivement si je mets un pointd'arrêt ici et que là je vérifie que je suis bien non je suis pas là dedans ça doit être un peu
00:10:53 :plus haut non c'était merde je vais fermer je vais ouvrir tac ok scrapping c'est ici ouais okdonc là j'ai mon script main ouais c'est ça qui est ici donc là tu vois j'ai mis un point dedebug et je peux lancer donc là j'ai un environnement virtuel je fais python main.py je lance et là tu
00:11:15 :vois ça se lance mais ça s'arrête pas parce que je lance le script justement dans un terminal donclà j'utilise le terminal d'intégrer à PyCharm mais c'est exactement comme si j'ouvrais un terminalcomme ça ici pour lancer le script donc là tu vois ça s'arrête pas parce qu'effectivement c'est
00:11:30 :des outils le breakpoint ici c'est un outil qui vient avec PyCharm et comme je le dis enfait les débuggeurs donc le débuggeur dont je vous ai parlé là le pdb.pos etc ça c'est un
00:11:48 :débuggeur que tu peux lancer depuis le terminal et que tu vas diriger ouais modifier depuis leterminal moi donc comme je vous dis j'aime pas trop c'est enfin j'ai jamais trouvé ça trèspratique donc là si je mets un point de debug et je veux m'arrêter ici il faut que je lance mon
00:12:05 :script en mode debug donc là comme d'hab il y a plusieurs façons de faire dans PyCharm vouspouvez faire un clic droit sur le nom du fichier dans la table ici et vous avez à chaque fois lesdeux options donc run ou debug et j'ai la même chose ici en haut donc avec mes configurations à
00:12:20 :chaque fois j'ai les différents outils donc l'outil simple ici run et l'outil debug donclà encore même si j'ai un point d'arrêt si je lance en mode run il va pas s'arrêter il vajuste lancer le script et là tu vois il s'arrête pas par contre si je lance en mode debug là il
00:12:34 :va lancer le débuggeur alors là il prend le pas donc la fenêtre est derrière je vais faire un petit peu de place comme çadonc donc là tu vois il s'est arrêté parce que je l'ai lancé en mode debug et c'est làqu'on a donc toutes les informations intéressantes et effectivement comme le dit Gab je crois c'est
00:12:53 :ça Gab dans le dans le chat là ce qui est intéressant avec PyCharm j'imagine aussi avecles autres j'ai pas vérifié avec VSCode c'est que on a les valeurs des différentes variablesdans l'éditeur ici donc là on peut voir les différentes variables et ce qu'ellescontiennent on peut cliquer dessus et on voit les attributs qu'elles contiennent et on a tout ça
00:13:12 :qui est également ici on a toujours des special variables qui sont toutes les variables un peumagiques qui sont définis qui sont définis donc le file par exemple variable que je montre assezsouvent dans les formations qui permet de récupérer le chemin complet vers le fichier après éventuellementle dossier etc le name qui est le fameux quand on fait if name égal main etc la structure
00:13:35 :conditionnelle là c'est que vous connaissiez probablement aussi cette fameuse hop ça donc onutilise pareil cette variable spéciale donc ça c'est des variables que je voilà on va rarementles vérifier et après on a toutes les autres variables qui sont dans l'espace global de notrescript donc là on voit bien le browser qu'on a défini ici la page qu'on a défini ici et le
00:13:54 :playwright qui est cette variable qu'on a créé avec le context manager ici et et donc toutes toutesces informations qu'on a quand on clique ici on peut les retrouver dans cette dans cet outil iciet on voit à chaque fois donc ça se déplie je sais pas si c'est très très visible là c'est
00:14:12 :peut-être un peu petit je peux peut-être grossir un petit peu le UI si je ne me trompe pas apparenceouais ok on va essayer là et bon ça ça change pas grand chose donc donc là vous voyez on a cesattributs qui sont disponibles aussi à chaque fois vous avez des attributs qui sont donc les
00:14:34 :attributs protégés c'est les attributs qui commencent par un tiré du bas donc là pourceux qui sont rendus dans les parties orientées objets c'est aussi quelque chose qui doit vousqui doit vous dire quelque chose c'était pas une très belle phrase mais vous comprenez doncc'est des attributs justement qu'on veut pas qui sont protégés donc on peut toujours y avoir accès
00:14:51 :avec python bien sûr mais voilà ils sont pas affichés par défaut et à chaque fois donc cesattributs ça va être différentes choses là par exemple on voit que c'est une liste donc sur lebrowser c'est un objet de type browser dans ce browser on a un attribut contexte qui une liste
00:15:06 :qui contient un élément quand on a des listes à chaque fois on va voir les différents élémentsqui sont contenus à l'intérieur de cette liste donc là si j'avais trois éléments on aurait 0 1 2 età chaque fois on a l'élément on voit la variable spéciale justement l'attribut spécial sur les
00:15:21 :listes qui est l'attribut len qui est appelé quand on fait quand on utilise la fonction len donclà ça nous retourne 1 c'est logique parce qu'on a qu'un seul élément et dans cet élément donc cepremier élément je peux continuer je vois que dans le contexte j'ai un browser et on a en fait
00:15:34 :voilà des contextes comme ça qui peuvent être créés à l'infini à l'intérieur de ce browser dansle cas de playwright et n'hésitez pas à m'interrompre ou à écrire dans le chat si vous avez desquestions je défile mais si vous avez la moindre question n'hésitez pas à m'interrompre donc
00:15:51 :donc là je me suis arrêté à ce point de débug et je peux voir donc toutes les informations quej'ai dans mon script à cet instant ici je vais faire un petit peu de place mon ordi est pas trèsréceptif là ok c'est un peu lent ça bug ok donc et là j'ai un truc très intéressant ici c'est un
00:16:11 :petit onglet qui me permet d'évaluer des expressions je vais avant avant d'aller làdedans je vais vous montrer déjà les outils principaux de débug donc on les a tous ici etc'est ce que je vous dis c'est que ça va être les mêmes en fait en fonction des différents alors
00:16:24 :je vais ramener mon Visual Studio Code là si je lance ce script donc dans Visual Studio Code jepense que alors où est-ce que c'est ici ça doit être voilà Python Debugger donc là par exemple sije mets un point de débug ici vous voyez même même chose on met un point de débug dans la
00:16:39 :marge on clique on a un petit point rouge on clique ici là je peux lancer mon script normalementet ça va ça va rien faire donc comme ça je continue ça fonctionne et ça ne s'arrête pas par contre sije clique ici et que je fais Python Debugger, Debug Python File là vous voyez qu'on va rentrer dans
00:16:55 :ce même mode avec les mêmes outils qui vont être disséminés un petit peu ailleurs voilà ici en hautdonc on a une petite barre voilà qu'on peut déplacer et là vous allez voir qu'on retrouve à peu prèsla même chose on a donc l'outil Resume qui permet tout simplement de continuer le script jusqu'au
00:17:10 :prochain point de débug, on a l'outil Step Over qui permet d'aller d'exécuter la ligne où onest arrêté et de juste exécuter ligne par ligne et après on a deux outils qui sont Step Into etStep Out ça c'est quand on est dans quand on a des fonctions on peut rentrer à l'intérieur d'une
00:17:24 :fonction ou sortir de la fonction je vais vous montrer des exemples après pour que ce soit unpeu plus un peu plus visible et vous voyez que ces outils on a les mêmes ici on peut faire unResume là on a même le bouton Pause donc ça c'est si jamais vous avez des processus assez lent avec
00:17:38 :pas mal de choses qui se passent et avec des boucles par exemple avec des processus qui sontappelés vous pouvez dire ok arrête le programme et il va s'arrêter là où il est je crois pasd'ailleurs que j'ai on a le bouton d'arrêt je vois pas de bouton de pause sur Visual Studio Code
00:17:52 :ce qui prouve son infériorité par rapport à PyCharm petite pique gratuite il existe probablementailleurs et on a les mêmes boutons ici donc Step Over donc c'est le même bouton pour aller lignepar ligne le Step In et le Step Into my code ce sont encore un autre truc je sais plus ouais je
00:18:10 :n'ai jamais utilisé ça les Step In et les Step Out généralement je les utilise assez peu parcequ'en fait généralement ça peut être intéressant si vraiment vous avez une fonction qui fait unprocessus et vous n'avez pas et encore j'allais dire si vous n'avez pas pensé à mettre de point
00:18:25 :de débug vous pouvez toujours en rajouter par la suite donc en fait généralement je voilà je medis enfin je sais pas j'ai jamais vraiment eu de cas de figure dans lesquels j'ai besoin d'utiliserles Step Into ou Step Out si j'avais une fonction ici à la place du page.go to en fait j'irais
00:18:41 :directement dans ma fonction mettre un point de débug ça peut être intéressant si ouais c'est çac'est un peu plus à la volée je dirais si d'un coup vous dites ah tiens il y a cette fonction làj'aimerais bien aller voir vous faites un Step Into ça va rentrer dans la fonction et après faire
00:18:57 :un Step Over pour exécuter différentes lignes de la fonction mais généralement ouais j'en n'ai paseu grande utilité mais donc les principaux outils qu'on va utiliser c'est pour ça que ça fait unpetit peu peur au début il y a plein de trucs dans tous les sens principalement on utilise le
00:19:10 :Resume Program et le Step Over qui sont les deux que j'utilise à 99% du temps et le EvaluateExpression ici il est assez intéressant aussi ça permet de faire des choses on the fly en faitc'est un petit peu comme on the fly je vais essayer d'éviter les anglicismes à la volée c'est ça
00:19:28 :donc là on peut faire n'importe quoi je peux définir une variable si je veux je peux faire unprint là vous voyez j'ai fait une j'ai défini une variable et la variable est désormais dans moncontexte global mais je peux aussi utiliser justement les éléments que j'ai ici donc si je
00:19:41 :veux faire par exemple un dire de page je peux faire dire de mon objet page et puis là ça vam'afficher tous les attributs de cet élément donc vous voyez il y a plein de choses qu'on peutfaire ici on va avoir aussi de l'autocomplétion donc là je peux faire un page.url par exemple
00:19:57 :si je veux vérifier l'url donc là c'est des choses qu'on va retrouver également dans lesattributs ici mais je peux les évaluer si par exemple on veut faire des choses on veut testeron veut dire tiens page.url là je vois que c'est un type string donc je pourrais se dire bah tiens
00:20:10 :on va essayer de faire un split sur les deux points donc là ça me retourne ça et après jevais récupérer l'élément 0 voilà donc là je me dis ok j'ai réussi à faire ma petite formule c'estbon je peux me la mettre dans le script et là comme ça vous pouvez la mettre une fois que vous
00:20:25 :avez testé les choses dans le contexte. Vous pouvez faire la même chose aussi avec une consoledonc en cliquant sur console ici ça va être sensiblement la même chose là si j'affichele A par exemple vous voyez qu'il est dans le contexte de mon script donc il a accès à toutes
00:20:38 :les variables qui sont ici et là la différence c'est juste que vous êtes dans une console Pythondonc là voilà si je fais un print de A j'ai ça, si je fais un print de type de A ça va me dire quec'est un int, je peux refaire ce que j'avais avec le dire de page page.url.split sur les deux
00:20:53 :points je peux refaire exactement la même chose ici c'est juste que c'est une console Pythondonc voilà je l'utilise assez rarement personnellement souvent je fais mes petitstests ici et ça me suffit mais voilà il faut savoir que c'est possible aussi d'aller dansune console Python. Ça va jusqu'à présent ? Il n'y a pas de pas de questions ? Tout est clair ?
00:21:14 :Ok donc super donc voilà déjà là je peux vous dire qu'on a fait 90% du debug franchement toutce que je vais vous montrer à partir de là c'est des petits cas d'usage en fait que j'utiliseassez rarement. Il y a un cas de figure, alors ça si je me souviens bien c'est la même chose
00:21:44 :mais avec une fenêtre séparée donc avec la petite calculatrice ici qui vous permet d'avoir une visionun petit peu plus grande. Vous pouvez aussi inspecter des fois si je me trompe pas on va
00:21:53 :essayer d'aller voir si je fais alors dans playwright par exemple ça va être page.contentvoilà là il n'y a pas grand chose des fois en fait si vous avez vraiment beaucoup de choses alorslà ce que je vais faire c'est que je vais faire un page.pause après je vais relancer mon
00:22:11 :débug donc là vous avez le rerun ici en mode débug vous pouvez recliquer aussi sur l'icône etça va le relancer et là vous allez voir donc je vais faire un step over donc je vais passer àtravers cette page parce que là dans mon contexte j'avais rien on était sur une page donc c'est
00:22:25 :browser.newpage c'est exactement comme si voilà vous ouvriez un navigateur chrome mais sansaller sur une url là je vais sur l'url et maintenant je peux faire un page.content et ça
00:22:37 :va m'afficher tout le contenu de l'url et là vous voyez il y a beaucoup de choses quand il y abeaucoup de choses vous pouvez faire un view ici vous avez une fenêtre qui s'ouvre dans cettefenêtre vous pouvez faire un ctrl f aussi si vous voulez chercher des choses vous avez les résultats
00:22:48 :de recherche les filtres etc donc ça peut être intéressant aussi si vous voulez chercherdirectement là dedans sinon vous voyez on peut dire par exemple bah tiens on va chercher est-ceque j'ai body in page content oui c'est le cas donc là vous voyez vous pouvez vraiment fairetout ce que vous voulez ici c'est vraiment des expressions exactement comme des expressions
00:23:06 :comme vous le feriez dans une console python et à chaque fois vous avez le résultat iciqui est là et qui vous dit le résultat de l'expression. Ce qu'on peut faire aussi que
00:23:15 :j'aime enfin c'est la fonctionnalité je vous dirais avancée la plus intéressante alorsattendez je vais voir juste le chat une question ouais ok je vais revenir là dessus après Yanisbonne question effectivement donc là vous voyez donc j'ai fait un point de débug qui est justequi est très simple il va juste s'arrêter à ce niveau là. Notez aussi que le point de débug
00:23:43 :s'arrête avant d'exécuter la ligne donc vous voyez que quand là si je relance mon script quandj'arrive ici là ma page vous voyez c'est l'url c'est about blank puisque j'ai pas encore exécutécette ligne donc quand on fait un step over en fait quand on met un breakpoint il s'arrête au
00:23:58 :début de la ligne et quand on fait un step over il va à la fin enfin il exécute cette ligne etil se place à la ligne suivante qui elle non plus n'est pas exécutée du coup et quand je vais faireun step over ça va continuer et là dans ce cas-ci comme il n'y a plus rien après ça va fermer le
00:24:11 :script. J'ai d'ailleurs fait une vérification avant le mentorat parce qu'il y a un truc qui mechiffonnait depuis des années et auquel je n'avais jamais pris le temps de chercher la réponse c'estque imaginez par exemple que je veuille mettre mon point de débug ici donc je relance on arrive
00:24:26 :au page point pause et là je veux faire un step over le problème c'est que si je fais un stepover pour exécuter cette ligne il n'y a plus rien après donc si je fais un step over ça le faitalors là c'est peut-être pas le meilleur exemple parce que là j'ai le debugger qui quand on fait
00:24:39 :un page point pause ça ouvre le debugger et ça met en pause du coup le debugger de playwright doncje vais juste faire un print debug je vais lancer voilà et donc là on arrive avec mon avant cetteligne là et si je vais donc dans mon console je continue avec ce step over là vous voyez que
00:25:00 :ça m'affiche le debug alors là aussi j'ai le context manager c'est là encore pas le meilleurexemple mais si je continue en fait voilà ça va continuer avec le script je vais prendre unexemple plus simple que playwright parce que là ça à chaque fois il ya des cas de figures un peu
00:25:12 :spécifiques on va faire un truc comme ça voilà print print debug et puis print on va faire commeça donc troisième essai je relance hop ça lance bien ça ici donc on arrive ici et là si je faisun step over en fait ça affiche bien le debug mais ça finit le script donc là j'ai plus la fenêtre
00:25:32 :que j'avais qui me permet de vérifier les variables etc donc là c'est un peuproblématique enfin c'est un peu problématique ça dépend justement ce que vous voulez faire c'estvrai que bon voilà si on arrive à la dernière ligne on pourra se dire ok on exécute la dernièreligne ça fonctionne s'il n'y a pas d'erreur c'est bon il n'y a pas de soucis et ça va comme ça moi
00:25:50 :des fois il m'arrive des cas de figure où je veux vérifier que la dernière ligne s'exécute bienpuis je veux rester dans mon contexte qu'on a vu là avec les threads and variables sauf que làcomme il n'y a rien après en fait le script il s'arrête donc moi ce que j'avais pris comme
00:26:02 :habitude de faire c'est juste de mettre une ligne en plus un print un pass peu importe même uncommentaire ça peut être ça et comme ça en fait on relance le script alors justement on se met onse met à ce niveau là et là si je relance le script on arrive à ce debug là je lance alors
00:26:18 :le commentaire il semble pas marcher je vais faire un print je pensais que le commentaire marchaitdonc là je voilà je vais à la ligne et là comme j'ai mis un print du coup vous voyez il s'arrêtedonc moi c'est la technique que j'utilisais depuis des années et des années et là avant ce
00:26:31 :mentorat je me suis dit bon ok ça se trouve il y a quand même peut-être une façon mieux de faireet dans les recherches que j'ai faites j'ai pas trouvé justement les gens disaient exactement ceque je viens de vous dire non en fait tu fous un print tu fous un pass et tu mets ton point de
00:26:42 :debug avant comme ça et puis tu peux tu peux suspendre le ton script donc à voir je vaiscontinuer à vérifier quand même un petit peu parce que ça me semblait bizarre peut-être queça dépend aussi là encore des différents IDE comme VS Code, PyCharm etc que vous utilisez
00:26:57 :mais voilà donc juste pour vous dire moi j'utilise cette petite technique quand je veux exécuter ladernière ligne et pas sortir de mon script et avoir quand même accès à tout ça. Un autre truc
00:27:05 :qui est intéressant donc comme je vous disais avant d'arriver sur la question de Yanis je vaisterminer un peu sur l'aspect technique des choses donc là vous avez d'autres choses vous pouvez voirles breakpoints qui sont dans votre script donc si je mets un breakpoint ici vous allez voir votre
00:27:20 :breakpoint donc là il y a des breakpoints de Django justement si on a des templates on va voirun petit peu ça on peut mettre des breakpoints aussi dans les templates et là vous avez votrebreakpoint donc si jamais vous en avez un petit peu partout éparpillé justement dans des dans des
00:27:34 :gros projets bah ça peut être bien d'avoir cette fenêtre pour voir précisément où vous les avezet vous découvrez aussi ce que je voulais vous montrer donc ce fameux condition qui est assezintéressant c'est des breakpoints conditionnels ça qu'est ce que c'est mieux ah oui mieux debreakpoint ça peut être bien aussi si des fois voilà vous voulez juste les mettre en pause sans
00:27:52 :avoir à les enlever manuellement là encore j'utilise ça assez rarement mais et puis làencore il y a d'autres trucs que j'utilise assez rarement rem2cursor ça vous permet de mettrevotre curseur quelque part et de dire va jusqu'à ce point là dans ce cas là moi ce que je fais
00:28:07 :c'est tout simplement mettre un autre point de débug ça aussi c'est quelque chose que lesjoueurs les débutants souvent hésitait à faire c'est que si je fais ça par exemple c'est on vamettre un dé on va faire des scripts assez simple si je fais ça je peux mettre un point de débug
00:28:20 :ici hop comme ça et là si je relance donc on va s'arrêter au premier point de débug ici et quandje fais un resume en fait il va s'arrêter au prochain point de débug c'est ce que je vousdisais tout à l'heure donc là si je fais un step over on va y aller ligne par ligne mais voilà ça
00:28:33 :peut être un peu long de faire du ligne par ligne donc ce que je peux faire si je relance le scripton s'arrête ici et si vous aussi voilà vous savez que ces lignes elles fonctionnent bien il n'y apas de problème et vous voulez vous arrêter avant cette ligne voilà vous faites un resume et il va
00:28:45 :s'arrêter au prochain point de débug donc ce que vous pouvez faire aussi si comme je vous disaisc'est un run2cursor vous mettez votre curseur ici par exemple vous faites run2cursor et vousvoyez qu'il va s'arrêter ici voilà donc c'est des petits trucs comme ça en plus qui peuvent être
00:29:00 :pratiques si vous voulez faire du débug rapidement sans avoir besoin de mettre des points de lesenlever etc vous voyez là on rentre vraiment dans les détails et ce que vous pouvez faire aussioui dernier point c'est que si je mets un point de débug là et là je me dis ah merde j'avais pas
00:29:13 :mis un point de débug et finalement je vais m'arrêter ici vous n'êtes pas obligé d'arrêterle script de mettre un point de débug et de relancer le script vous pouvez les ajouter aprèscoup donc vous pouvez lancer ça vous dire ok donc là ça marche je fais un step over super c'est
00:29:25 :bon ok donc là j'ai pas envie de faire un step over sur les trois lignes ou les cinquante lignesqui suivent donc vous mettez un autre point vous vous dites ok donc maintenant que je sais que mona égale 5 il marche bien je sais que tout ça ça marche bien je veux que vérifier que mon d
00:29:40 :égale 10 il fonctionne donc je mets un point de débug ici je fais resume et là vous voyez qu'il vas'arrêter ici donc vous pouvez pendant que le débug roule rajouter des points de débug après ousinon comme on l'a vu donc faire un run to cursor. Donc voilà j'en arrive finalement au conditionnel
00:30:00 :alors qu'est ce que je pourrais vous montrer comme exemple qui soit probant pour ça ok onva mettre on va faire b égale input entrer un nombre et on va faire c égale a plus b on vafaire un print de c on va dire print bravo ok donc là ce que je vais faire oui ça on va le
00:30:22 :convertir en nombre et donc là ce que je vais faire c'est que je vais mettre un break pointici mais je vais faire un clic droit et on va ajouter cette fois ci un break point conditionnelet là en fait ce qu'on va dire c'est que on va ajouter une condition qu'on va dire on va dire
00:30:36 :tu t'arrêtes ici seulement si cette condition est vraie donc là on va mettre par exemple cégale à 10 et donc là qu'est ce que ça va faire c'est qu'il va s'arrêter uniquement si cest égal à 10 donc là je relance en mode débug on arrive ici je continue ok le 5 qui marche je
00:30:54 :continue step over là on entre dans la console entrer un nombre donc si je mets 6 on arrive làet là je suis ici donc là on a fait notre print et là c'est ok attendez là il semble pas jecontinue resume oui c'est ça et là vous voyez j'ai fait un resume et il s'est pas arrêté il
00:31:14 :s'est pas arrêté à la ligne du print il a printé le 11 il a printé le bravo il a continué si parcontre donc je relance hop je relance tac dans ma console ok alors là je fais un step over c'estça je continue entre un nombre là je vais mettre 5 hop on continue je fais un resume et là vous
00:31:35 :voyez il s'arrête ici parce que là la condition elle est vérifiée donc là après je peux faire unstep over et continuer mais là il s'est arrêté ici parce que la condition que j'ai mis donc unecondition toute simple est vérifiée donc ça c'est quand même quelque chose qui est assez pratique
00:31:46 :des fois parce que alors si je réfléchis à un exemple là je sais que c'est quand même assezrare mais ça m'est arrivé notamment dans des projets justement un peu plus complexe commeDjango ça peut être des trucs par exemple avec Stripe si vous avez vous faites des tests avec
00:32:03 :votre webbook et vous voulez vérifier des choses et vous dites ok bah là tu vas tu vas arrêter lescript seulement si le webbook il contient telle information donc si j'ai telle telle informationdans le dictionnaire de l'événement du webbook tu t'arrêtes parce qu'en fait des fois en fait
00:32:19 :on va lancer plein d'événements et on veut pas on va avoir Stripe qui va envoyer 10 webbookset on n'a pas envie à chaque fois qu'il y a un événement Stripe qui arrive qui sont qui contientdes événements qui nous intéressent pas qui s'arrêtent oui effectivement c'est dans ces
00:32:34 :quatre figures que c'est assez pratique donc voilà si vous avez votre script vous savezqui va passer ça peut être par exemple aussi avec du Django si vous avez vous mettez un pointde debug justement dans un middleware donc les middleware c'est pour ceux qui connaissent pasc'est un petit une fonction si vous voulez qu'on va mettre entre les requêtes donc à chaque fois
00:32:57 :que vous avez une requête qui va être effectuée ça va passer à travers la fonction donc là encorec'est le genre de choses qui peut être assez lourd parce que quand on fait du web on peutavoir 50 requêtes sur une page et donc si vous mettez un point de debug dans votre middleware
00:33:09 :sans condition à chaque fois que vous avez une requête il va s'arrêter donc si c'est des requêtesd'images des requêtes de css etc qui fonctionnent bien en fait vous allez à chaque fois avoir votrescript qui va s'arrêter ça va être assez pénible de devoir faire un resume pour arriver sur la 17e
00:33:24 :requête qui est la requête qui vous intéresse qui contient les données qui posent problème que vousvoulez débuguer donc là dans ce cas là ce serait aussi un très bon exemple de conditional breakconditional breakpoint vous allez dire par exemple if request point on va dire httpreferrer par exemple comme ça voilà point resource égal à xml and request point je sais pas quoi
00:33:56 :voilà point user égal à des mots et ben là en fait là tu t'arrêtes et tu me permets de débuguerdonc ça voilà c'est quelque chose qui que j'utilise quand même assez souvent dans ces caslà et qui vous sauve vraiment c'est ça c'est quand même le genre de cas assez important parce que
00:34:11 :je vois beaucoup de gens qui ne font pas de débug à cause de ça qui vont préférer faire des printsqui vont dire ah bah là en fait j'ai mis un point de débug mais il s'arrête 15 fois parce que j'ai15 requêtes et c'est super chiant et effectivement vous avez pas envie de faire resume à chaque fois
00:34:25 :parce qu'en fait vous allez passer plus de temps à résumer votre script à chaque fois si votrerequête c'est la 15e vous allez perdre un temps fou donc je vois beaucoup de gens qui font pasqui voient ce genre d'expérience et qui disent bon ok je vais pas faire de débug je vais plutôt
00:34:37 :mettre plein de prints partout et qui vont perdre du temps là encore avec les prints alors que sivous mettez la bonne condition le bon breakpoint au bon endroit avec ces outils comme ça bah là enfait vous pouvez vraiment faire du débug efficace. Ca va pour ça ? Pas de questions sur l'aspect
00:34:56 :technique ? Je réfléchis sur l'aspect technique s'il y a d'autres choses me semble que ça faitpas mal le tour je vais relancer pour être sûr on a vu ça ouais je vais vous montrer le step intoet après on va voir Yanis là ce que tu disais donc je vais ouais je vais faire et puis Visual
00:35:19 :Studio Code donc si je reviens là vous voyez c'est assez similaire donc là je vais faire un stepover on continue on continue si je fais un resume ça continue jusqu'à jusqu'à ce que voilà jusqu'àce qu'on a un autre breakpoint ça finit avec le script quand je relance si je fais ça vous voyez
00:35:34 :qu'on a à peu près la même chose on a les variables locales les variables globales leswatch en fait c'est ça vous permet d'avoir toujours donc si je mets quelque chose ici c'est ça va toutle temps analyser le résultat c'est un peu comme si si je reviens dans le script ici c'est en fait
00:35:51 :si vous avez toujours une expression vous faites régulièrement et que vous n'avez pas envie de laretaper à chaque fois dans ce dans cette boîte vous pouvez l'ajouter en watch et en fait il va àchaque fois l'exécuter pendant le debug donc ça vous permet voilà ça vous permet de c'est quelque
00:36:06 :chose que j'utilise assez rarement là encore mais si vous avez potentiellement des expressions vousfaites régulièrement là dedans que vous voulez pas mettre dans votre code parce que c'est plusune vérification quelque chose vous pouvez l'ajouter comme un watch c'est quelque choseque vous avez aussi aussi sur la plupart des débuggeurs. Alors Edouard, oui je crois que oui
00:36:32 :bonne question je vais hop quitter tout ça tac si je fais un clic droit, edit breakpoint, ouais c'estça tu vois on a expression ici ah oui il y a aussi hitcount alors le hitcount je crois qu'il estdispo aussi, conditions je sais plus breakpoint conditions peut-être que dans les conditions le
00:36:59 :hitcount c'est vous voyez il y a plein de trucs plein de trucs avancés vous pouvez vous voyezici dire bah si tu as cette condition vous pouvez en lier plusieurs l'une avec l'autre vous pouvezvous pouvez enlever un breakpoint une fois qu'on est passé dedans donc là encore c'est des trucs
00:37:17 :j'ai pas vraiment une utilisation le hitcount donc c'est juste voilà si dans une boucle wild çapourrait être ça pourrait être justement un bon cas d'utilisation vous dites voilà si mon scriptil roule enfin si on passe plus de 50 fois dans cette boucle wild donc si on a si on a un breakpoint
00:37:37 :ici que je l'édite et que là on va mettre un hitcount de 10 voilà ça veut dire que lebreakpoint va enfin le script va s'arrêter seulement si on passe dix fois sur ce breakpointlà encore j'ai jamais eu trop la nécessité de ce genre de cas de figure mais ça existe
00:37:52 :donc si ça vous va on va alors je réfléchis sur un projet Django est-ce que je prends docstringqu'est ce que je pourrais vous montrer sur docstring projet Django qu'est ce que j'aije pense que je peux vous montrer attendez je vais regarder ça je dois avoir le projet de
00:38:18 :blog qui peut être pas mal est-ce qu'il est créé un site l'applicationles formulaires les basesalors ouais Gab t'as une question?ouais parce que moi les buggers avec Django je l'utilise très rarement parce que je trouve qu'ensoit Django en fait il te sert tout sur un plateau à chaque fois tu sais où est l'erreur
00:38:47 :du coup est-ce que tu t'en sers souvent avec Django ou ça reste rare quand même?si je l'utilise quand même bah je l'utilise en fait quand j'ai de la logique à faire parceque alors attendez je vais juste je vais trouver le projet blog Django blog voilà ok c'est
00:39:17 :bon je l'ai trouvé on va faire ça oui donc je l'utilise quand j'ai des logiques à fairejustement quand par exemple tu vois je vais être ça peut être des trucs justement quandtu as l'exemple de Stripe et là encore assez assez bon où tu vas avoir beaucoup de données
00:39:33 :qui vont venir de partout et des boucles qui sont assez pénibles à faire tu vois Stripe ilfaut passer à travers les trois quatre étapes de check out tu as beaucoup d'informations àchaque fois et du coup bah c'est un peu chiant avec des prints dès que tu vois si tu n'as pas
00:39:49 :printé la bonne information ou que tu as un truc que tu n'avais pas prévu bah ça tu finis par ypasser des heures parce qu'en fait tu vas relancer un processus qui est long à chaque fois donc c'estlà où effectivement mettre un petit point de debug et puis de vraiment t'arrêter à un endroit précis
00:40:04 :pouvoir tester évaluer comme on l'a vu là avec le evaluate expression fouiller dans ton code dansles attributs dans tout ce qu'il y a de disponible bah tu gagnes un temps fou. Ça peut être aussi
00:40:14 :dans des justement donc comme je disais sur des imagine je sais pas tu fais une page de pricinget puis tu veux calculer des choses donc là c'est soit en fait oui enfin c'est ça oui je vais plutôtque de d'extraire un petit peu si tu veux ce que je conseille de faire des fois de d'extraire un
00:40:32 :peu le code de Django parce que des fois je sais pas tu vas vouloir calculer un prix avec TVA etpuis il y a un problème tu sais pas pourquoi c'est pas le bon prix à la fin donc ce que tu faissouvent c'est que tu extrais un petit peu pour voir est-ce que le problème il vient justement de
00:40:45 :de Stripe est-ce qu'il vient de ton template quand il envoie pas la bonne information est-ce que çavient juste de ton calcul que tu as mal fait donc là des fois ce que tu fais c'est que tu prendsjuste les quatre lignes de code de calcul tu les fous dans un fichier piton isolé et puis tu
00:40:56 :test comme ça rapidement pour là encore pas avoir à passer à travers un processus complexe derecharger une page pour que ça passe à travers la vue pour que ça passe à travers d'autres trucspour que finalement ça arrive à ton calcul et puis que là en fait tu te rends compte que c'est
00:41:08 :juste le calcul qui est mauvais tu vois mais donc dans ce cas là si j'ai pas envie de faire çad'extraire un petit bout de code pour le tester que je veux le voir en contexte mais que je veuxpas non plus repasser à travers un processus qui est un petit peu long bah là encore tu vois je vais
00:41:21 :mettre un point de débug je vais mettre le point de débug au début je vais faire un step over jevais avoir mon prix ma tva je vais faire quelques évaluations tester jusqu'à ce que je m'assure quema formule soit bonne et puis de voir où ça bug et où il y a des problèmes si on a tu vois donc ce
00:41:37 :serait plus ça je vais hop cloner du coup ça ça répond à ta question? Ouais ouais complètement ouais putain merci.Alors on va essayer de cloner ce truc là vite clone paf ok et est ce que j'avais dit branchwork eton va ouvrir ça avec PyCharm du coup hop donc putain il a du mal là il veut pas c'est mon
00:42:13 :PyCharm qui bug ou quoi? Donc je vais essayer de vous montrer un exemple avec Django parcequ'effectivement PyCharm file open alors Django blog hop j'ai les sources template blog okok ouais 3.12 ok parfait donc hop et j'ai mon manage si je fais tac Django blog python source
00:42:53 :donc là il est en train de tout installer ok donc désolé je vais je fais un peu ça en directdonc source non ça va être du coup un niveau au dessus ouais source vérange parfait pythonmanage.py server ok ouais j'ai pas pylo on s'en fout ok ok qu'est ce qu'il me dit ok c'est
00:43:31 :juste ça ok ok donc normalement c'est bon je vais ouvrir un chrome du coupavec le hop donc 127.tac ok et là du coup j'ai eu un problème ok c'est juste le pylo ok
00:43:56 :on va installer pylo alors ouais il n'y a pas d'autres questions je regarde le chat ok c'estbon donc là on a notre serveur et voilà j'avais slash blog donc oui il faut que je fasse un ducoup python hop migrate tac ok on va y arriver tac ok c'est bon accueil donc qu'est ce que je
00:44:23 :pourrais vous montrer maintenant on a les templates donc on a un template de base icivoilà accueil ajouter un article le blog de docstring ça ressemble à ça je dois avoir uncontent et dans blog ok j'ai juste ça templates ok ok donc donc dans les vues par exemple j'ai
00:44:45 :blog home donc qu'est ce que je pourrais faire ici donc là en fait ce que je vais faire déjàc'est une configuration parce que là comme je vous disais donc quand je le lance comme ça justementon n'est pas je lance dans le terminal donc on va pas avoir les fonctionnalités de debug donc ce
00:45:01 :que je vais faire c'est que ouais si là tu as une question oui effectivement c'est ça mon soucien fait donc je lance comme ça je mets le run et j'essaie de mettre le breakpoint mais çaouais ouais bah ouais bah je vais du coup c'est ça en fait je vais te montrer donc là si on fait
00:45:20 :qui vient d'arriver donc là effectivement moi je passe toujours par des configurations et c'estvrai que si tu vois si tu lances dans le terminal je sais plus d'ailleurs c'est vrai que dans lesformations probablement que je passe souvent par le terminal quand vous faites un projet de Django
00:45:38 :maintenant souvent avec PyCharm alors là encore je sais plus si c'est les versions pro ou s'il y aaussi ça dans la version community mais souvent il vous fait une configuration de base je croisque c'est avec la version pro effectivement parce que si je tape Django ici tu vois langage et
00:45:51 :framework je peux activer le Django support et là je vais lui donner le root qui est la source oksettings du coup il est là après même sans ça tu peux faire une configuration alors le settingsil est où le settings je trouve pas le settings j'ai un bug settings normalement il est là dedans
00:46:24 :ok bon on n'a pas de settings mais ok donc là si je fais ok est-ce que je le lance nomoduleah oui parce que je suis pas dans le hop je vais rajouter ça et est-ce que j'ai un settingsah oui le settings il est là dans blog ok ok oui donc moi en fait je passe souvent par la
00:46:45 :configuration qu'on peut faire aussi à la main tu vois si je crée une configuration ici pitonhop tac Django donc la script ok on va faire script c'est ça j'avoue je l'ai fait rarementcomme ça à la main piton manage.py run server là c'est le j'ai un doute est-ce que ça c'est le
00:47:16 :c'est pas clair leur truc j'avoue ça c'est le dossier non c'est le run manager.pyouais ouais mais oui ok c'est le script oui c'est ça là c'est le oui c'est ça donc onutilise notre piton l'exécutable pour lancer ce script c'est ça et là on peut rajouter desarguments en plus si on veut si on voulait mettre donc là ça doit être le run server justement
00:47:37 :qu'on met après l'argument hop hop hop ok donc là si je fais ça je lance voilà donc là tu voisça me lance avec les outils qu'on utilise généralement et attends je vais juste vérifierparce que là j'avais mon settings qui était dans blog ok et ça je sais plus du coup j'avoue je
00:48:02 :sais plus qu'est ce que ça qu'est ce que ça fait je crois que c'est juste pour les je sais plus siest-ce qu'il ya des gens là qui ont la version la version pro ou la version community de PyCharmqui font du Django toi Gab t'as la version pro ou community? c'est community moi. community
00:48:20 :ouais t'as jamais activé le Django support? attends je vais aller voir j'ai un projetouvert la settings. t'as fait quoi exactement pour aller voir? tu tapes Django dans les settings et dans
00:48:33 :language and framework. il est verrouillé il faut avoir la version pro. ah ouais c'est ça okparce que ça en fait donc ça si je me souviens bien ça permet surtout de vous repérer dans lestemplates etc par exemple dans les templates si j'ai une url je peux faire alors là il trouve
00:48:51 :pas oui je crois parce qu'il faut que j'ajoute sources root et les templates je pense showstructure ok donc là il a application modèle templates folder ok c'est ça Django ok voilàsource post template ok et ok et donc là si je vais hop non il la trouve pas ok peut-être parce
00:49:20 :que je l'ai pas url c'est ce qui vous permet normalement de vous ah oui parce que là je suisavec des ok peut-être parce que je suis avec des classes baseview je sais pas mais normalementc'est bizarre voilà je template folder non c'est une application là il a l'air de pourtant il me
00:49:42 :montre ici ok là quand j'avoue que c'est rare que je clone des projets Django faudrait que je regardeplus en détail là j'ai mis le settings ouais blog moi je sais pas il n'a pas l'air de trouver parceque normalement donc si je me trompe pas ce voilà ce support de Django vous permet de il va il va
00:50:04 :trouver en fait que l'url ici ça correspond à cette url là dans les qu'est ce qu'il ya d'autresdans les oui ce sera principalement toi je sais pas du coup Gab quand tu fais quand tu as une urlici t'as déjà essayé de faire un goto? ah non j'ai jamais essayé je vais vous ouvrir
00:50:26 :je vais vous ouvrir docstring ça va être plus clair parce que docstring du coup il est biensetupé je vais vous montrer sur base hop est-ce que j'ai des url là dedansalors url donc voilà par exemple je vous montre avec docstring ici là vous voyez j'ai un crochet
00:51:00 :%url donc si je fais clic droit goto declaration or usage ça m'amène directement au path dans leaccount url et donc ça c'est vraiment parce que dans le si je vais dans language and frameworkici j'ai le Django support qui est activé et du coup il comprend la structure du projet Django
00:51:21 :en fait et si je reviens ici donc là ouais j'ai mal configuré le truc mais ça vous permetnormalement de retrouver tout ça facilement en faisant un ctrl b ou un goto mais sinon donc pourrevenir sur le sujet du debug donc une fois qu'on a une configuration comme ça là du coup on peut
00:51:39 :la lancer effectivement en mode debug ce qu'on n'a pas quand on est dans le terminal et donc là sije vais dans ma vue donc là alors là c'est chiant parce que c'est des classes base use je n'aimepas ça parce que est-ce que j'ai pas une vue quand même blog home putain ça aussi c'est c'est
00:51:57 :vraiment pas le bon je reprends docstring je vais vous trouver un exemple un peu mieuxhop je le mets de côté parce qu'il ya quand même pas mal de voilà normalement il n'y a rien desuper sensible puisque tout est dans des fichiers d'environnement et tout mais je préfère quand
00:52:15 :même m'assurer donc est-ce que je pourrais vous montrer on va prendre la vue de baseun peu si je descends ça dashboardokdonc si je vous prends le home ici hop donc je lance docstring tac je le lance donc si jelance normal hop prend ici 127 tac j'ai docstring et si je vais ici dans le run donc là on voit bien
00:53:01 :le run tout est normal et dans le home ici donc j'ai fait un petit peu de place donc si vous êtesauthentiqué je vous redirige vers le dashboard sinon je vous affiche la page d'accueil en grosdonc cette page qui est ici donc donc là maintenant là je l'ai lancé juste en mode normal si je
00:53:18 :l'arrête et que je mets un point de débug ici je relance en mode débug on attend qu'il se lancele mode débug c'est ctrl alors je sais plus là il apparaît pas ici moi j'ai les raccourcis làtoujours en tête c'est le je sais jamais si c'est le 4 ou le 5 c'est le 5 le 4 c'est le run normal
00:53:38 :et le 5 c'est le débug vous pouvez retrouver dans view tool window vous avez le débug ici et le rundébug ici et hop donc là vous voyez que je suis si je me trompe pas voilà run alors ici oui nonok ça c'était le run donc le run c'est quand on lance avec ça le débug on est ici et voilà on a
00:53:58 :bien ok c'est un petit peu tout coincé à cause de la taille donc là on est bien avec le donc on vavoir dans la console la console c'est l'équivalent de ce que vous avez dans le run ici donc il vousaffiche les informations donc là si je vais dans la console on voit que j'ai bien le voilà qui
00:54:12 :lance ça sur telle url que je peux arrêter avec ctrl c etc si je reviens dans thread and variablelà il faut que je vienne ici j'actualise et alors là je suis pas sur la page de home parcequ'il s'arrête pas justement donc le home ouais normalement s'il devrait s'arrêter pourquoi il
00:54:32 :s'arrête pas ah oui parce que j'ai changé la page c'est plus home c'est home 2 justementvoilà c'est celle là vous voyez à quel point c'est du code clean j'avais l'ancienne page et jel'ai pas enlevé parce que j'étais en train de la refaire justement de refaire la page ici donc si
00:54:49 :je me trompe pas c'est le c'est le home 2 voilà donc vous voyez là encore ça montre bien ce queje disais tout à l'heure là j'ai pas relancé le script vous voyez j'ai juste enlevé mon point dedébug qui était dans home je l'ai mis à la place ici et là donc qu'est ce qu'il faut faire pour
00:55:02 :pour arriver dans cette fonction là il m'a suffi d'actualiser la page parce que c'est en arrivantsur cette url que qu'on va déclencher cette vue donc là j'arrive ici j'ai mon point de débug j'aibien mon request là on a tout un paquet de trucs en plus par rapport à un script simple parce
00:55:19 :qu'effectivement on a beaucoup de choses qui sont donc les fameux par exemple middleware comme jedisais qui vont qui vont qui vont être exécutés ça c'est ce qu'on appelle la stack trace donc lecallback de tout ce qui a été fait c'est à dire que toutes les fonctions qui sont appelées les
00:55:37 :unes après les autres donc c'est effectivement beaucoup plus complexe que ce qu'on avait avecun script simple où on lance notre fichier main.pyrec il y a juste notre fichier et rien
00:55:46 :d'autre là quand on lance Django il y a donc tous les middleware il y a le run il y a plein pleinplein plein plein de choses qui se passent et effectivement c'est là où donc ça rejoint jereviens sur la question de Yanis quand il s'agit de Django ça part un peu dans tous les sens avec
00:56:01 :les packages et modules est-ce que c'est courant de débug comme ça donc oui mais tu vois moi jevais rarement je vais pas les mettre un point de débug dans un dans un fichier python qui estutilisé par là tu vois dans ce cas-ci Sentry que je montre justement dans la formation de
00:56:15 :scrapping là pour Sentry c'est pour récupérer les alertes quand il y a des problèmes sur lesite donc tu vois je vais jamais mettre un point de débug ici parce que ça c'est pas mon scriptà moi par contre ici là pour vérifier tiens imagine tu vois si je fais si j'avais mis un
00:56:29 :note et qu'il y avait un problème tu vois donc si si j'avais l'inverse de ce que je voulaisben là je pourrais mettre un point de débug ici pour voir pourquoi dans ce cas là je passe pasdans les bonnes choses et voilà donc c'est la plupart du temps c'est du débug assez simple
00:56:43 :là je vais continuer donc si je reviens sur mon truc ici je vais continuer on va aller voiralors là attention il va m'afficher ouais c'est pour ça je vous dis je fais gaffe parce que làdu coup il va vous afficher la valeur donc je vais m'arrêter ici mais mais vous voyez le voyez
00:56:58 :l'idée je peux continuer à faire du step over comme n'importe quoi faire un evaluate etc ça çachange rien et après donc où est ce que je mets des points de débug ben comme je disais tout àl'heure un peu à Gabriel je vais mettre des points de débug dans les vues dans les modèles c'est un
00:57:12 :peu plus rare quoique en fait si je teste un modèle justement des fois on va avoir des méthodes sur unmodèle je vais mettre un point de débug mais là c'est exactement comme si je débugais une fonctionje vais tester le modèle de façon isolée avec un test unitaire ou alors avec directement dans
00:57:28 :une console ou dans un script moi j'ai des scripts ça c'est un truc qu'on me demande souvent si vousvoulez tester des scripts dans le contexte de Django là encore je vais vous montrer un exempleje vais mettre là il faut donc moi je me suis fait un petit truc ici je me suis fait un petit
00:57:48 :script en fait il faut juste faire un OS pour environ 7 defaults il faut donner l'endroitdans les il faut faire une variable d'environnement qui va donner l'endroit où se trouvent lessettings de votre projet sinon si vous lancez un script si j'enlève tout ça que je fais juste un
00:58:04 :script dans lequel j'importe mes modèles Django et j'essaie de faire des choses dessus ça va pasmarcher parce que ça va me dire à votre script n'est pas enfin votre projet Django n'est pascorrectement setupé. Généralement ce qu'on fait c'est qu'on fait un python manage.py
00:58:17 :shell moi j'ai shell plus qui est une extension Django extension qui va charger automatiquementtous les modèles vous voyez là il va importer tous les modèles comme ça je les ai directementet là vous avez le contexte de Django qui est chargé donc là je peux utiliser mon user.object
00:58:34 :et je vais avoir accès à tout ça si je fais un user.object et que j'importe tout ça sansfaire auparavant ça ça va pas marcher donc tout ça pour dire que voilà souvent j'ai ce petitsetup que je fais et après vous voyez j'ai voilà par exemple par exemple ici voilà j'avais des
00:58:58 :petits trucs comme ça donc j'ai un script processeur dans lequel des fois je fais destests comme ça et voilà j'ai mon setup Django donc il va setuper les trucs et après voilà jepeux faire voilà t'importe les users depuis mon account dans user du coup c'est un gros modèle
00:59:11 :avec plein de plein de fonctions et donc dans ces fonctions quand je vais tester des trucspareil je mets un point de débug et ça revient un peu à ce que je vous disais aussi c'est quel'idée c'est que quand vous faites du débug il faut isoler les problématiques et c'est pour ça
00:59:25 :que là on sort de la technique et on s'en va plus sur comment on débug un script de façon théoriqueil faut isoler les problèmes et donc là c'est plus de la résolution d'erreurs plus que latechnique de où est-ce que je mets mes points de débug et souvent en fait le problème quand
00:59:40 :on sait pas enfin quand quand on sait pas où mettre les points de débug etc c'est que c'estqu'en fait on sait on a du mal avec la résolution d'erreur en général et que et donc pour fairecourt je vais pas je vais pas faire un cours complet là dessus mais on pourra faire une
00:59:56 :session de mentorat dédiée si vous le souhaitez on en a déjà fait certaines un peu là dessus pourfaire court le ce qu'il faut faire c'est isoler le problème déjà s'assurer que le problème est aubon endroit qu'on cherche au bon endroit parce que les gens qui passent des heures à chercher
01:00:09 :pas au bon endroit et à penser que l'erreur est quelque part alors qu'elle est ailleurs ça c'estle premier truc qu'on fait comme comme erreur et deuxième chose c'est de séparer un petit boutdonc si vous avez justement comme je reprends l'exemple de Stripe si vous arrivez à voir que
01:00:25 :le problème est vraiment à un endroit et que c'est bien dans tel webbook que vous recevezqu'il y a un problème parce que vous avez pas les données qu'il faut ou que vous faites untraitement à partir des données que vous avez une erreur dans ce traitement et donc vous arrivez
01:00:40 :à isoler que c'est vraiment ok quand je reçois le webbook checkout session completed que c'estdans cet endroit là et pas dans le subscription console par exemple que j'ai un problème vousarrivez à ce moment là et là ce que vous faites c'est que vous vous extrayez le problème donc
01:00:55 :vous prenez les données de Stripe vous prenez le dictionnaire des events et vous regardez soitavec un debug soit là encore en sortant tout ça hors d'un script pour regarder ok donc làj'ai ce dictionnaire j'essaie de récupérer telles informations et ça merde parce que justement jesais pas pourquoi et donc là vous faites un point de debug au début vous faites du step over vous
01:01:17 :regardez à tel endroit ok je récupère ça c'est bon ça c'est bon et là après vous allez trouvercomme ça où se trouve l'erreur. Il y a des gens qui ont levé la main Florent t'as une question
01:01:29 :si t'as pas de micro tu peux l'écrire dans le chat aussiok mauvaise manifestation Gab t'avais une question aussioui donc en fait c'est juste pour m'intéresser un peu les idées parce que moi je n'ai pas puvraiment pour sinon j'ai fait des configurations là j'ai mis le python run maintenant quand je
01:02:21 :lance c'est vrai il me lance le debug mais imaginons que j'ai un bouton je clique je veuxuniquement que c'est quand je clique sur le bouton qu'il m'amène directement la fonction qui est liéà ce bouton par exemple. Je clique mais je sais pas si c'est au début il charge tout et qu'il
01:02:41 :passe au niveau de la fonction mais une fois que je lance le debug et que c'est lancé je viens jeclique sur le bouton il me ramène plus dans ma vie par exemple. Un bouton on parle bien d'un
01:02:54 :bouton comme un bouton ici là sur sur ton site sur ton site web quoi genre un bouton en front-endon t'a perdu si là je sais pas si ton micro fonctionne ou pasécrit sur le chat sinon mais si je comprends bien en fait c'est que donc t'as un bouton
01:03:21 :tu cliques dessus mais l'endroit où c'est censé passer quand tu cliques sur le bouton n'est pasn'est pas déclenché en fait. Oui exactement. Même c'est le travail parce que j'ai un projet à l'instant
01:03:37 :mais j'ai répit sur notre blog là que je réponnais sur Docsyn mais quand je viens sur le lienajouter un article par exemple j'ai juste essayé, j'ai cliqué sur l'article etmais ça m'amène pas sur la vue. Ouais bah tu vois là c'est effectivement c'est plus un problème de
01:03:56 :c'est exactement par exemple ce que j'ai eu tout à l'heure là où tu vois j'étais sur la mauvaise vuehop si je ramène ça là tu vois tout à l'heure j'avais mis mon point de débug ici et donc jelance le script hop donc là il est en mode débug donc effectivement tu vois là ok ça marche le
01:04:13 :serveur est lancé je suis en mode débug je viens sur ma vue j'actualise et là tu vois il s'arrêtepas donc là tu vois j'ai eu j'ai eu j'ai eu un bug moi je me suis dit ok c'est bizarre attends je suissur la vue il s'arrête pas donc là quel était le problème en fait c'est c'est que moi j'ai pas
01:04:29 :j'ai pas mis le point où il faut parce que si je vais voir dans mon url donc si je vais voir lavue home ici tu vois c'est ça justement no usage found donc j'essaie de là j'ai fait ungoto declaration or usage et en fait cette fonction elle est appelée nulle part donc c'est pour ça que
01:04:48 :je dis qu'en fait il faudrait que je l'enlève un moment et que je que je renomme celle-là homepour que ce soit un peu moins le bordel mais tu vois là c'est vraiment moi qui n'ai pas mis lepoint au bon endroit et qui me suis trompé en pensant que ça allait passer ici alors qu'en
01:05:01 :fait ça passait ici donc si quand tu cliques sur le bouton ajoute un article et que tu as mis unpoint de débug sur la vue add article et qui s'arrête pas le problème c'est que probablementle bouton est pas bien relié à la vue et donc là comment tu débloques ça bah c'est plus un
01:05:19 :débug là effectivement de j'ai envie de dire que c'est le fait que tu passes pas dans le débugc'est l'indication que qu'il faut débloquer en cherchant pourquoi tu passes pas dans le pointde débug tu vois donc pourquoi tu passes pas dans le point de débug parce que si tu cliques sur un
01:05:35 :bouton donc tu vas faire une action html donc ça peut être un formulaire donc là il faut allervoir dans ton template effectivement et là ça peut être des trucs un peu plus difficile à pasdifficile mais c'est pas des trucs que tu vas débloquer du coup en mettant un point de débug
01:05:48 :parce que c'est plus une un enchaînement logique qui ne se fait pas et qui est fait ça rejoint unpeu ce que disait Yanis du coup tu peux pas enfin ouais c'est comment expliquer ça clairement c'estque l'agencement des choses entre l'url la vue et ton frontend n'est pas fait correctement et
01:06:14 :effectivement là le débug tous les trucs de débug qu'on vient de voir ça part du fait que tu passestu arrives dans ce point de débug et après tu gères les problèmes en les analysant etc là leproblème de base c'est que tu n'arrives pas au bon endroit et donc là dans le cas d'un projet
01:06:27 :Django le fait que tu n'arrives pas dans cette fonction c'est que ton html n'appelle pas labonne vue que l'url n'appelle pas la bonne vue n'est pas relié à la bonne vue ou quelque chosedu genre tu vois. Je vais revoir la liaison entre les urls et les fonctions peut-être. Ouais c'est
01:06:53 :ça ouais et ton html aussi tu vois est-ce que c'est un formulaire le bouton est-ce que c'estun bouton qui soumet un formulaire le formulaire du coup est-ce que tu as une méthode enfin est-ceque tu as un action qui mène vers l'url qui mène vers la vue etc tu vois c'est ce genre de choses
01:07:10 :qu'il faut qu'il faut vérifier. D'accord ok ok je vais voir. Mais effectivement c'est une bonne ouic'est un c'est c'est ce que j'ai c'est ce que j'essaie j'essaie d'exprimer je sais pas si c'étaitclair mais de dire qu'en fait le le fait de ne pas passer dans ton point de débug c'est un signe en
01:07:32 :soi qu'il y a quelque chose qui fonctionne pas tu vois donc c'est alors alors je comprendseffectivement qu'au début tu as pu être confus parce que tu t'es dit parce que si tu lançaisle truc dans le terminal tu vois et ça revient ce que je disais tout à l'heure de d'identifier
01:07:44 :le problème peut-être que tu vois au début tu as lancé ton script avec avec le terminal donclà en fait peut-être que ton point de débug était bien placé mais en fait ça s'arrêtait pas parceque tu lançais le script dans le terminal. Ouais ouais ouais. Donc des fois tu te dis ok en fait
01:07:59 :ça marche pas parce que mon URL n'est pas bien linké alors qu'en fait c'est le problème c'estle terminal après finalement tu lances ton script en mode débug mais ça passe toujours pas et là tudis bon ok bah merde c'est qu'est ce qui se passe tu vois c'est pas Hrm qui bug et là en fait non
01:08:10 :c'est juste parce que l'URL, la vue, le bouton sont pas bien liés tu vois donc c'est pour çaqu'effectivement là le fait de pas passer dans le débug et c'est un c'est un indication qu'il y aun problème quelque part et après d'où vient le problème est-ce que c'est parce que tu lances pas
01:08:23 :bien le débug est-ce que c'est parce que le projet Django et il y a un problème dans le dans laliaison entre tout ça tu vois là effectivement c'est un truc qu'il faut chercher quoi. D'accord
01:08:33 :d'accord ça marche. Donc je vais revoir je vais revoir encore lancé en mode débug parce que c'estle config là qui me prenait je n'avais pas bien compris comment faire la configuration. Ouais ouais
01:08:45 :commence par ça déjà effectivement et puis après regarde si t'arrives à t'arrêter et là encoresimplifie le problème tu vois fait un truc le plus simple possible si t'as pas mal d'étapes avec tonbouton etc fait un truc simple essaye avec un autre bouton essaye de sortir tout ça un peu des
01:09:02 :contextes compliqués pour pour arriver à quelque chose qui a le moins de variables possibles quipeuvent buguer tu vois potentiellement refait ton cas d'usage aussi tu vois en te disant bon est-ceque déjà j'arrive bien à faire une url une vue un bouton et à faire en sorte que quand je clique
01:09:17 :sur le bouton ça appelle l'url etc tu fais un cas très simple comme ça tu vois et si ça marcheavec ça après t'essaie de dire ok bon quelle est la différence entre ce cas de figure quimarche et ce que j'ai qui ne fonctionne pas tu vois et c'est ça qu'il faut après essayer de débuguer.
01:09:30 :D'accord d'accord ça marche. Et bien peut-être une dernière question peut-être genre quand tu l'asdit tout à l'heure est-ce que je peux débuguer un script que ce soit Django ou Python je peuxisoler un script et je débug lui seul par exemple j'ai pas besoin de lancer le débug sur tout le
01:09:57 :projet il va juste débuguer juste cette partie du script. Ça ça va être plus tu vois alors çadépend des projets si c'est un projet Django tu vois c'est ce que je disais tout à l'heure parexemple avec Stripe là il faut t'arranger c'est à dire que si effectivement c'est un processus qui
01:10:18 :est long comme je disais tout à l'heure avec le Stripe tu vois où il va falloir que tu fassesune action de ton côté que ça parle à Stripe que Stripe t'envoie le webbook que tu vérifies lewebbook bah en fait à chaque fois ça va prendre 30 secondes et c'est long tu vois de faire cette
01:10:30 :boucle donc là effectivement tu peux dire bon ok ce que je vais faire c'est prendre les données deStripe tu vois si tu sais que le webbook que Stripe t'envoie c'est bon et que c'est après dans letraitement du webbook qu'il y a un problème bah tu peux prendre le dictionnaire que t'envoie
01:10:42 :Stripe et mettre ça à côté et faire un débug dans un script simple à côté tu vois là c'estplus dans cette façon là que tu vas couper un petit peu pour aller plus rapidement. Là tu vois
01:10:52 :dans le cas de ma page bah c'est juste un rafraîchissement de page donc j'ai pas besoind'isoler quoi que ce soit et de sortir ma fonction dans un autre fichier quoi que ce soit tu vois j'aijuste besoin de rafraîchir la page ça passe dans ma fonction et après voilà c'est tout. Après si
01:11:05 :tu vois si dans ma fonction si dans la page home j'avais 50 lignes de code avec plein defonctions etc et que je voulais isoler une partie bah peut-être que je prendrais les 10 lignes decode calcul de TVA comme je disais tout à l'heure que je les isolerais pour tester ça en dehors
01:11:19 :d'un projet Django pour juste tester tu vois de l'arithmétique de base sur un calcul detaxe qui n'a rien à voir avec les vues les URL Django etc. Alors ok ok. Je trouve le débuggeur
01:11:34 :un peu Django c'est compliqué un peu par rapport aux autres langages. Je viens de C-Sharp un peumais c'est compliqué. Mais ça va aller. C'est toute une ça fait partie des choses qui prennent
01:11:48 :du temps à apprendre et justement qui sont difficiles à apprendre avec un tutoriel çac'est de la pratique c'est tu vois je peux vous montrer des cas de figure et tout mais après çac'est un peu comme les arrive à y arriver à résoudre des algorithmes je peux vous montrer
01:11:59 :tout et à un moment il faut en faire. Il faut pratiquer. Voilà il faut pratiquer c'est ça.Ok. Je pense que c'est bon. Est-ce qu'on a d'autres questions avant qu'on termine?
01:12:12 :Bon s'il n'y a pas d'autres questions ça c'est bon c'est en dehors de Django. Au fait j'ai unprojet un local. Ça c'est avec ma machine d'entreprise d'accord parce que là c'est avec
01:12:23 :ma machine personnelle. Ouais. Ce que j'essaie de faire c'est d'envoyer. Bon quand je l'ai ditj'avais un problème pour me connecter à une base de données ORAC. Là j'ai ORAC c'est bon,
01:12:34 :j'ai me connecté, j'ai récupéré les données dans la base de données, j'ai fait ma vie ou toutle machin. Je veux envoyer par un mail automatique à disons à chaque chaque autor. Ouais. Mais j'ai
01:12:47 :pas comment me prendre sur Python. Est-ce qu'il y a une bibliothèque par exemple sur Python quipermet de faire un cronjob par exemple. Je dis à chaque victeur envoie moi, exécute cette fonction
01:13:01 :par exemple pour moi. Alors oui effectivement ça c'est probablement plus quelque chose queje ferai avec un cronjob. Là c'est clairement il faut un serveur qui tourne h24. C'est la première
01:13:13 :condition d'avoir un ordi qui est tout le temps allumé. Oui effectivement. Ça sera sur un serveurunique peut-être. Oui c'est ça. Et après en fait ce que je ferai, justement je le montre dans la
01:13:23 :formation Scrapping, tu fais un cronjob, tu dis voilà toutes les X heures tu lances ce script Pythonou cette fonction. Et si c'est justement un projet Django tu vois, tu peux faire, Gab a vu ça
01:13:38 :récemment, là tu peux faire des, comment ça s'appelle, si t'es encore là Gab tu peux me rappeler.Oui c'est les commandes avec le manage.py. Oui en fait tu peux faire des commandes que tu
01:13:53 :lances avec manage.py justement. Et du coup tu peux ou faire comme j'ai montré là tout à l'heureavec le petit setup, là je pourrais te le montrer, si là il n'hésite pas à poser la question sur lediscord ou je crois que j'avais vu la question, je pourrais te passer le petit snippet. Moi je
01:14:10 :fais ça en fait souvent, j'ai plein de processus qui roulent sur docstring et en fait c'est des,tiens je vais te montrer un autre pour te donner un exemple. Voilà tu vois par exemple j'ai ça,
01:14:32 :donc là encore tu vois je fais mon setup Django et en fait ça c'est le script qui va rouler toutde suite après la fin de cette session. Donc ça tu vois c'est un script tout simple avec mon
01:14:52 :setup Django que je vous ai montré, là qui fait juste, c'était la variable d'environnement etaprès donc j'importe les mentoring sessions que sont ces sessions qu'on a actuellement, je vaisrécupérer la session Kappa replay vidéo et en fait j'upload ça sur Vimeo tu vois. Et ça c'est
01:15:09 :un truc que je roule tous les jeudis à 9h30 tu vois un truc comme ça après la session. Et doncc'est un cronjob qui fait juste lancer ce fichier .py avec Python. Ok ok ça c'est juste une fonction,
01:15:28 :un fichier .py, Python c'est ça ? Ouais c'est ça et dans ton cronjob tu dis exécute tel scriptavec Python à telle fréquence. D'accord. Alors Yanis, les versions Python, un projet avec Python
01:15:46 :3.11 pas encore compatible avec Python Anywhere. Alors ça ouais ça fait un moment que j'ai pasregardé Python Anywhere, oui effectivement ils doivent avoir seulement certaines versions quisont disponibles. J'aurais tendance à dire prends la version je sais pas si c'est quoi 3.9 ou 3.10
01:16:05 :qu'ils ont, va une version en avant et puis 3.10 la dernière ouais bah je pense que faire un testavec 3.10, prends 3.10, essaye d'installer toutes les librairies de ton environnement avec un
01:16:17 :requirements ou si tu utilises V11 et fais un test avec la 3.10 voir si tout fonctionne et situ as des conflits après faudra voir, faudra essayer de revenir sur les bibliothèques qui ontdes conflits qui seraient potentiellement pas disponibles avec 3.11 pour voir quelle version
01:16:37 :de ces bibliothèques il faut utiliser, revenir en arrière pour que ce soit compatible avec la 3.10.Est-ce que, alors Django 5 bonne question, Django 5 on va regarder, Django 5, Pythoncompatibility 3.10, 3.11, 3.12, la version 4.2 et la dernière a supporté 3.8 et 3.9,
01:17:05 :donc Django 5 pas compatible avec 3.9 du coup.Donc là ouais, il faut effectivement, ça c'est le genre de truc, il faut prévoir et c'est pas,tant que ça marche je dirais de garder, de pas essayer de trop mettre à jour tout le temps tousles trucs, c'est sûr que quand les versions deviennent plus soutenues etc il faut changer.
01:17:29 :Moi tu vois j'ai fait une fois un changement au tout début donc docstring tournait avec la 3.7 jecrois et récemment je suis passé sur 3.9 ou 3.10, enfin récemment il y a peut-être quand même déjà
01:17:41 :six mois ou un an et là je sais que 3.9 elle commence à être un petit peu derrière justement,donc il va falloir que je mette un petit peu tout ça à jour.
01:17:50 :Plus rapide, non non non, ça non non oublie, ça justement c'est le truc à oublier,faut vraiment pas, si t'as un problème de rapidité avec ton site c'est absolument pasparce que tu utilises la 3.9 au lieu de la 3.10 ou Django 4 au lieu de Django 5,
01:18:10 :les problèmes de performance c'est à regarder au niveau de ta base de données, des images,de ton frontend, de tous ces trucs là, tu vas gagner 500 millisecondes voire dix fois plusavec une image optimisée, une base de données optimisée, avec un passage entre 3.9 et 3.1,
01:18:28 :même entre 3.6 et 3.12, tu vas gagner 10 millisecondes, ça va vraiment pas faire ladifférence. Ouais c'est ça Baptiste, c'est vraiment la qualité du code, c'est sûr qu'entre
01:18:49 :3.6 et 3.12 tu vas avoir une différence, mais comme je le dis sur des trucs comme ça en faitc'est les différences de rapidité qu'il y a entre les versions de Python, ça va être sur,voilà si vous lancez 5000 fois par seconde une fonction sur des trucs précis, oui là vous
01:19:04 :allez voir des différences et la 3.6 va prendre trois secondes et la 3.12 va prendre 2,4 secondes,donc vous aurez 40% d'amélioration de performance sur des trucs comme ça, mais sur Django où enfait finalement ce qui fait que votre page elle prend 500 millisecondes à afficher, sur les 500
01:19:25 :millisecondes d'affichage de la page c'est 300 millisecondes pour aller chercher votre javascript,votre css, 100 millisecondes pour les images etc, et si ça prend deux secondes c'est parce que vosimages elles font 5 megs etc, c'est parce que votre base de données, je vous renvoie vers cequ'on avait vu là sur le mentorat sur le langage de requête de Django, vous n'allez pas faire les
01:19:47 :bonnes choses, vous allez faire 50 appels à votre base de données au lieu d'en faire un groupé,etc etc, c'est 100% ça qui va bloquer les performances et non pas la version de Python ou de Django.
01:19:56 :Ouais comme je dis les mises à jour, il faut faire ça parsémonieusement, il faut le faire pourdes raisons de sécurité, principalement pour des versions des fois de bibliothèques qui sont plussoutenues ou justement une nouvelle bibliothèque que tu as besoin qui n'est pas disponible avecd'anciennes versions, des trucs du genre, mais pour les performances c'est rare que je mette
01:20:30 :des trucs à jour. Même comme je vous dis, d'une version à l'autre souvent c'est rare qu'on vaavoir des gains de performance 2x2x3, quand c'est le cas souvent, alors ils le mettent bien en avantmais ça va être sur des petites parties de trucs, donc vous allez avoir un x11 de performance en
01:20:44 :plus mais sur un truc qui là encore va faire passer le truc de 3 millisecondes à 1 milliseconde doncça va pas changer grand chose, donc faut pas se faire avoir par ça, c'est pas l'iPhone 12, l'iPhone13, l'iPhone 15 et même là dessus en fait finalement ça marche encore aussi bien. Ok,
Aucune occurrence trouvée pour « ».
00:02:04
Le programme du mentorat
00:07:51
Les outils de debug de PyCharm
00:16:14
Exécuter un script en mode debug dans VS Code
00:27:11
Quelques outils plus avancés
00:29:59
Les points d'arrêts conditionnels
00:35:20
Présentation des outils dans VS Code
00:38:40
Question de Gabriel : dans quels contextes utiliser le debug dans un projet Django ?
00:44:25
Un exemple de debug avec un projet Django
00:52:56
Exemple de debug sur Docstring
00:59:19
Comment faire du debug : la théorie
01:02:08
Question de Sylla : comment déboguer le clique sur un bouton en frontend ?
01:12:06
Question de Sylla : comment effectuer une tâche récurrente (cronjob) ?
01:15:44
Question de Yanis : quelles versions de Python utiliser et comment mettre à jour + explication sur les performances d'une application