Session du 09 février 2023 à 20h00
Data Science & IA
Développement Web & Frameworks
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Tokens d’authentification API avec Python
-
Un petit exercice avec pandas et matplotlib sur la base de la question d'un étudiant.
-
Mise en place du système d'authentification avec token et authentification basique pour l'api qu'on a créé la dernière fois
00:00:00 :Par contre il va enregistrer...Je sais pas s'il enregistre le chat, je crois qu'il enregistre vraiment juste...Par défaut sans rien toucher, moi c'était pas mal, ça mettait vraiment mon partage d'écran en gros et moi sur le côté quand je parlais.
00:00:18 :Donc je sais pas, juste coupe ta cam et puis pin ton partage d'écran.Ok donc là vous voyez bien mon écran.Nickel.Je vais enlever la cam.
00:00:35 :Ah oui en plus l'acceptation des nouveaux arrivants ça prend la main surtout.Ouais, ça va, ouais.Après bon là il est 19h05.Salut Lionel.Salut Fernando.
00:01:00 :Ah bah y'a pas mal de monde ce soir.Les tokens qui font...Ouais, ouais, je pense que ouais.Tout ce qui est sécurité un petit peu ça pique la curiosité.
00:01:13 :Salut Ousmane.Ah oui et puis aussi la grande nouvelle, vous l'avez peut-être vu passer, je parle du mode clair et tout,mais la plus grosse nouvelle c'est que ça y est on a été accepté comme organisme de formation.
00:01:35 :Alors ça change pas énormément de choses, enfin même ça change quasiment rien pour tout le monde.Y'a juste le fait que par rapport à Pôle Emploi notamment pour ceux qui doivent justifier, qui suivent des formations,en fait c'était un petit peu qui tout double.
00:01:52 :On a eu des gens où on disait qu'ils étaient en formation avec nous et ça passait aux côtés de Pôle Emploi,y'en a d'autres qui aimaient pas, bon bah là y'aura plus de...
00:02:02 :Ce sera plus à la tête du conseiller Pôle Emploi, mais voilà on a notre numéro de déclaration d'activité,donc si jamais y'en a qui ont besoin de... je crois que c'est pour...
00:02:12 :parce que si vous êtes en formation ça vous permet de conserver vos droits.Donc voilà, vous pouvez nous demander et puis on peut vous signer un papier.
00:02:25 :Ok, bah du coup ça a l'air tout bon.Et ouais Lionel effectivement on va faire tout le processus Calliope qui va être je pense un peu plus long.
00:02:37 :Et après les certifications faut que je revois, parce que je suis pas sûr encore.Je sais que Calliope, DataDoc, est maintenant obligatoire et permet d'avoir tout ce qui est financement,mais après justement les financements faut que ce soit rattaché à des certifications.
00:02:56 :Ouais Jérémy, en fait c'est tout ça et moi c'est les trucs que je vais regarder.J'en avais peut-être déjà un petit peu parlé, désolé si je me répète,mais en fait ce qui me refroidit un petit peu avec tout ça c'est que...
00:03:10 :en fait il faut pour ces certifications et ces diplômes, il faut vraiment coller à des trucs existants.Tu peux éventuellement faire ton propre diplôme, mais là c'est encore un autre niveau.
00:03:21 :Y'a juste je crois OpenClassroom qui a fait leur propre truc,y'a encore je crois qui sont retournés sur un machin assez générique.Et le problème de ça c'est que c'est notamment pour ça que je m'étais rendu compteque les trois quarts des diplômes forment à du full stack,parce que le diplôme sur lequel tout le monde se colle c'est,
00:03:38 :y'a une partie, y'a un bloc front-end et un bloc back-end.Donc moi c'est un petit peu mon seul truc qui me chiffonne un peu,c'est de me dire bon après je peux potentiellement pour la paperasseet pour les beaux yeux de l'état et des diplômes dire qu'on fait un full stack
00:03:53 :et puis après en fait on reste que sur du back-end parce que,bon je pense que vous m'avez déjà entendu en parler,je trouve ça ridicule de former à du full stack,encore plus quand c'est des formations de 6 mois à 1 anet qu'on sait que les gens n'ont pas 3-4 ans à mettre dans des études en reconversion.
00:04:09 :Donc voilà, je vais voir effectivement après.Voilà, mon discours change pas sur le fait que les certifications,c'est sûr de toute façon la certification Toza qui te permet d'avoir le accès au CPF,c'est vraiment du bullshit, c'est vraiment, non mais ça ne prouve absolument rien,c'est complètement débile, autant le contenu de la certification que ce que ça prouve,
00:04:34 :le contenu est stupide et puis vous pouvez avoir quelqu'un qui vous souffle les réponses derrière,donc ça n'a aucune valeur.Les diplômes à la limite un peu plus et encore,parce que comme on disait vous pouvez avoir un diplôme si derrière vous savez pas coder,en fait voilà, et c'est possible.
00:04:48 :Donc voilà, mais bon je vous en reparlerai, je vais pas trop m'étendre là-dessus,je vais laisser P.A. reprendre la main.Non, pas de souci, mais c'est vrai que pour tout ce qui est des organismes de formation et tout ça,des fois tu vois, leur notoriété elle dépend du nombre d'élèves diplômés,
00:05:06 :donc en fait quand il y a des certifications etc,le danger c'est que les plateformes poussent à ce que tous les étudiants aient le diplôme,quel que soit leur niveau, leur implication etc,donc c'est à double tronche en fait les certifications.
00:05:22 :Oui, et puis même, c'est ce que je me rends compte,c'est tous les trucs de même la certification Cali EEP,en fait ça certifie certaines choses, mais en fait c'est bon,voilà tu peux cocher des cases, tu peux faire un beau petit truc qui coche la case,et ça veut pas dire que ta formation derrière est de qualité.
00:05:37 :Et en faisant tout ça justement je me suis rendu compte qu'il y a énormément de centres de formationqui là se disaient avec tous les tours de vices qu'il y a un petit peu,entre les lignes on lisait un petit peu en mode les financements de l'état vont être de plus en plus difficiles à avoir,
00:05:51 :donc il va falloir qu'on commence vraiment à faire de la qualité,parce que jusqu'à présent on pouvait un peu justement faire des trucs qui étaient pas ouf,et parce qu'on était organisé de formation Cali EEP,en fait les gens ils signaient quand même tu vois.
00:06:02 :Donc bon, enfin voilà, on va pas trop digresser là dessus,mais je vous tiendrai informé de tout ça bien sûr quand ça évoluera.Et voilà, je te laisse reprendre la main avec l'exercice et le token.
00:06:19 :Ok merci, j'ai vu que j'ai, il y a Jérémy, c'était bientôt Jérémy répond moi sur le chat,qui avait posé cette question là avec l'histoire des vitesses d'algorithme de tri.
00:06:36 :Ok, du coup déjà premièrement ça te dérange pas que j'utilise ta question pour un petit exercice sur Panda?Ok, parce qu'en fait ta question à la base elle était pas sur Panda,mais du coup j'en profite, comme j'ai vu la manière dont tu lisais le fichier,je me suis dit que ça valait le coup de remontrer comment on fait pour lire les fichiers avec Panda,
00:07:01 :et notamment les données.Donc on fera ça dans un premier temps, c'est à dire à partir du problème,bon j'ai un petit peu modifié les datas de Jérémy pour coller à l'exemple,donc on va lire les datas dans un fichier texte avec Panda,et ensuite on va les manipuler un petit peu,
00:07:20 :et on va faire un plot tout simple, un graphique avec Matplotlib,juste pour illustrer les datas qu'on a extrait,parce que quand on fait de la data, la data ça va jamais sans la data visualisation,ne serait-ce que pour faire des présentations,ou même parfois faire apparaître des statistiques auxquelles on n'a pas pensé,
00:07:42 :c'est très important de faire attention à la visualisation.Et après on verra, je sais pas pour ceux qui étaient là,oui Stéphie?Excuse-moi c'est une erreur, j'ai pas fait exprès.
00:08:00 :Pas de souci.Du coup après on verra, vous savez la dernière fois on avait fait une petite API,une API Django REST Framework, par dessus une petite application Django,donc là ce que je vous propose c'est que, je sais pas si vous vous souvenez,je vais vous montrer après, mais en gros on affichait des mesures tout simplement via l'API,
00:08:22 :et là je vous propose qu'on mette par dessus un système d'authentification,donc le système d'authentification, pardon, en fait on verra une authentification simple,qui est built-in un peu de Django REST Framework,donc on va rien installer pour ça, et après on verra l'authentification par token,donc les tokens, je sais pas si vous en avez déjà utilisé,
00:08:48 :c'est un peu des, ça peut être sous la forme d'une longue phrase ou d'un fichier sous forme de hash,une clé, voilà exactement, merci Lionel,et du coup ça permet de, par exemple quand vous avez un script,de pas avoir à stocker vos passwords et vos identifiants chez vous,
00:09:08 :enfin sur la machine, c'est plus sécure de stocker son token et de l'utiliser,donc moi je me sers en fait, quand je fais, quand j'accède à mes API via les navigateurs web,j'utilise l'authentification basique,et quand j'utilise des scripts pour atteindre, pour faire des accès aux API, j'utilise les tokens.
00:09:31 :Donc tout simplement, après bien entendu je suis pas un expert sécurité,donc ce que je vous dis là c'est des choses, enfin ce que je montre ici c'est des choses de base,moi j'ai un peu regardé, enfin de ce que j'ai fait, de ce que j'ai regardé dans Stack Overflow,
00:09:47 :même discuté avec ChadGPT, c'est a priori les bonnes pratiques,mais voilà il y a sûrement, il y a toujours des failles,là j'espère qu'il y en a pas mais bon il peut toujours y en avoir.
00:09:58 :Donc là l'idée c'est pas de rentrer dans le détail de la cyber sécurité avec le token,juste vous montrer comment on peut mettre simplement en place un système d'authentification.
00:10:06 :Ok, ça vous va? Dites moi dans le chat si vous voyez bien, si c'est assez gros,et puis si le programme vous va ou si vous avez des questions bien sûr.
00:10:15 :Ok, très bien.Voilà, et puis n'hésitez pas dans le chat à me dire si parfois vous êtes trop perdu ou quoi,si vous avez besoin qu'on ralentisse, il n'y a pas de soucis.
00:10:32 :Du coup pour ce que je vous propose ici, on va le refaire,mais en gros je vous montre un peu les différentes étapes du script.
00:10:40 :Donc en gros ici on va importer les datas qui sont dans un fichier texteavec la méthode read CSV de Panda.Ici on lui définit le séparateur,et ce qu'on va faire c'est qu'on va stocker nos datas dans un dictionnairepour ensuite les traiter.
00:11:04 :En fait, moi d'habitude ce que je fais,c'est que ça perd un peu l'intérêt ici du data frame,le fait d'avoir un data frame et ensuite de le retransformer en dictionnaire,mais en fait c'est lié au format du fichier texte, vous le verrez.
00:11:19 :Le fichier texte il est comme ça, il faut s'adapter.Donc voilà pourquoi on repart sur un dictionnaire,vous verrez il est un petit peu particulier.
00:11:26 :Et ensuite, ces lignes là c'est tout simplement pour faire la visualisation avec Matplotlib.Ok, donc on repasse là-dessus.Qu'est-ce que... oh non, je vais montrer ça.
00:11:44 :Comment je vais faire, je vais mettre ça en mode correction.On va refaire à nouveau.Ok.Est-ce que tu peux grossir un peu, tu parlais du texte, Gabriel, rassure-moi.
00:12:27 :Ouais c'est bon, c'est bon, c'est nickel.C'était une blague.Du coup, read CSV, mais je suis... non non pas de soucis,en fait le read CSV ça permet de lire un fichier,donc je vais vous montrer, je vais le splitter ici.
00:12:46 :Voilà, donc en gros imaginez que vous avez un fichier texte,que ce soit écrit.txt ou.csv, franchement pour la méthode de read CSVil n'y a aucun souci, c'est pareil, donc ça ne vous en faites pas.
00:12:59 :Donc le fichier texte, il faut supposer qu'il est comme ça,donc tu vois, Jérémy, j'ai un petit peu modifié.En gros l'idée c'est d'avoir des algorithmes qui font des systèmes de triet de mesurer le temps d'exécution de l'algorithme.
00:13:17 :Donc en gros vous avez ici,c'est des données qui sont séparées par un point virgule,et en fait vous avez le nombre d'éléments et à côté le tempsqu'a pris l'algorithme pour trier pour ce nombre d'éléments.
00:13:36 :Donc là bien sûr, ce n'était pas du tout ça dans la question de Jérémy,ce n'était pas ce nombre d'éléments là et ces temps d'exécution là,mais pour l'exemple j'ai fait ici, j'ai fait comme si le premier algorithmeil avait une évolution linéaire, c'est à dire que quand j'ai une opération,
00:13:54 :je mets une seconde, quand j'ai deux opérations je mets deux secondes, etc.donc ça c'est une évolution linéaire.Et ici j'ai supposé que l'évolution du deuxième algorithmeallait être en quadratique, c'est à dire au carré.
00:14:06 :Donc quand j'ai zéro élément, je mets zéro seconde pour bonsoir Stu,donc j'ai zéro temps d'exécution, quand j'ai un élément j'ai une seconde,quand j'ai deux éléments j'ai quatre secondes, etc.
00:14:21 :Donc vous avez compris le principe.Donc là l'idée c'était juste de montrer deux algorithmes différents.Et donc un peu le truc qui est un petit peu spécial,c'est que vous voyez les datas, elles sont ici,les datas elles sont séparées par un point virgule,mais en gros elles sont aussi séparées par un deux points.
00:14:40 :Normalement vous savez par exemple si on a le temps et la variable,on a juste deux colonnes avec le temps et la variable.Ici en fait pour les mêmes données, pour une même variable,c'est à dire ici le temps d'exécution, on a deux colonnes.
00:14:55 :On a son nombre d'éléments associé à son temps d'exécution.C'est pour ça que c'est un petit peu particulieret que je l'ai transformé en dictionnaire.
00:15:04 :Ok donc tout simplement d'abord pour commencer on va utiliser Pandas,donc import pandas as pd, ça vous connaissez peut-être,ou peut-être pas, c'est pas grave.
00:15:16 :Donc là je fais un pd.8csv, le nom de mon fichier,donc là c'est pas compliqué,fonction.txt, et ici c'est bien important de mettre le séparateur.
00:15:31 :En fait le séparateur c'est lui qui va lui direquels sont les données qu'il y a entre, comment il sépare ces données,comment il sépare ces colonnes.
00:15:40 :Donc là déjà on peut aller voir ce qui se passe.Je vais lancer un terminal, utiliser ipython pour ça,et là on fait run, ça commence à avoir l'habitude,si vous regardez les montages que je fais.
00:16:17 :Ok donc là en fait j'ai tout simplement importé mon fichier textedans un data frame dans mon script.Donc là je suis content.Moi ce que j'aimerais maintenant c'est me dépatouiller un peu avec ces colonnes là,parce que vous voyez ici j'ai les données du temps tribule,donc tribule j'imagine, j'ai rien mis,
00:16:45 :je me trompe mais c'est le nom de l'algorithme,le premier algorithme, et ici le tri rapide.Donc en gros vous voyez ici j'ai les data pour le tri rapideet ici j'ai les data pour le tribule.
00:16:56 :Donc nous ce qu'on va vouloir faire maintenantc'est on va séparer ici les data,où on va dire là c'est mon nombre d'éléments et là c'est mon tribule.
00:17:05 :Donc pour ça moi je vais utiliser apply.Donc en fait apply c'est une fonction qui va s'appliquerà chacune des colonnes à toutes les lignes.
00:17:15 :Donc en fait je vais juste faire un exemple ici,donc si je fais df.columns,on va prendre,et ici si je fais ça et que je prends,là je récupère juste la première colonne,je vais appliquer là dessus sur la premièreet après je le mettrai dans le script.
00:17:39 :Donc ce que je peux faire c'est que je fais apply,ici, bon vous voyez je l'ai déjà fait tout à l'heuredonc il me le propose, mais je vais le réécrire.
00:17:46 :On va utiliser une fonction anonyme lambdaet je vais lui dire à chaque élémenttu lui appliques un split, lm.split.Est-ce que ça, ça va pour vous ce qu'on fait avec lambda?
00:18:01 :Est-ce que déjà lambda ça vous parle comme les fonctions anonymes?Ok, donc je vois beaucoup de oui, je vois quelques non.En fait une fonction anonyme,c'est tout simplement, vous savez quand vous définissez une fonctiondf.myFunction,
00:18:19 :là vous pouvez lui dire, bah j'ai un param,et vous lui dites retourne param au carré.Ok, donc là vous avez votre fonction,et là je fais myFunction, et là je lui dis 2,il me retourne 4.
00:18:35 :C'est normal, donc là c'est la définition simple d'une fonction.On peut définir, mais ce qui est un peu pas relou entre guillemets,mais en gros vous voyez c'est un peu lourdparce que vous devez définir une fonction etc.
00:18:46 :Et quand vous avez besoin d'appliquer une fonction rapidementà une autre méthode,ça peut être fastidieux de devoir définir la fonction etc.Donc en fait on peut définir une fonction à la volée.
00:18:56 :Pour définir une fonction à la volée, sans lui donner un nom en fait,enfin on lui donne un nom, mais en gros il sert à rien,on peut dire myFunction c'est égal,attendez, quand on la définit,je vais essayer de l'appliquer.
00:19:17 :Donc là en fait vous voyez, je vais faire avec 3,ça me donne exactement le même résultat.Donc en gros vous voyez ici, là je définis ma fonctionet ensuite je l'appelle, donc là c'est pareil, je définis ma fonction.
00:19:42 :Donc en gros ici ça vous pouvez l'utiliser et ça marche beaucoupavec Panda ou avec les algorithmes de tri etc.dans tout ce qui est manipulation data,vous verrez que ça sert pas mal.
00:19:57 :Et donc notamment ici avec le Apply.Donc en fait ce qu'on fait ici vous voyez,Apply ça veut dire que je veux à cette colonne là,donc à mon DataFrame, à toutes les lignes,je veux que tu lui appliques cette fonction là.
00:20:09 :Et donc là Split en fait ça prend une chaîne de caractères,il va chercher le caractère de point,et dès qu'il va le trouver il va couper en deuxet il va me créer une liste.
00:20:19 :Donc là j'ai ça, donc là c'est déjà un petit peu mieuxque ce que j'avais tout à l'heure, vous voyez tout à l'heure j'avais ça.
00:20:26 :Là on commence à être un petit peu plus exploitable.C'est un petit peu plus exploitable déjà,nous ce qu'on veut c'est en fait on voudrait deux jeux de données.
00:20:39 :On voudrait séparer le jeu de données pour avoir ici le nombre d'éléments,et ici la vitesse d'exécution du script,enfin de l'algorithme.Donc moi en fait ce que je fais,je vais lui dire, bah en fait x ça va être,donc je vais faire mon df.apply,
00:20:56 :ici ça va pas être tout le split,je vais vous expliquer,ça va juste être le premier élément,parce que vous voyez ici quand je fais un split avec deux points,il me sort une liste,mais moi ce que je voudrais c'est le premier élément pour chacune des lignes,
00:21:16 :donc c'est pour ça ici que je mets, vous voyez ici, zéro.Donc maintenant si je regarde x,et bah il m'a bien sorti ce que je voulais.
00:21:23 :Et maintenant si je veux définir y,y c'est la même chose, sauf que c'est le deuxième terme du...salut The Quo.Voilà.Et donc là maintenant si je regarde y,bah j'ai les deux, le deuxième jeu de données.
00:21:42 :Donc vous voyez ici si je vous remets,vous voyez j'avais 0, 1, 2, 3, 4, 5 jusqu'à 7,et 0, 1, 2, 3, 4, 5,oh et ça c'est l'évolution linéaire,donc c'est pour ça que c'est un petit peu,c'est la même chose, attendez je vais le faire peut-être avec,
00:22:00 :avec l'autre c'est tri rapide je crois.Donc 1, non c'est pas ça.Tri rapide, bah si c'est ça normalement.Ah oui c'est peut-être pas nombre d'éléments,c'est le nombre d'opérations.
00:22:33 :Non opération temps tri rapide, pourquoi il me...Ah c'est à cause de l'espace ici.Ok donc là on a pareil,et là maintenant si je fais mon split,comme tout à l'heure, 0,je lui dis ici que c'est mon X,ok donc là vous voyez j'ai mon X,j'ai mon Y,
00:23:59 :donc là ça commence à déjà être pas mal,si par exemple je veux faire un plot directement de ça,je pense qu'on peut déjà,je vais faire un import,ma plotlib as plt,ça je vais vous réexpliquer après,je vous montrerai le script après,et si je fais plt.plotXY plt.show,
00:24:23 :voilà donc là déjà j'ai un graph,donc vous voyez je vous l'avais dit,c'est l'évolution linéaire,donc c'est assez simple,c'est moi qui l'ai défini.
00:24:31 :Quand j'ai fait une opération,il a pris une seconde,deux opérations,non c'est pas l'évolution linéaire,c'est l'évolution quadratique,bon là on est sur une petite échelle,donc vous voyez pas la forme typiquede la fonction carré,mais en gros vous voyez ici j'ai fait deux opérations,hop je suis à 4 secondes etc.
00:24:50 :Donc là vous voyez déjà,on peut rapidement sortir un graphà partir du fichier,et donc là maintenant si on veut retravailler un petit peu,je vais mettre directement l'algo que j'avais déjà fait,parce que ça sert à rien de tout remettre,et je vais vous expliquer étape par étape.
00:25:10 :Ok,bon c'est bon,vous avez tout en tête.Donc en gros là ce que je fais,donc là je vous l'ai fait tout à l'heure,ok on est bon,et donc là,je vais parcourir toutes les colonnes,donc là je vais dire,si je fais tf.columns,
00:25:30 :j'ai mal écrit,vous voyez ici je récupère les colonnesde mes différents,donc moi ce que je veux,c'est créer un dictionnaire,que j'initialise ici avec data,je vais parcourir mes différentes colonnes,et vous voyez ici je fais un truc un petit peu particulier,donc là je vais vous montrer ce qu'on fait ici,
00:25:55 :je vais faire un print,en fait ici ce que je fais,c'est que je fais d'abord le split,parce qu'en fait mes colonnes elles sont comme ça,donc moi ce que je veux,c'est le nom de l'algorithme,donc je l'extrais,donc je fais un split d'abord pour découpercette chaîne de caractère,
00:26:14 :donc là je me retrouve avec un élément ici,et un élément ici,vous voyez si par exemple ici,si cette chaîne de caractère,je lui dis split,vous voyez bien que j'ai deux éléments,moi ce que je veux,c'est le deuxième,je veux juste le nom de l'algorithme,donc c'est ce que je fais ici,
00:26:34 :en disant, je prends juste un,je n'ai pas besoin de mettre les deux points ici,donc là j'ai fait mon split,moi après je lui dis,en fait moi je veux juste le deuxième,donc je prends ici le deuxième,et ici quand je fais ça,c'est juste parce que je veux retirer l'espace qu'il y a devant,
00:27:10 :vous voyez ici,si je fais juste ça,je récupère ça,et moi en fait dans une chaîne de caractère,vous savez c'est comme un itérable,donc vous pouvez dire,je prends,je vais vous montrer ici,si par exemple je suis comme ça,si je dis juste un,ça veut dire que je vais juste prendre le T,
00:27:32 :donc vu que c'est mon deuxième élément,ça commence,enfin c'est 0, 1,donc c'est pour ça que si je fais 1,il me sort le T,si par exemple ici je fais 2,il va me sortir le E, etc.
00:27:43 :Par contre si je fais,donc ça s'appelle du slicing,bonsoir Sébastien,ça s'appelle du slicing,en fait si je fais 1, 2 points,ça va me prendre de 1 jusqu'à la fin,donc c'est pour ça que j'ai comme ça.
00:28:00 :Donc là en fait,ce que je fais c'est que je vais définir la clé pour mon dictionnairedans lequel je vais stocker mes datas,donc ici je sors ma clé de dictionnaire,je la crée,et ici je stocke dans mon dictionnaire,je lui mets ces valeurs là,donc là c'est la valeur X que vous savez j'ai définie tout à l'heure,
00:28:18 :quand je faisais le apply,et ici c'est la valeur Y.Donc là déjà,si je fais juste ça,je vais faire le run,je vais vous afficher data,ok super, pourquoi il me merde?
00:29:11 :Et donc vous voyez,si je sors le data,c'est le dictionnaire que j'ai crééà partir du fichier qu'on avait à disposition.Donc vous voyez en fait,si je fais data.case,
00:29:30 :je récupère les clés de mon dictionnaire,donc moi je sais que j'ai des valeurs pour l'algorithme tempsTreeBulletet le tempsTreeRapide,et si par exemple je veux accéder juste au premier,donc je fais tempsTreeBullet,ok et donc là j'accède au nombre d'éléments du tempsTreeBulletet au temps en seconde de chaque élément.
00:29:54 :Et donc après c'est tout simple,si je veux faire un plot et que je veux superposer ce plot,quand je dis plot c'est le graph,je veux superposer ce plot,les deux graphes sur une même figure,vous pouvez en fait,quand vous faites avec Matplotlib,quand vous bouclez,en fait il garde en mémoire dans l'objet plt,
00:30:14 :il garde en mémoire chaque plot et il va les superposer.Ici donc là c'est la valeur X,le nombre d'éléments en abscisse,et ici en ordonnée le temps d'exécution.
00:30:23 :Là je lui dis un label,c'est parce qu'en fait ici je lui mets une légende,c'est pour qu'il donne le nom de l'algorithme,donc ici ça va être la clé du dictionnaire,à la courbe.
00:30:33 :Ok, donc maintenant si je sors ici et que je lance,il m'a affiche,voilà en fait il m'a calculé,il a fait le graph,donc pour les deux il a mis sur un même graphique,ici vous voyez ce petit encart là,c'est grâce au plt.légende,
00:30:53 :et le fait qu'il met automatiquement le temps tribuleet le temps tri rapide,c'est grâce au label égal k ici que j'ai mis.En gros voilà ce que je voulais vous montreravec ce petit exercice,donc on manipule un peu Pandas,on manipule un peu le slicing,Matplotlib,je sais pas ce que vous en pensez,
00:31:21 :est-ce que c'était intéressant pour vous,je sais pas si vous connaissiez Pandas ou quoi,ceux qui connaissent pas,est-ce que vous avez découvert quelque chose?
00:31:34 :Non en fait Yegor, tu vois si je mets pas le label k,je ressors,si je mets pas le label k,en fait tu vois ici le plt.légende,
00:31:49 :il sait pas ce qu'il doit mettre comme légende de graph,parce que je lui ai pas mis le label k.En fait le fait d'avoir deux graphes sur la même fenêtre,c'est grâce à la boucle,et en fait le plt, tant que tu fais pas plt.show,
00:32:04 :il accumule dans cette variable plt les différents graphes.Et du coup il va superposer les différents graphes tant que tu boucles.Tu vois ici si par exemple j'avais 10 itérations dans ma boucle,j'aurais eu 10 courbes sur mon graphique.
00:32:22 :Ok, voilà.Et du coup est-ce que vous avez des questions par rapport à Pandas,par rapport aux différentes, aux lambdas qu'on a fait ici,aux petites manipulations?
00:32:35 :Dites-moi, sinon je passe à autre chose.Ouais, tout à fait, je crois.La seule façon de faire boucler pour...Ouais, bah en fait si t'as plusieurs graphes,t'as pas d'autre choix que de boucler, après tu peux,ça dépend comment tu veux boucler,tu peux faire des listes compréhension, etc.
00:32:59 :Mais il y a bien un moment ou un autre,il faut que tu boucles pour superposer les différents graphes.D'autres modèles de graphique?Bah en fait ici là j'ai fait plt, mais on aurait pu dire scatter.
00:33:12 :Scatter en anglais, c'est des points en fait,ou un maillage, enfin moi je sais pas exactement en français ce que c'est,mais c'est quand vous voulez afficher des points,un espèce de nuage de points.
00:33:24 :Donc là si je remets label égale k,si je lance le plot,vous voyez ici au lieu d'obtenir une droite, j'obtiens des points.Et puis après il y en a plein d'autres.
00:33:42 :Mais bon là, en fait quand on a un abscisse et un ordonné,à part scatter et plot, je vois pas trop ce qu'on peut mettre,parce qu'après on peut mettre des histogrammes, etc.
00:33:53 :Mais ça c'est plus quand on fait des statistiques,quand on fait des comptages de plusieurs variables.Là pour représenter des données en deux dimensions,il n'y a rien d'autre que des lignes ou des points.
00:34:08 :Les axes sont faits automatiquement,et si jamais tu veux, tu peux dire,après si vous voulez je pourrais faire un mentorat plus détaillésur les représentations graphiques,par exemple ici si tu veux donner un titre à tes axes,tu peux dire xlabel, là c'était du coup nombre d'éléments,et plt.ylabel vitesse algo-tri.
00:34:43 :Donc là, il n'y a pas d'unité particulière,et puis là on va dire que ce sont des secondes.Là, si je relance,là en fait il m'a mis nombre d'éléments, vitesse algo-tri.
00:35:03 :Donc en fait il met à l'échelle,enfin il n'y a pas vraiment de mise à l'échelle,parce qu'en fait les abscisses dans les valeurs max qu'il a,ça allait jusqu'à 7,et les ordonnées ça allait jusqu'à 49 pour le plus grand,parce que cette fois 7, 49, c'était le carré,
00:35:20 :et en fait tu vois qu'il te donne,il met le graph, il va donner les valeurs max du plus grand graph.Tu vois il m'a superposé le orange et le bleu,il a bien mis en valeur max la valeur max du plus grand,comme ça on est sûr que les deux rentrent dans la fenêtre.
00:35:44 :Mais tu peux définir les limites du graph,tu peux dire x limit ou y limit,et tu pourrais dire, je ne sais pas, 9 et 4.
00:35:57 :Mais si ça vous intéresse,je ferai une session dédiée sur la visualisation,il y a vraiment plein plein de choses à dire sur Matplotlib,et sur d'autres librairies de visualisation.
00:36:08 :En fait, c'est de la manière dont j'ai défini,tu vois si tu vas voir dans le data,le temps tribule il avait en nombre d'éléments 0, 1, 2, 3, 4, 5, 6, 7,et pareil pour le nombre d'éléments du temps trirapide.
00:36:39 :En fait si tu veux superposer des graphes,il faut aussi qu'ils aient le même abscisse,enfin pas forcément,mais il faut que ton x et ton y aient la même longueur,forcément, parce que sinon il va bugger,et après c'est tout.
00:36:58 :Pourquoi j'ai deux fois les chiffres?Parce que j'aurais pu l'avoir qu'une seule fois,le 0, 1, 2, 3, effectivement,j'avais pas besoin de le redéfinir deux fois.
00:37:06 :Ok, si vous avez d'autres questions, n'hésitez pas,après si jamais vous avez des questions,je vous laisse encore quelques secondes,mais après comment pouvoir l'intégrer dans Django?
00:37:27 :En fait, dans Django,moi j'utiliserais plutôt une librairie comme Plotly,j'avais fait un mentora dessus,c'était au début où je faisais des mentoras,donc il faut regarder vers septembre ou octobre 2022,et en fait avec Plotly tu peux exporter tes graphesdans un div HTML.
00:37:50 :Parce qu'en fait Plotly c'est une librairie un peu axée web,et du coup tu peux exporter tes graphes en HTML,et comme ça ils restent interactifs,et tu peux les intégrer dans des divs HTML,donc c'est hyper pratique.
00:38:06 :Donc voilà, si tu as besoin de faire ça,je te conseille de regarder vers Plotly.Et essaye de retrouver dans les mentoras,essaye de regarder lequel il parlait de Plotly.
00:38:15 :Oui, Yégor, il y a des dictionnaires imbriqués,en fait tu peux en faire autant que tu veux,des dictionnaires imbriqués.Tu vois j'ai data.case,donc là c'est un gros dictionnairequi rassemble les deux différentes variables.
00:38:33 :Si Samy, avec Plotly tu peux directement exporter un PNG,et après tu le balances dans ton div HTML,il n'y a pas de souci,mais je trouve que c'est mieux avec Plotly,parce que tu peux faire des zooms sur le graphe,alors qu'un PNG,oui tu peux aussi dans un PDF,
00:38:55 :il n'y a pas de souci,tu peux faire ça facilement.Et donc du coup, oui Yégor, dictionnaire imbriqué.Donc en fait tu vois j'ai un dictionnaire principalqui rassemble les data de chaque algorithme,et si par exemple je fais data.pripul,
00:39:22 :je me retrouve avec un autre dictionnaire.Et je peux faire case comme ça.Et donc là ce sous-dictionnaire imbriqué,il a ces clés là,nombre d'éléments,et donc ça veut dire qu'en fait,tu peux aller à chaque fois en profondeur,descendre d'un étage dans tes dictionnaires.
00:39:43 :Tu peux en faire autant que tu veux,des dictionnaires imbriqués.Je crois qu'il y a un exercice sur la plateformeavec des dictionnaires imbriqués.C'est un peu comme les listes,tu peux imbriquer des listes dans des listes.
00:39:57 :Tu vois par exemple,si j'ai ma liste A,je peux dire que c'est une liste de listes.Donc ça peut être 1, 2, 3,et après tu peux dire,hello,tu vois j'ai bien une liste de listes.
00:40:22 :Si je fais A0,il me ressort bien la première liste,et si je fais A1,il me ressort bien la deuxième,qui reste elle une liste.
00:40:36 :Donc Samy, oui, pas de souci,tu peux exporter tes graphs Matplotlib dans Django,mais c'est un peu plus user-friendlyavec Plotly et les exports HTML.
00:40:55 :Voilà, d'autres questions là-dessus?Si tu veux simplement générer un PDF,bah oui, si tu veux générer juste un PDF depuis le terminal,avec Matplotlib,tu peux intégrer facilement un PNG,et en fait même quand tu fais,normalement quand tu fais PLT,donc là tu vois quand je fais PLT.show,
00:41:29 :voilà,j'affiche directement,mais tu peux aussi faire Save Fig,et donc là si tu lui dis,il me semble que tu peux lui dire directement que c'est un PDF.
00:41:45 :Qu'est-ce qu'il n'aime pas?Donc là j'ai fait ça,je vais aller voir dans mon...où est-ce que je suis?Donc tu vois là j'ai sorti le PDF,et donc là j'ai bien un PDF classique.
00:42:25 :Tu vois ici j'ai mon PDF,j'ai juste fait un Save Fig PDF,et tout fonctionne bien.Ok, du coup c'est bon pour toi,et ensuite l'intégrer,oui oui pas de soucis,après il y a un petit peu de boulot si tu veux faire une mise en pagedans un PDF avec d'autres textes,
00:42:47 :mais c'est possible.Mais en tout cas moi,moi je l'ai déjà fait avec Plotly,c'est plus simple,mais comme tu vois ça peut marcher,ça peut marcher avec Matplotlib sans aucun souci.
00:43:03 :Voilà,les deux fonctionneraient sans problème.Déjà Jérémy,est-ce que ça répond à ta question?Je t'avais répondu dans ta question,j'avais mis ça.Ok, super.
00:43:21 :Hésite pas sur la question,sur l'onglet questions si tu veux,si tu as d'autres interrogations,on peut en reparler sans souci.Ok?Ok, super aussi Samy,si ça t'aide.
00:43:38 :Je propose qu'on passe à l'autre sujet,il ne nous reste plus beaucoup de temps,mais ça peut être rapide,et si vous avez des questions,continuez à ne pas hésiter.
00:43:51 :C'est compliqué les phrases que je dis.Alors,qu'est-ce qu'on avait ici?Ok, donc là, ça c'est bon.Système d'authentification, c'est dur à dire.Alors là, on va,dans l'application qu'on avait,donc vous vous souvenez la dernière fois,je vais vous l'afficher ici,enfin même si vous ne vous souvenez pas,
00:44:25 :si vous n'étiez pas au dernier Mentora,on avait un petit projetqui nous permettait d'avoir des mesureset de les visualiser via une API.Donc, je vais mettre ici,manage.ty
00:44:50 :Ah oui, pardon.Ok, donc là, je vais voir ça.Et on avait ici, il fallait aller à l'URL,et on faisait mesures.Voilà, donc en fait, on avait créécette petite APIqui nous permet de visualiser,donc là c'est un format JSON,qui nous permet de visualiser nos mesures.
00:45:18 :Et ce qu'on aimerait, en fait, c'est pouvoir dire,attention, c'est que les gens qui sont authentifiés,c'est-à-dire qui sont logués,qui ont le droit de voir ces mesures.
00:45:28 :Alors pour ça, on va utiliser,dans un premier temps, l'authentificationque met à disposition Django REST Framework,un peu presque, sans vraiment très peu de lignes de code.
00:45:40 :Donc en fait, c'est ça.On va utiliser une classe,IsAuthenticated, de REST Framework,et les décorateurs.En fait, c'est juste, le décorateur ici,ça permet de dire à notre fonction,donc notre vue en fait,qui va nous afficher tous nos résultats,on va lui dire, attention,je lui mets un décorateur ici,
00:46:02 :ce décorateur, il lui dit,tu ne peux pas me accéder à cette vuetant que tu n'es pas authentifié.Donc c'est à ça que ça sert ici, ce qu'on fait.
00:46:10 :On va l'implémenter.Vous allez voir que ce n'est pas très compliqué.Ici, je vais suivre ce que j'ai.On a nos décorateurs, machin,et on doit ici, donc je vais copier.
00:46:42 :OK, donc là, vous voyez, maintenant, ça va changer.Quand je vais aller visiter mon URLque j'ai mis tout à l'heure,il me dit, attention,Authentification Crédential, We're not provided.
00:46:55 :Donc ça veut dire quetout ce qui est utilisateur et passwordn'ont pas été donnés dans la requête,dans la requête GET.Donc là, c'est un peu embêtant.
00:47:05 :Enfin, c'est embêtant,c'est le résultat qu'on veut,mais il va falloir maintenantqu'on permette à l'utilisateur de se loguer.Et en fait, Django REST Framework,il nous met à disposition,sans avoir besoin de coder,un URL sur lequel on peut se loguer.
00:47:23 :Donc, cet URL est le suivant.Donc si vous avez déjà fait du Django,peut-être que ça vous parle.Après, si vous n'avez pas fait de Django,ce n'est pas grave.
00:47:35 :Ici, je vous montre justece qu'on peut faire pour l'authentificationet ce n'est pas trop compliqué.Donc, on va utiliser les URLsqui sont mis à disposition par le framework.
00:47:46 :framework.urls, OK.Et maintenant, si je retourne ici, là,vous allez voir quelque chose là apparaître.Voilà, donc vous voyez,je n'ai pas fait de CSS,je n'ai rien fait du tout,pas fait d'HTML.
00:48:02 :Et ça permet déjà de...Attendez, je vais essayerd'afficher un peu en plus grand.Vous voyez, c'est assez grand ou passur le...Ouais, pour moi, ça va.
00:48:31 :OK.Donc là, vous voyez,j'ai un login qui est apparujuste en mettant une nouvelle URL.Donc là, il me propose de me loguer.Mais par contre,on n'a pas encore définide quelle manière on voulaitque notre authentification se fasse.
00:48:50 :Donc nous, ce qu'on veut,c'est on veut utiliser de basel'authentification que propose Django.Donc là, je revois, je vais revoir là-dessus.Là, c'est des trucs que vous avezdans la documentation.
00:49:04 :Je n'ai inventé rien du tout.OK, donc là, on a quatre, cinq...Je dis juste ici, en fait,je veux que l'authentification par défaut,elle soit faite par ces deux classes-là.
00:49:21 :Donc Basic Authenticationet Session Authentication.Donc ça, c'est vraimentla manière dont on veutque Django et Django REST Frameworkgèrent l'authentification.Donc OK, très bien.
00:49:37 :Et donc maintenant,si je retourne là-dessus,je fais mon login.Donc là, j'avais déjà fait un user,admin, pass.Qu'est-ce qu'il y a comme problème?
00:49:51 :Peut-être qu'il faut que je relance.J'ai un problème dans la vue.Il faut que je le zoome.Alors, qu'est-ce qui se passe?Il faut que je débug ce truc.
00:51:10 :Alors, il y a plein qui marche.OK, c'est super.Qu'est-ce qu'il me faut?Il faut que je fais mon pass.Désolé.Il va trouver.Si quelqu'un voit quelque chose,il faut que je le supprime.
00:53:52 :Ah, putain, c'est juste ça.Pardon pour le gros mot.Voilà, c'est ça.Désolé.Donc là, vous voyez ici.Merci à Gabriel pour l'intervention.Je savais rien.
00:54:16 :On sera surprise.Du coup, là vous voyez, je ne suis pas logué.Je ne peux pas avoir accès aux données.Si maintenant je me log,admin, pass,je peux de nouveau avoir accès aux données.
00:54:31 :Et vous voyez, en plus ici,il me dit que je suis logué.Donc là, c'est intéressant,mais j'ai toujours un petit problème.Vous savez, quand on utilise les API,on utilise les requêtes.
00:54:42 :Les requêtes via un script ou des choses comme ça.Donc là, j'utilise Postman.Je crois que vous l'avez montré la dernière fois.Donc là, maintenant, en fait,si je veux utiliser Postman,je suis obligé quand même de lui dire,c'est dans l'autorisation,basic, vous voyez,donc là, on met admin,
00:55:11 :je lui mets le password.Et donc là, il me renvoie bien mes datas.Mais ici, si je vais voir,vous voyez le header,autorisation basic.
00:55:29 :Ça veut dire qu'il y avait un momentoù je suis obligé de rentrer mon password à la main.Donc si je le rentre à la main,ça veut dire qu'à un moment ou un autre,je suis obligé de le stocker quelque part.
00:55:42 :Et ça, c'est pas recommandé.Donc c'est pour ça qu'on utilise les tokens.Donc les tokens, en gros,vous allez voir, c'est assez simple.Donc pour l'installation,il faut utiliser cette librairie-là,SimpleJWT,qui en fait, c'est l'acronyme pour l'utilisation du token.
00:56:06 :Donc il faut l'installer comme si c'était une application de Django.Et ici, vous voyez,je vais juste rajouter cette ligne-làqui fait partie, qui lui ditcomment je fais pour faire mes authentifications.
00:56:21 :Et je vais faire avec Samy le token dans Postman.Ah oui, du coup, c'était avant que je montre Postman.Et voilà.Donc ça, c'est un peu les...
00:56:36 :Et ça ici, c'est en gros le temps de validité du token.Donc ça, c'est pas mal aussi.C'est parce que vous pouvez définircombien de temps est valide le token.
00:56:43 :Là, j'ai mis un jour pour l'exercice,mais en fait, souvent, on peut mettre beaucoup moins.On peut juste dire une heure comme ça.Ça augmente la sécurité.
00:56:51 :C'est-à-dire que même s'il y a un token qui est volé quelque part,il sera valide que pendant une heure.Au bout d'une heure, après, le voleur,il aura eu le temps de voler toutes vos données,mais je ne sais pas s'il tombe...
00:57:02 :Si votre serveur est piratéet que les gens ne savent pas qu'il y a un token,vous avez, dans une heure,vous savez que votre token, il sera plus bon.
00:57:09 :Pas de souci, Jérémy.Bonne soirée.Donc là, je vais mettre ça en place rapidement peut-être.Je vais essayer d'aller vite.OK.Donc ça, je le mets dans les settings.
00:57:24 :J'ai déjà installé,donc je n'ai pas besoin de le faire.Ensuite, on a ça à rajouter.En fait, la durée du token,c'est à partir du moment où il a été généré.
00:58:00 :À partir du moment où il a été généré,c'est en temps T0 et à partir de là,tu as un jour, par exemple,pour la durée de validité du token.
00:58:08 :Et ensuite, ça, je vais le mettre aussi.OK.Et il faut aussi que j'ajoute les URLqui me permettent justementde générer les tokens.Donc, on va avoir ici.
00:58:34 :Je vais les mettre là-dedans.Donc ici, on génère le token.Ici, on rafraîchit le token.Donc celui-là, je peux l'enlever.Je l'ai déjà et il va me manquer cette ligne.
00:58:57 :OK.Donc là, normalement, on devrait pouvoir accéder.J'ai été vite, mais de toute façon,si jamais un jour vous avez besoin de le faire,vous allez devoir aller voir dans la documentation.
00:59:06 :Moi, je ne fais pas sans la documentation.Donc maintenant,si vous allez maintenant voir sur l'URL tokenqu'on a défini,vous voyez maintenant qu'il me propose cette vuequi est une vue poste.
00:59:27 :Là, je n'ai pas besoin de me loguer.Donc là, je me log ici avec l'interface qui me propose.Donc je dis admin et pass.Donc ça, c'est l'utilisateur et le password.
00:59:36 :Et en gros, là, vous générez les tokens.Donc là, c'est le token qui permet de rafraîchir le token.Si au bout d'un jour, vous dites,je n'ai pas envie de régénérer un token,mais j'ai juste envie de rafraîchir celui que j'ai,vous pouvez utiliser celui-là.
00:59:48 :Mais là, ici, c'est la première fois,donc on va accéder avec ça.Donc là, on a notre token.Et maintenant, si je vais dans Postman,au lieu d'aller faire ici une autorisation Basic Authentication,je vais utiliser Bearer Token.
01:00:04 :Et là, je lui mets mon token,le token que j'ai vu.Et donc là, si je fais Send, ça fonctionne.On a bien le...Vous voyez ici, je vais faire une erreur sur mon token.
01:00:13 :Je vais le faire exprès.Donc ce n'est pas le bon token.Donc là, il me dit token invalide ou expiré.Donc là, c'était quoi?C'était un A, je crois.
01:00:22 :Donc là, vous voyez que ça fonctionne bien avec le token.J'ai bien accès aux donnéesdu...auxquelles normalement je n'ai pas accès si je ne suis pas authentifié.
01:00:32 :Et donc, l'intérêt ici, c'est que vous voyez,moi, je n'ai pas de problème à stocker ça quelque partdans une session, dans un cookie ou quoi.
01:00:39 :Enfin, je n'ai pas de problème.Forcément, c'est toujours compliqué de stocker des données de sécuritédans des sessions.Mais vous voyez ici, par exemple,si moi, j'avais un script, par exemple, Python,dans lequel je veux utiliser mon API,je pourrais me dire ici, je ne sais pas,je me fais request API.py.
01:01:03 :En fait, ici, si j'avais un petit script ailleurs,là, j'ai mon token.Mais on peut imaginer qu'en fait, le token,il est stocké dans un fichier.env
01:01:13 :et qu'on vient importer.Vous savez, si on fait import.envet puis qu'après, ici, au lieu de le mettre en dur dans le script,on le met lui-même dans un autre fichier,qu'on appellerait juste.token,
01:01:26 :et comme ça, il est masqué.Et donc là, je fais ça.Je peux ici lancer mon request APIet il devrait normalement...Je lance un interactif.
01:02:00 :Et ici, il m'a bien mis toutes mes données.Donc là, si je retourne dans response texte,j'ai bien mon... et si je le mets même en JSON,
01:02:19 :voilà, j'ai mon...Je peux accéder à ma première valeur.J'ai bien mes data JSON, comme ça.Quelle différence entre Bureau token et API key?Je t'avoue que la différence, ici, tu as API key,ce n'est pas tout à fait le même format,mais en gros, c'est le même principe.
01:02:47 :Une clé d'API, je pense que c'est...parce qu'en fait, dans un token, tu as trois parties.Attends, je ne sais pas si on peut le voir.
01:02:56 :Normalement, tu as trois parties.Tu vois, en fait, ici,je crois que c'était le site d'Open Classroom.Je m'inspire de Open Classroom.En fait, un token, il est...
01:03:18 :Je ne sais plus où est-ce qu'il disait.Ce n'était pas ici.En fait, un token, c'est toujours en trois parties,et chaque partie correspond à la session,à l'identification de l'utilisateur, etc.
01:03:47 :En fait, ce qui est intéressant aussi,c'est qu'avec le token, une fois qu'on est authentifié,on peut accéder aux données de l'utilisateur,donc à son username, sa session, etc.
01:03:56 :Donc, il y a plein de...On peut gérer...En fait, du coup, c'est à cet endroit-là,c'est dans ta vue que tu dis ici,là, en fait, je pourrais lui dire que les classesque j'utilise pour faire l'authentification,en fait, c'est...
01:04:17 :Parce que là, en fait, quand je vais voir par défautdans mon settings,ici, j'ai mis ces trois classes-là d'authentification.Mais...Donc, c'est celle par défaut, comme tu le vois ici,Default Authentification Classes.
01:04:31 :Mais moi, je peux lui spécifier iciquelle classe je veux utiliser en fonction de la vue.Là, c'est la vue qui me permet de visualiser toutes mes datas.
01:04:39 :Je peux lui dire, en fait, non, c'est une autre classe.J'avais posé d'ailleurs la questionil n'y a pas longtemps sur Stack Overflow.En fait, ici, donc tu vois, là,donc il te faut Authentification Classes,Supermission Classes.
01:04:58 :Ici, tu lui définis tes...une autre...Voilà.Et ici, tu lui mets un autre décorateur.Si, par exemple, je lui dis...Ben moi, en fait, je veux seulement...
01:05:20 :Qu'est-ce qui me manque?Je veux que pour cette vue-là,en fait, je veux explicitement seulement utiliser le login,tu sais, qu'on utilisait sur l'interface web.
01:05:38 :Et je ne veux pas utiliser le token.Ou sinon, je peux juste lui dire,non, je ne veux utiliser que le token pour cette vue.
01:05:50 :Voilà.Non, non, mais bon, malheureusement,il va avoir ça sur l'enregistrement, tu vois.Pas de souci, filez, filez.Moi aussi, il faut que j'y aille.
01:06:03 :Est-ce que ça répond à ta question, Samy?À quel moment on peut gérer les permissions de vue?Autrement, restreindre le groupe.En gros... Non.Ah oui, d'accord.
01:06:20 :En fait, ça, il faut que tes groupes soient créés.Et après, ce serait dans le détail.Mais pour moi, ça serait ici, quand même, dans la vue.
01:06:29 :Ça serait à cet endroit-là.Tu définirais des classes ici, spécifiques,en fonction du groupe.Voilà.Mais moi, je t'avoue que je gère ça, en fait,directement dans l'interface administration de Django.
01:06:47 :En fait, dans Django, tu peux gérer tes users.Et donc, en fait, là-dedans, chaque user,tu peux lui dire, il est dans ce groupe-là,dans ce groupe-là, etc.
01:06:55 :Et moi, c'est là que je le gère.Je t'avoue que je ne le gère pas d'ici.C'est possible, mais moi, je ne le fais pas.
01:07:09 :Voilà, j'essaie de parcourir un peu tous les messages.Gabriel, les deux FA, c'est quoi?C'est les doubles systèmes d'authentification, là,quand tu reçois un message, des choses comme ça?
01:07:27 :Oui, mais en fait, du coup, ça n'a pas vraiment à voir avec ça.Non, du coup, ce n'est pas vraiment ça.Merci, Samy.Je t'avoue que moi aussi, Samy, je suis intéressé.
01:07:46 :Je ne connais pas beaucoup de choses sur ça.Je n'ai jamais mis en place un double authentification.Ce n'est pas moi qui vais vous aiguiller là-dessus.
01:07:58 :En tout cas, pour le moment, je peux me renseigneret essayer de faire quelque chose.Mais implémenter ça, j'imagine que c'est faisable.Avec Django, je pense qu'il y a des modules.
01:08:13 :Oui, pourquoi pas.Je peux voir avec lui s'il connaît bien çaet s'il peut en parler.Bonne soirée pour ceux qui disent bonne soirée.Et puis les autres, dites-moi si ça a été pour vous.
01:08:32 :On peut faire de la chatte avec Django.De quoi?On peut faire de la chatte avec Django, oui.Je t'entendais sur Internet.Oui, de toute façon, avec Django, tu peux tout faire.
01:08:42 :Il n'y a pas de doute là-dessus.Tu peux tout faire avec Django.Je ne sais pas, est-ce que ça vous allait comme mentorat?J'ai essayé de faire un peu deux choses différentes,du Panda et du Django.
01:09:06 :Non, c'était cool.En plus, je suis en train de jouer avec Django.Oui, oui.Je ne suis pas avancé comme ça.Je ne suis pas encore aux API.
01:09:14 :Quand tu fais du Django, Django REST Framework, ce n'est pas obligé.Peut-être que tu peux faire un site et que tu n'as pas besoin de faire une API.
01:09:23 :C'est juste que moi, je suis vraiment dans l'optique backend, tu vois.Et je ne veux pas, moi je n'utilise pas tout ce qui est formes et tout ça,les formes qu'on utilise, que les utilisateurs font pour faire des requêtes, etc.
01:09:37 :Moi, je ne passe que par des API.Donc tu vois, je n'ai pas…Merci, Yegor.Merci, TheCrow.Et donc tu vois, Gabriel, je n'ai pas…Merci aussi, Salvatore.
01:09:49 :Je ne programme jamais de formes, etc.Je passe tout par requêtes API.Donc, tu n'es pas obligé de passer par des API.Oui, les API, j'ai encore du mal à avoir, comment dire, pourquoi c'est ultra pratique.
01:10:06 :C'est ça qui est…Tu vois, imagine tu veux, je ne sais pas, imagine tu fais un site web avec Djangoou même, tu sais, le projet, on va dire un site web avec des articles.
01:10:20 :Oui.Tu as plein d'articles.Imagine au bout d'un moment, je ne sais pas, tu as 200 articles sur ton interface.Et donc pour accéder à tout, bien sûr, ils sont dans une base de données,mais pour accéder à tous tes articles,imagine que tu as un journal qui vient te contacter et qui dit
01:10:42 :« moi j'aimerais bien avoir tous vos articles dans mon journal numérique ».Et en fait, toi, tu ne vas pas dire« je vous donne accès à l'interface administration et vous avez accès à toute l'interface, etc. »
01:10:57 :Mais par contre, tu peux dire « par contre, j'ai une API qui vous permet, en une seule requête,de télécharger au format JSON tous mes articles. »
01:11:07 :Et du coup, eux, ils seront contents.Ils ont juste un URL à taper, ça télécharge en JSON et après, ils font ce qu'ils veulent avec,ils le mettent dans le format qu'ils veulent, etc.
01:11:16 :Tu vois, ils ne sont pas…Le JSON, c'est léger.C'est léger et puis ils ne sont pas tributaires de ton format à toi,c'est-à-dire qu'ils ne téléchargent vraiment plus le contenu de l'article.
Aucune occurrence trouvée pour « ».