Session du 10 décembre 2024 à 21h00
TOSA & Certifications
Librairie Standard & Modules
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
Session de mentorat Pickle
On fait les conserves de données avec le module pickle
00:00:00 :Et bon, on est parti.Donc, comme on disait ce soir, on va voir principalement le module PQL,mais avant on va commencer par un petit rappel ou une découverte pour certains, peu importe,sur le module JSON, parce que vous allez voir très vite que les deux sont assez liés
00:00:22 :et que donc c'est bien de revoir un petit peu JSON avant,histoire de comprendre un peu mieux PQL.OK. Au niveau de l'affichage mon écran, je vais écrire vite fait.
00:00:37 :Vous me disiez si en termes de taille ça va.Est-ce que c'est bon pour vous ? Est-ce que vous concurrenciez un petit peu le texte ?
00:00:45 :Un petit peu plus gros, ça serait mieux, je pense.Oui.Comme ça ?Oui, c'est mieux là.Je peux un peu plus si vous voulez, comme ça ?
00:00:55 :Oui, c'est bien.OK.Donc, on va commencer par le module JSON.Alors, pour mémoire, le JSON c'est un module qui va principalement être utilisé en Pythonpour sauvegarder de la data, notamment tout ce qui est dictionnaire.
00:01:16 :On va l'utiliser pour sauvegarder un dictionnaire ou le récupérer par la suite.Pour ceux qui ont fait cet exercice, vous allez l'utiliser, ce principe-là,avec la liste de courses qu'on peut sauvegarder dans la version orientée objet,si ça rappelle les souvenirs à certains.
00:01:35 :Oui, je suis en train de le faire.Et bien voilà, en plein dedans.En plein dedans.Parfait.Donc là, je vais préparer un petit dictionnaire.
00:01:43 :Peu importe les données du dictionnaire, le but est vraiment de manipuler le module.Donc, si je veux mettre mon module, si je veux mettre mes données,sauvegarder les données de mon dictionnaire dans un fichier,on va l'utiliser, donc c'est les lignes de commande.
00:02:03 :Alors, on va faire un withOpen.On va dire le nom du fichier que l'on veut sauvegarder.Donc là, je vais l'appeler les data.diction.OK.Préciser les modes d'ouverture.
00:02:19 :Donc ça, pour ceux qui ont travaillé un petit peu sur le contexte manager with,mais surtout sur quelque chose de similaire avec la manipulation de fichiers.
00:02:29 :OK.Et donc, est-ce que vous vous souvenez de la commande pour sauvegarder,pour ceux qui ont déjà vu un peu le JSON ?C'est dump.
00:02:39 :Voilà.Donc, json.dump.Et dedans, on va passer en paramètres, tout d'abord, notre dictionnaire.Ensuite, le fichier.Et là, on peut s'arrêter là.Là déjà, ça va sauvegarder le dictionnaire sur le format d'un fichier JSON,sans aucune difficulté.
00:03:03 :Moi, ce que j'aime bien rajouter, c'est ça,c'est l'indentation.Ah oui, égal à 4.Égal à 4, c'est ça.C'est ça, c'est l'indentation.C'est ça, c'est l'indentation.
00:03:16 :C'est ça, c'est l'indentation.C'est ça, c'est l'indentation.Ah oui, égal à 4.Égal à 4.Comme ça, ça permet d'avoir un fichier qui est un petit peu plus propre.
00:03:25 :Ah oui, il y avait une autre option,tu sais, par rapport à l'ASCII, à cause des accents, une histoire comme ça.Et que, ouais, l'encodage.
00:03:34 :Oui.C'est ASCII.J'utilise pas souvent celle-là.Ah mince, ça m'échappe.Parce que généralement...Ben, tu l'as en bas de ton œil, là.Voilà, ensure underscore ASCII.
00:03:47 :Égal à 4.Alors, après, moi je l'utilise pas très souvent,parce que c'est vrai que quand je fais de la data comme ça,avec l'UTF-8 en général,on est plutôt pas mal.
00:04:02 :Oui.Donc, bon, c'est pas quelque chose que j'utilise beaucoup, beaucoup, quoi.Et c'est vrai que sur des fois, sur certains fichiers de données,par exemple...
00:04:12 :Ah...Ouais, si, j'ai déjà utilisé ça,parce que j'avais fait un petit programme de scrappingpour récupérer tout ce qui est lié à l'étude des kanji en japonais.
00:04:24 :Et ben là, finalement, quand on commençait à mettre des hiragana, katakana,il vaut mieux mettre un petit peu d'ensure ASCII si vous utilisez un dictionnaire.
00:04:33 :Parce que sinon, vous risquez de rencontrer certaines difficultés.Oui.Mais bon, tant qu'on reste, on va dire, dans la langue franco-française de base,l'ensure ASCII n'est pas forcément nécessaire, quoi.
00:04:46 :Mais bon, moi, les options que je garde souvent, c'est ça.Donc, le dictionnaire, le fichier et l'indentation.Parce que bon, sans indentation, ça marche pareil,mais bon, c'est vrai que quand on va regarder le fichier JSON,c'est pas très beau,parce qu'on voit pas trop, trop bien les enchaînements,
00:05:02 :parce que bon, là encore, on a un dictionnaire simple,une clé de valeur,mais quand on travaille sur certains programmes,on peut vite se retrouver avec des dictionnairesqui contiennent eux-mêmes des dictionnaires, et ainsi de suite.
00:05:12 :Et là, si on met pas un petit peu d'indentation dans tout çapour se retrouver dans le fichier JSON,quand on va le lire,ça devient très, très vite compliqué, quoi.
00:05:20 :Donc, on va lancer ça pour voir ce que ça nous fait.Voilà.Le terminal, ici.OK, c'est pas grave.On va basculer.J'avais prévu deux fenêtres de Visual Studio Code,mais il m'a pas lancé.
00:05:53 :Normalement, c'est bon pour vous.Du coup, je vais faire ça.Hop là.On va faire comme ça.Voilà.OK.On remonte.Voilà.Donc là, ça s'est regardé sans souci.
00:06:27 :Et si je vais voir ici...Voilà.Tac.Ici, j'ai bien mon fichier JSON.OK.On va le relancer d'ici.Voilà.Là, on voit mon dictionnaire qui est apparu.
00:06:44 :Et là, on voit bien les trucs qui se sont mis proprement.Alors, je vais vous montrer rapidement ce que je vous disais.Admettons, si je rajoute ça.
00:06:54 :Adresse, par exemple.Admettons que je mette adresse.Je prends l'exemple qui me vient en tête, comme ça.Et puis là, je décide de mettre mon adresse sous la forme d'un dictionnaire.
00:07:13 :Je lui dis, par exemple, le numéro...numéro...12.Ensuite...type...voie...avenue...nom...voie...Je vais pas guimer ça pour le faire.Hop, hop.On va mettre, je sais pas...
00:07:52 :de la gare.D'accord.Ici...Ah ouais.Voilà.Donc, là, je vais vous montrer environ l'indente.On va créer notre fichier.Voilà.Là, si je joue au bon dictionnaire, vous voyez tout de suite...
00:08:18 :c'est pas super clair, quoi.Puis...si je remets mon indentation...ça recommence.Là, tout de suite, on a quelque chose d'un peu plus clair et plus présentable.
00:08:38 :OK.Maintenant...alors, du coup, oui.Voilà.Comment j'ai fait?C'est pas grave.Hop, on va passer à ça.C'est pas celui-là.Voilà.Ensuite...Là, on a aussi la version Dumps.
00:09:04 :Alors, la différence avec Dumps...Bon, je vais pas soulever ça dans l'autre fichier pour qu'on puisse travailler dessus.C'est que là, pour le compte, on va traiter...
00:09:16 :avec des chaînes.On va transformer le fichier...le dictionnaire non plus...en un fichier JSON.Mais là, on va le transformer en chaîne de caractère.
00:09:26 :Ce qui permettra de travailler le dictionnaire dans son intégralitécomme si c'était une chaîne de caractère.Donc là, on va relancer le programme.Et là, vous voyez bien...
00:09:38 :quand j'imprime la classe...il me ressort bien que c'est une classe...avec des chaînes de caractère.Donc maintenant...on va pouvoir voir...la sauvegarde de nos données et ainsi de suite.
00:09:52 :Maintenant, on va voir comment les récupérer.Donc, pour...récupérer...des données...je vais essayer l'autre, tout bêtement.Je passe assez vite sur le JSON, mais...
00:10:04 :Voilà.Donc là, par exemple, je vais créer un dictionnaire suivant...en appelant mon dictionnaire qu'on avait créé au préalable.On va...print le dictionnaire pour que vous voyez le résultat.
00:10:19 :Bon, ça...pas de soucis.On voit bien qu'on a bien un dictionnaire.Donc, on va...pas de soucis.On voit bien qu'on a bien un dictionnaire...
00:10:32 :qui est revenu directement depuis notre JSON.Oui.Et si je fais la même chose...avec...mon...ma chaîne de caractère que j'ai créée précédemment...que j'avais créée ici dans le JSON.
00:10:55 :Donc là, ce coup-ci, j'utilise loads.Je lance.Et là, effectivement, on voit que j'ai bien récupéré...j'ai bien retransformé ma chaîne de caractère...en un dictionnaire.
00:11:09 :OK ?Alors, la petite astuce qu'il y a sur ces deux-là...parce que ce sont un petit peu le problème...dump, dumps, load, loads...on se dit toujours...
00:11:18 :bah, lequel je vais utiliser ?Il y a toujours des petites...des petites... comment ?des petites...des petits doutes sur...comment...lequel on doit utiliser.
00:11:31 :La petite astuce que moi j'ai trouvée...quand je bossais le Dozor...c'est pas dur.S'il y a un S...c'est qu'on utilise des strings.Donc, des chaînes de caractère.
00:11:39 :Ça, c'est un petit mémo technique assez simple.Ça vous permettra de...toujours vous souvenir...bah, lequel j'utilise...dans quelle situation.Pour le module JSON, c'est bon ?
00:11:55 :C'est bon pour tout le monde ?Ou vous avez quelques questions sur le sujet ?N'hésitez pas.Non, c'est bien.L'histoire du...de la petite astuce avec le S, là...
00:12:07 :c'est pas mal, ça.Il faut toujours essayer de trouver...des petits mémos techniques comme ça.Surtout quand vous préparez...ou ceux qui sont en train de préparer le Dozor...
00:12:16 :il y a tellement de connaissances à...à se mettre en tête...qu'il faut bien quelques petits mémos techniques...pour essayer de les retrouver.Donc, puisque c'est bon pour tout le monde...
00:12:27 :Alors, je vais faire ça comme ça.Ça sera mieux pour moi.Voilà.Comme ça, je me retrouverai mieux.On va basculer maintenant...sur le module PQL.
00:12:41 :Alors...jusque-là, on a vu le...le module JSON...qui permet de, notamment...manipuler nos dictionnaires...pour sauvegarder de la data.C'est plutôt pas mal...parce que...
00:12:53 :vous verrez...quand vous attaquerez certains programmes...un petit peu plus avancés...l'avantage de...de JSON...c'est que, par exemple...si vous voulez...sauvegarder...faire une sorte de...
00:13:06 :de mini-base de données...on va appeler ça comme ça...avec un fichier JSON...vous pouvez...il suffit que...les datas que vous traitez...vous les stockiez...
00:13:14 :dans un dictionnaire...qui contient éventuellement...plusieurs listes de tuples...ou plusieurs dictionnaires.Et à ce moment-là...vous pouvez faire une sauvegarde...de vos datas...directement...
00:13:25 :sous la forme d'un fichier JSON...qui vous permettra...de les réappeler...lorsque vous réutiliserez...un nouveau programme.C'est un peu le principe...qui vous est montré...
00:13:32 :dans le fameux exercice...la liste orientée objet.D'accord ?Oui.Maintenant...sauvegarder les dictionnaires...c'est bien...mais...ce qui ferait bien...c'est de pouvoir sauvegarder...
00:13:47 :et là vous allez voir...que ça a beaucoup de possibilités...nos objets tout courts...puisque Python...quand on veut...c'est un langage...notamment...avec la programmation...
00:13:57 :orientée objet...et dans le cas de Python...on crée souvent...beaucoup d'objets...et ce qui serait bien...justement...c'est de pouvoir les sauvegarder.Donc là...
00:14:09 :c'est ce qu'on va pouvoir faire...avec PQL.Je vous ai préparé...une petite classe...rapide...pour servir de support...à tout ça.Vous allez voir...
00:14:22 :rien de très original...pour les geeks...que nous sommes.Voilà.J'ai fait une petite...Ah zut !Voilà.Voilà.Ça sera mieux.Voilà.Une petite classe...
00:14:43 :donc de personnages...tout bêtement.Donc à l'initiation...on définit si...le nom du personnage...la classe et ses points de vie...J'ai fait des méthodes...
00:14:53 :assez rapides...donc une méthode attaquée...en fonction de la classe du personnage...il va imprimer trois différentes...et...une méthode se présenter...où le personnage se présente.
00:15:03 :Donc je vais vous montrer rapidement...le fonctionnement.On va faire avec le magicien uniquement.Ok.Ok.Je lance ça.Vous allez voir mon terminal.Ok.
00:15:25 :Je m'appelle Gandalf.Je suis un magicien.50 points de vie.Je lance un sort.Hop là.Donc qu'est-ce que va nous permettre Pickle ?Pickle va nous permettre...
00:15:36 :tout simplement...de sauvegarder des objets...des instances...qu'on a créé à partir d'une classe.Comment ça fonctionne ?Vous allez tout de suite comprendre le lien...
00:15:48 :avec le module JSON.On va créer un fichier.Alors là le fichier...qu'on va créer pour sauvegarder notre objet...peu importe le nom que vous lui donnez.
00:15:59 :Là je vais lui mettre...un nom d'extension...histoire que par exemple...si on imagine que je fais ça...dans le cas d'un programme très très vaste...
00:16:09 :je veuille déterminer...où se trouvent les sauvegardes de mes objets.Donc par exemple...je vais décider que les objets...les sauvegardes de mes personnages...ce sera des extensions PKL par exemple.
00:16:19 :OK ?La petite astuce avec PKL...c'est qu'on va toujours travailler...avec au niveau des bytes.Donc on va faire du write bytes...read bytes et ainsi de suite.
00:16:33 :Donc là on continue.Vous voyez ?Toujours la même chose...au niveau de...de la syntaxe.Et là on va utiliser le module PKL.Et pour sauvegarder...
00:16:48 :on va utiliser Dump.On est très proche de JSON.En premier je mets mon jeu de données.Donc à l'intérieur de JSON...on mettait notre dictionnaire.
00:17:00 :Là je vais mettre l'instance...du personnage que j'ai créé.OK ?Et...Et...Et le fichier vers lequel je veux sauvegarder tout ça.Je vais lancer ça.
00:17:20 :Et là vous voyez que j'ai...un fichier qui est apparu sur le côté...nommé comme je l'avais.Donc si on va voir dedans...basiquement il n'est pas visible par le fichier.
00:17:33 :Bon là avec les gestes de code...je vais pouvoir vous montrer quand même.J'ai utilisé l'éditeur de texte.Donc vous voyez c'est pas très...c'est pas franchement lisible.
00:17:43 :D'accord ?Mais l'avantage c'est que toutes...les données de mon personnage...ont été sauvegardées.OK ?D'accord.Excellent.Et maintenant...si je voulais...rappeler...mon personnage...
00:18:03 :OK.Alors...Voilà.Il suffit tout simplement...que je fasse...la même chose qu'avec...le JSON.With open...un personnage...en fait...je vais faire ça.
00:18:36 :Voilà.On est d'accord.Donc je rappelle mon fichier.OK.Là ce coup-ci comme je l'ai dit...je le mets en mode mid byte.Il manque un guillemet je crois.
00:19:05 :Pour le fichier.Merci.Donc...on va rester sur la même chose...avec le perso.Et là je vais lui dire par exemple...Gandalf...2.Pour ceux qui ont vu le film.
00:19:22 :Voilà.Ceux qui ont vu la trilogie auront la référence.Et là je fais pickle....load.Et je charge les données de mon fichier dedans.Et là derrière je peux refaire...
00:19:44 :Gandalf le Blanc....se présenter.OK.Je lance tout ça.Et vous voyez bien qu'il...il se modifie.Et par exemple...vous voyez que c'est bien...
00:20:07 :on change bien de...Je vais par exemple dire que...un personnage...Je vais par exemple dire que...que Gandalf...ses points de vie...Maintenant...il va devenir Gandalf le Blanc...
00:20:26 :donc il est plus puissant.Allez.On décide qu'il soit à 100.D'accord.Je relance mon script.Et vous voyez bien que dans la première version...
00:20:36 :il a 50 points de vie.Et...dans la V2...il a 100 points de vie.Et en ce temps...la data est passée par le fichier PQL.
00:20:45 :Oui.Ça pourrait même être un autre fichier Python...qui relie personnage1.pkl.Alors...on va y venir...parce que...je me doutais que c'était un des premiers intérêts...
00:20:58 :que vous allez y voir.Je vais créer un nouveau fichier.Voilà.Je vais laisser comme ça...peu importe le nom.Voilà.Donc là, depuis mon autre fichier...
00:21:18 :je pourrais très bien appeler mon...Il va falloir que je le refactore...parce que sinon...ça va poser un problème.Je cherche ça...histoire que ça passe.
00:21:37 :Voilà.Voilà.Et là, depuis mon fichier...je vais...faire un import de PQL.Il faut que j'importe...ma méthode...qui est dans l'autre fichier...parce que sinon...
00:21:58 :il faut qu'il ait bien sûr la définition quand même de la classe...que l'on va utiliser avec le fichier.Et là, je recommence...l'ouverture de mon fichier.
00:22:10 :Personnage 1.OK.Hop.On va recréer notre Gandalf.OK.On va lui dire de se présenter.Et on va lui dire d'attaquer.Et là, je lance mon script.
00:22:58 :Voilà.Oui, donc il a bien les 100 points de vie...qui ont été sauvegardés par avant.Voilà.Impeccable.Donc en fait...c'est vraiment une sauvegarde de l'objet.
00:23:13 :Donc vous sauvegardez...alors la classe, il va falloir toujours...l'importer quand même...dans le fichier.Mais vous sauvegardez bien les attributs de l'objet...et à partir du moment où la classe est définie...
00:23:25 :ou importée dans le script...il va être en mesure de se resservir des méthodes de la classe.D'accord.Oui, oui, impeccable.Voilà.Donc ça présente déjà un truc intéressant.
00:23:37 :Maintenant, je vais vous montrer une petite utilisation...on va dire détournée de Pickle.On va faire comme ça.On va supprimer nos guerriers et nos magiciens.
00:23:54 :On va revenir dans un monde un peu plus...terre-à-terre.Je vais garder juste un peu le Pickle.Voilà.Alors, comme vous l'avez compris...avec ça, on sauvegarde des données.
00:24:08 :Ce qui est une bonne chose.Maintenant, on pourrait l'utiliser...pour sauvegarder certaines données...qui sont des fois un petit peu quand même...sensibles, mais qu'on peut avoir besoin...
00:24:19 :dans un fichier.Donc là, je vais créer une dataclass.Est-ce que vous avez déjà vu un peu...vous avez suivi le mentorat de Gabriel...sur les dataclass ?
00:24:29 :Moi, je ne l'ai pas vu.Oui, je l'ai vu en cours, en fait.Voilà.C'est une forme...C'est un décorateur...qui permet de définir une classe...
00:24:40 :où le principal objet de la classe...vous pouvez y mettre quelques méthodes...mais c'est surtout de définir un pack d'attributs.Donc là, on va créer une classe...
00:24:50 :Credential.C'est-à-dire que dans cette classe...elle va servir...à créer un pack d'attributs.Et dans cette classe...elle va servir...à garder des données...de connexion ou autre...
00:25:02 :pour accéder à une base de données...un fichier...ou un site...peu importe.Donc là, je vais vous faire un exemple...avec la base de données.
00:25:12 :Donc on va créer d'abord...un attribut hôte...dans lequel on pourra sauvegarder...par exemple l'adresse de la classe.Le port...de la base de données.
00:25:26 :Le port sur lequel...cette base de données écoute.Le nom d'utilisateur.Une chaîne de caractère.Et...le mot de passe.OK.Voilà.Donc...là, maintenant, je vais créer...
00:25:50 :des informations concernant la base de données.Voilà.Donc on va rentrer toutes les informations.Donc là, on va faire un localhost.On va s'abattre.On va rester sur une base de SQLite.
00:26:08 :On va faire du 3306.On va dire que...l'utilisateur, c'est route.Et que, par exemple,son mot de passe, c'est...hop.Bon.Je vous précise,je n'ai aucune base de données.
00:26:24 :Qui a ces caractéristiques-là ?On ne sait jamais.Donc, du coup...alors que je me retrouve...Voilà.Maintenant, si je veux sauvegarder ma base...mais ces données-là.
00:26:46 :Donc, si je veux sauvegarder...si je veux sauvegarder ma base...mais ces données-là.Vous allez me dire...on l'a vu tout à l'heure dans le personnage Pickle.
00:26:54 :Je vais mettre ça dans...là.Quand on redouble dessus,qu'on force un petit peu l'ouverture,avec un simple éditeur de texte,donc le simple bloc-notes de Windows,on arrive quand même à avoir...
00:27:09 :une partie des informations.Donc là,pour le type d'informations qu'on veut mettre de côté,ce serait quand même dommage que,en double-cliquant dessus,on ait visé dessus.
00:27:17 :Donc là, ce qu'on va faire,on va créer notre Pickle.OK.Donc...on va l'appeler...le dossier...le fichier, on va l'appeler Credential.OK.Après, bien sûr,si ce fichier a...
00:27:35 :occasion à être...au sein d'un projetet qu'il pourrait être éventuellement visé par l'utilisateur,on va éviter de lui donner un nom aussi évident.D'accord ?
00:27:44 :Mais bon.Là, c'est pour l'exemple.As Data.Et là, maintenant,qu'est-ce qu'on va faire ?On va tout simplement...écrire dans le fichier...un dump...
00:28:03 :avec notre Pickle...de notre base de données.OK.Je mets pas...le nom.Voilà.Et ce qu'on va rajouter derrière ça,on va utiliser la méthode X.
00:28:24 :Alors, quel est l'avantage de cette méthode X ?C'est qu'elle va en fait...prendre...le stream de bytesqui aura été normalement écrit dans le fichier.
00:28:35 :OK.Et au lieu de l'écrire en tant que bytes,il va les écrire en tant que textes.Je vais vous montrer ce que ça donne.
00:28:43 :Voilà.On a créé le fichier,donc notre fichier prédentiel s'est créé là.Et là,on a toutes nos donnéesqui ont vient de rentrer,notre adresse IP,notre port,notre mot de passe,notre nom d'utilisateur,qui sont là.
00:29:00 :D'accord.Donc le hex,c'est une conversion hexadécimale en fait ?Voilà.C'est la valeur hexadécimalede chaque unicode des caractères.Ouais, ouais.D'accord.Donc au lieu que ce soit en code ASCIIet en code incompréhensible par un éditeur de textes,là c'est imposé en hexa en fait.
00:29:23 :Et là on a tout en hexa,donc là il faut quand même savoirqui fait quoi,dans quel ordre,et ainsi de suite.Oui.Parce que là,là-dedans vous avez les valeursqui représentent,alors je vais vous remontrer ça,non seulement les valeurs qui sont là,mais aussi les attributs qui sont associés
00:29:45 :et la définition de la classe.Oui.Oui, oui, oui.Et quand on va le réutiliser par la suitedans un autre programme,même technique,on va importer notre module Credentialpour pouvoir,pour être capable de lire les donnéesde la base de données.
00:30:09 :Oui, c'est pour le décodage,enfin le décodage de la structure en fait.Oui, la correspondance.Oui, c'est une correspondance en fait,ce n'est pas un décodage.
00:30:17 :On n'est pas vraiment sur le crypto,effectivement.Après on peut rajouter de la crypto,mais là,je vais vous montrer cet exemple-làen restant vraiment sur,parce que là on n'est toujours pas sortisde la librairie standard de Python.
00:30:29 :Oui.On est vraiment dans ce que Python offreen librairie standard.Donc là,voilà.Là, on va lire notre fichier.OK.Alors, je vais lire les donnéesqui sont effectivement dans mon fichierpour récupérertous les chiffres qu'on a vus.
00:30:56 :Je vais les mettre dans une variable de temps.Hop.Et pour récupérer mes credentials,donc mon objet, non.Mon objet dans lequelj'aurai toutes les informations nécessairespour générer la connexion à ma base de données.
00:31:11 :Je vais faire un pickle.lose.Hop.Et je vais utiliser donc le bytes,qui est le type de donnéesqui se trouve dedans.Et je vais y dire que ça vientde l'hex,et je passe du coup mes datas.
00:31:36 :D'accord.Et maintenant,hop, j'avais préparé ça,je vais le reprendre ici,c'est un peu plus vite.Voilà.On va afficher tout ça.Et là, vous voyez,on retrouve biennotre objet complettel qu'on l'avait défini.
00:31:58 :Et on vient retrouver notreet on vient retrouver notrevous afficher donc l'adresse de l'hôte,le port,le user et le mot de passe.Ok.
00:32:09 :Donc ça, c'est une petite astuceavec le module Picklequi peut vous permettre assez facilementde sauvegarder des mots de passeou des adresses IPdont vous ne voulez pas qu'ils apparaissent en clairdans votre script ou dans votre programme.
00:32:26 :Vous stockez ça sous le nom d'un fichieret comme ça,quand vous avez besoin des valeurs en question,vous créez votre objet,vous allez chercher directementles données nécessairespour vous connecter à votre passe de données,par exemple,ou à un site,ou à un appartement.
00:32:39 :Et donc, comme pour le module Jsol,vous l'aurez peut-être remarqué,dès qu'on veut traiter vraiment l'objetsous une représentation,parce que là, on le traite toujourssous une représentation,donc sur une forme de chaîne de caractère,on va dire,et bien là,on met le S.
00:33:01 :Je vais imprimer le typede Credential.Et là,il me dit que c'est un import JSON-Credential.Donc là, c'est en fait un import JSON,ça vient de l'objet Credentialde la classe d'attachement Credentialet en fait,techniquement,on est plus sur la représentationREP,ceux qui sont déjà bien avancés
00:33:30 :en programmation orientée objet,où on va plus afficher l'objetsous une forme de caractère,de sorte à ce qu'on puisse le recréer.Si vous regardez bien là,là, si je reprenais cette phrase-là,et que je voulais, par exemple,créer un objetpas très original,maislà,j'aurais créé bien
00:34:12 :mon objet Credentialcomme je l'avais créé à l'origine.C'est un rapport avecunderscore, underscore REP?Voilà, c'est ça.On est d'accord.Voilà, c'est la représentation.
00:34:28 :Oui, c'est ça.D'accord, ok.Donc, voilà pour le module Pickle.Comme vous voyez,l'utilité est assez proche du JSON,sauf que là,dès qu'on commence à le jouerun petit peu comme je vous l'ai montréavec les bytes from hexpour offusquer un petit peu nos données,ça devient tout de suite intéressant
00:34:53 :pour sécuriser un scriptdans lequel on doit utiliserdes Credentials de connexionsans avoir à les mettre en clairdirectement dans le script à chaque fois.
00:35:03 :Oui, oui.On peut très bien imaginerque vous créez votre classe,vous créez votre Credential à la main.Donc, dans le programme,vous ne mettez pas à quel momentvous créez votre Credential.
00:35:18 :Donc, dans le code,sur une simple lecture de code,on ne peut pas savoirquels sont vos mots de passe et tout ça.Mais par contre,à partir du momentoù vous écrivez votre classetelle que vous l'aviez écrite à la basedans votre script,vous pouvez retravailleravec votre fichier sauvegardé
00:35:36 :avec le module Pickleet réutiliser les donnéeslà où vous en avez besoin.Allô ?Oui ?En fait, bon,moi je ne sais pas,est-ce que Pickle,on peut l'utiliserà la place de .env ?
00:35:54 :Potentiellement.Potentiellement, tu peux.Potentiellement, tu peux.Après, sur du Django,je te conseille de resterplutôt sur du .envparce que ça va êtreplus naturellement utilisé par Django.
00:36:12 :Tout est déjà paramétré dans Djangopour gérer les fichiers .envet ça sera plus simple pour toi.Maintenant,si tu veux utiliserle Pickle à la placeet modifier les scriptsaux besoins pour quele Pickle remplaceton .env,
00:36:31 :c'est tout à fait possible également.Parce que je voisc'est un peu,ça joue un peu la même chose.Pardon, excuse-moi,je n'ai pas bien entendu.
00:36:42 :Je disais ça,il joue un peu la même chose,Pickle.Oui,ça fait un peu la même choseet puis bon,la petite méthode .exe
00:36:50 :que je vous ai montrée,vous avez la possibilitéd'effectivementoffusquer un petit peules données.Et du coup,vous êtes sûr à 100%qu'il n'y a pas un fichieroù vous avez envoyévos données en clair,notamment pour tout ce qui estmots de passeet identifiant de connexion.
00:37:03 :Pour que la personne retrouve,il va falloir déjàqu'il aille rechercher,qu'il sache déjàque,là, sur l'exempleque je vous montre,les noms sont très similaires.
00:37:22 :Forcément,on va vite comprendreque le module Credentialqu'on a,la classe Credentialqu'on a importée iciest en lien avecle fichier Credential.Je n'ai pas été très,très discret sur ce coup-là,j'avoue.
00:37:34 :Maintenant,si je fais ça,par exemple,que celui-là,je l'appelle,on va faire comme ça.On va faire comme ça.Je vais commenter icipour ne pas queça pose de problème.
00:37:49 :Voilà.Et que ici,j'appelle DDD.Et que là,je l'appelle Credential.Bon.Le lien devientun petit peu moins évident.Et après,ainsi de suite.
00:38:18 :Si cette classe,vous la nommez,je ne sais pas,information,par exemple,ou tout autre motqui sortirade votre inventivité,si le fichier,vous l'appelez,je ne sais pas,coquillette,pour que l'on comprenneque le fichier coquillette,il contient les mots de passede données,il n'y a pas le temps
00:38:41 :de voir venir quand même.Oui.Donc, ça peut remplacereffectivement,comme le souligné,celui-là,le dot 1dans certains caset dans la plupart des cas,d'ailleurs,en ayant l'avantagede pouvoir justementfusquer ces données.
00:38:58 :Oui,parce qu'en plus,il faut en déduirela structurede comment c'est rangé,en fait.Voilà.Parce que l'avantagequ'on peut remarquer là,c'est que là,techniquement,on pourrait avoir10 000 lignes de codeentre les deux.
00:39:26 :Il n'y a riendans cette partie de code-làqui nous permet de savoirque cet objet-làfonctionneavec le module qu'il y a là.Oui,si on inspecteen profondeur le script,qu'on décortique tout de A à Z,qu'on va voir tous les scriptset qu'on cherche à comprendre
00:39:50 :une par unetoutes les classesà quoi peuvent servirdans le script,on finira par trouver.C'est une réalité.Maintenant,ce n'est pas ouvertau premier coup d'œilet ce n'est pas un fichierqu'on ouvre et hop,on a les notes passe.
00:40:03 :Oui,c'est bien.Est-ce qu'il y en aquand d'autres questionssur le sujet ?N'hésitez pas,ou même sur d'autrespetites questions sur Python,s'il y a des petites chosesque vous pouvez poserune question rapidement,il n'y a pas de souci.
00:40:20 :Non,pas particulièrement.En tout cas,on voit bienl'utilitéque ça peut avoir.Oui,c'est bien,c'est bien,c'est bien.Là,pour tout ce qui estsauvegarde,par exemple,une autre applicationdu module Picklequi peut êtretrès vite ludique,si vous décidezde créerun jeuavec du Python
00:40:52 :en mode textuelou graphiquepour les plus aventuriers,vous pouvez très bienimaginer que là,c'est reprendre ma classeJe vais remettrema classe personnage.
00:41:04 :Là,on peut faireun freeze du jeuavec toutes les valeursen cours en fait.Hop là.Voilà,exactement.Jean-Christophem'a vu venir.Donc,par exemple,on pourrait imaginerque je créeun attribut,par exemple,progression.
00:41:32 :Un attribut,par exemple,emplacement.Dire où est-ce qu'on estsur la map.Un attributinventaire.Il pourrait être une listedans laquelle on al'inventaire de tous les objetsque le personnageva récupérer.
00:41:53 :Et donc,à ce moment-là,au moment où on relanceraitle jeu,on pourrait reprendrela partie avec son personnageet revenir à l'étatoù on étaitau moment où...
00:42:03 :Oui, oui,effectivement.Ça fait gagner un tempsde dinguesi on devait développerune interfaceen Jsondans le but de sauvegarderles attributset les relire plus tard.
00:42:20 :Alors,Baptiste,je viens de voir...Effectivement.C'est exactement ça.Je viens de voirla question de Baptistesur le tchat.Tu as une questionsur la structurationde projet, c'est ça ?
00:42:38 :Est-ce que tu peuxallumer ton microet être un peu plus précisque l'oral,ça fera mieux ?Ah, d'accord.La structuration de projet.En fait,des recommandations,tout ce que je peux te direc'est d'essayer d'êtretrès logique avec toiet d'être le plus ordonné possible.
00:43:09 :Je vais essayerde vous montrer ça vite fait.Je crois que...Non, c'est pas...Voilà.Je vais essayer.Voilà.Non.Hop.OK.Où est-ce qu'il est ?
00:44:17 :Voilà.OK.Je vais vous montrer un truc.C'est pas forcémenthyper, hyper propre.Voilà.Ça, c'est un projetque j'avais développé.Au niveau de mon projet,tu vois,là, j'ai un projetet là, là,j'ai un premier fichier iciqui, finalement,c'est mon dossier,mon fichier mail.
00:45:02 :C'est celui par lequelle programme va se lancersystématiquement.Donc ça,généralement,ce fichier-là,il vaut mieux le mettreà la racine du projet.Comme ça,on est tout de suite au courantde quel dossierdoit être lancé.
00:45:17 :D'accord ?Ensuite, après,pour le truc,comme tu vois là,j'ai regroupé deux dossiers.Bon, alors,il y a d'autres dossiersque je n'ai plus,mais là,j'avais fait deux dossiers principaux.
00:45:28 :C'est dossier frais,mais dossier...C'est bon ?Oui.Alors ?Oui, oui.Pardon de te couper,si tu pouvais zoomer un peu là.Ah, pardon.
00:45:37 :Hop, hop.Comme ça,ça doit être mieux.Voilà, c'est mieux.Voilà, c'est mieux.Donc ici,j'ai un dossier fonctiondans lequel,hop,quand on va dedans,tu vois,j'ai toutes les fonctionsqui sont liéesà l'exécution de mon programme.
00:45:52 :Là,j'ai tous mes scriptsqui servent à l'exécution.Et ici,j'ai un dossier framedans lequel j'ai mistout ce qui estinterface graphiquedans mon programme.
00:46:04 :Donc l'idée,en fait,c'est que tu vasrépartir ton...structurer ton...ton dossieren fonctionde sorte à ce quetu puisses très vitete retrouver dedans.
00:46:17 :D'accord ?Et pour répondreà la suite de ta questionque j'ai vue du coin de l'œildans le chat,oui,dans ton fichier,il va falloir structurer un peu.
00:46:27 :Alors,j'ai essayé dansle fichier 1,alors je ne sais pass'il sera très, très propre.Voyons voir celui-là,qu'est-ce qu'il donne.Il n'est pas trop,trop mal.
00:46:48 :Alors,je vais vous réduire les fonctionsparce que ça va vous faireplein de charabiaet vous n'allez pas bien voirce qu'il se passe.
00:46:55 :Ouais, non,celui-là n'est pas très,pas très explicite.Je peux le passer.Je sais qu'il va êtreun petit peu plus explicitenormalement.Voilà.Voilà.
00:47:30 :Donc,ça c'est un programmepour scanner des imagesde disques durs.D'accord.Oui,j'ai vu passerGTRFS et XT4dans tes descriptions,dans tes textes là.
00:47:52 :Voilà.Donc là,tu vois,j'ai organisé un petit peumon truc.Là,j'ai crééune seule et unique classeparce qu'en fait,c'est un moduledu programmequi va servirà faire,à identifierla table de partitiondu disque.
00:48:10 :Voilà,je précise pour ceuxqui ne sont pas forcémenttrès opé dans le truc,c'est vraiment pour diredéterminer les volumesqui sont présentsdans un disque dur,ainsi de suite.
00:48:21 :Ce n'est pas le plus importantdu problème.Là,au début,il y a mon initet ensuite,j'ai décrit toutes mes fonctions.D'abord,il va lire la table de partition.
00:48:31 :Là,quand on regardeun petit peu le code,il va y regarderau niveau des offsetsoù se trouventles différentes entréesde la table de partitionet ensuite,il va appliquer sa logiquepour analysercette table de partition.
00:48:46 :Comme ce programmevisait du Linux,il va regarders'il y a des Linux Volume Manageret donc là,j'ai toute ma logiquedes Linux Volume Managerqui est regroupée ici.
00:48:56 :Ce qui fait quelorsque je doisrevenir travaillersur cette partie-là du code,tout est à côté,je n'ai pas de problèmepour le retrouver.
00:49:03 :Là,on est toujours sur le LVM.Ensuite,il va rechercherpour chaque volumedans la table de partitionles identifiants uniques.Il va rechercherla description.
00:49:15 :Donc là,tout mon travailde descriptionest créé ici.Là,il va recréerla table de partitionen elle-même.Je vous parlais tout à l'heurede dictionnaires JSONqui contiennentéventuellement d'autres dictionnaires.
00:49:27 :Là,vous voyez,on crée un dictionnaireet puis après,on manipule ce dictionnairepour affiner la lecture.Là,ensuite,il va travaillertout ce qui estespace videentre les partitions.
00:49:42 :Là,oui,PVNM aussi.Là,il va lirele boot recorddu disqueet en dessous,j'ai mistoutes les data classesqui vont traiterles différentesidentifiantsde mon programmeque j'ai dû redéfinirpour que Pythonsoit capablede les traiter.
00:50:13 :OK ?Donc,tu vois là,au niveau,il n'y a qu'une seule classe,ce n'est pas super,super propre,mais tu vois,dans la structurede ma classe,j'ai essayéde regrouperun petit peutout ce qui devaitfonctionner ensemble.
00:50:28 :En fait,quand tu vas faireun projet en Pythonet quand tu vas faire un script,l'idée,elle va être là.Ça va être d'essayerde ne pas avoirpar exemple,je vais reprendrela partie sur l'LVM,par exemple,ta fonction,chaque LVM qui est làet puis le NLVM
00:50:43 :que tu mets tout en bas.Alors,d'un point de vuestrictement logiciel,on est dans une classe,ça ne va pas forcémentposer de problème en soi,parce qu'éventuellement,et encore plus,vu que c'est des méthodeset que tu appellesles paramètres,tu n'auras pas de problèmede name error,
00:50:57 :mais clairement,le jour où tu vas revenirsur cette partiede la classeoù tu vas avoirles paramètres,tu ne vas pas avoirde problèmede name errordans cette partiede la classeoù tu te prêtes des LVM.
00:51:09 :Si tu as un bout en hautet un bout en bas,pour retravailler,ça va être très compliqué.Donc,quand tu organises ton script,il faut essayer justementde ranger un petit peules chosesde sorte qu'elles soientles plus proches possibles.
00:51:20 :Alors,dans certains cas,tu vas rencontrerune contrainteliée au name erroroù il faut absolumentque telle ou telle notionsoit définie,mais là,ça peut être justementl'occasion de retravaillerton script en profondeur,parce que si tu ne peuxpas trop bougertes fonctionsà ce niveau-là,
00:51:36 :c'est peut-êtreque justement,tu as un problèmede dépendanceque tu peux peut-êtregérer autrement.D'accord ?Mais en termesd'organisation de projet,pour répondreà ta question initiale,il faut toujours essayerd'être le plusordonné possibleet de laisserun maximumtoutes les fonctionset toutes les classes
00:51:54 :qui vont travailler ensembleau plus procheles unes des autressur le script.Et là,il faut penserque toujours derrière,c'est quetu écris ton script,tu écris ton programme.
00:52:04 :Aujourd'hui,il marche super,mais admettonsque tu vas utiliserune APIet puis,ton API change,tu es obligéde revoirune certaine partiede la logiquede ton programme.
00:52:16 :Si tu dois perdredeux heuresà redétermineroù est telleet telle fonctionou telle ou telle classequi dépendentde cette API,tu vas vite revenirsur l'ensemblede ton script,tu vas perdreune journée ou deux,mais tu vas tout rangerparce que le prochain coup,tu n'auras pas envie
Aucune occurrence trouvée pour « ».