Session du 02 octobre 2025 à 21h00
TOSA & Certifications
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
Session de mentorat Django
On va parler des permissions
00:00:00 :Et voilà, on a le Nitro basique, le 99, le tout court, le 99, le Nitro basique c'est Emoji personnalisé,bon ok, super réaction, et un badge.
00:00:10 :Les lissons personnalisées, les serveurs, y a tout ça.Et le nitro t'as 500 mégas d'upload.Non, c'est pas très utile pour ce que je fais de Discord.
00:00:24 :Je sais qu'est-ce qu'il va me l'offrir à la J, mais je le prendrais pas du tout.Bon, bonsoir à tout le monde, bonsoir, du coup c'est Django, comme j'avais annoncé, juste avant de commencer,je me suis fait avoir sur un projet, alors une erreur de débutant qui m'est jamais arrivée d'ailleurs,
00:00:49 :mais d'un côté je sais pourquoi ça m'est arrivé, je vais devoir passer sur un projet, un gros projet sur un modèle Django,un modèle user custom, sauf que j'avais utilisé le modèle user built-in.
00:01:03 :Mais vu que c'était un projet hyper complexe, je me suis dit que je n'ai pas le choix que de prendre le modèle built-in,parce que j'ai dû faire des grosses migrations d'un ancien projet qui était horrible.
00:01:13 :Je ne voulais pas me complexifier avec un projet custom, un user custom, alors qu'en fait ça ne complexifie rien, bien au contraire.Sur le coup, j'étais en stress je pense plutôt, et là je regrette du coup, après il dépend de la production, il est en dev,donc bon c'est un péché, je vais devoir réséter un peu ma table et refaire un modèle user custom.
00:01:33 :Donc dans tous les cas, prenez un modèle user custom à chaque fois, enfin c'est un conseil,parce que le jour où vous voulez changer un peu, soit vous faites un modèle profil en plus, à part,mais là en fait j'avais des soucis avec les emails, les username, donc en fait un peu la galère.
00:01:49 :Donc user custom, j'ai voulu m'en passer cette fois-ci, mais en fait non, chaque fois j'en fais un et je ne comprends pas pourquoi.Voilà, c'est un petit aparté.
00:02:00 :Ça vous est jamais arrivé ou vous avez des petits problèmes avec ça, par hasard ?Non, parce que pour le moment je ne fais que les projets qui sont dans les cours d'off-stream,donc ça ne m'est pas encore arrivé, mais c'est un truc qui peut arriver après.
00:02:16 :Non, je n'étais pas trop confiant, c'est que j'avais une migration de fou à faire,mais vu que l'ancien projet utilisait un modèle custom, mais encore c'est un Django 1.3,
00:02:27 :alors je ne voulais pas complétifier le truc, sauf qu'aujourd'hui j'ai besoin de customisation,et du coup c'est un peu embêtant.Bon, c'est par ça que je m'en éclate du coup.
00:02:37 :Euh, ouais, allez.Alors désolé, je viens de déboucher, j'ai un peu mal à la gorge, je suis sur sa moitié,ça va aller.Et là je pense qu'on voit mon écran, ok.
00:02:57 :Du coup, ce soir c'est sur les permissions,comme à chaque fois j'aurais peut-être dû créer un...Excusez-moi, je vais me faire ça tout de suite.
00:03:07 :Je vais créer de l'oscillateur.Euh, tac.Ok, je vais me créer un dossier,du coup je vais appeler...Voilà, c'est bien.Tac.Je me dépêche, mvang, je vais l'appeler comme ça.
00:03:33 :Bon, j'imagine qu'il y en a qui utilisent du pipx, du uv,ce genre de choses là, ou du poetry.Je ne sais pas si tout le monde prend toujours du pip ou autre chose.
00:03:42 :Pour les environnements virtuels.Tac.Je dis ça parce qu'il y a...J'en connais plein qui utilisent uv avec piponpour les environnements virtuels,qui est vraiment cool, mais moi je suis rendu chez mon pipet du coup je suis sous le temps.
00:04:05 :Pour ceux qui ne connaissent pas, essayez, juste essayez une fois,c'est vrai que c'est ultra rapide.Moi j'ai mes habitudes.Donc il y a uv qui est sympa.
00:04:17 :C'est l'écriture en Rust.Alors, j'ai fait quoi du coup ?J'ai sourcé, j'ai installé Django, ok.On va créer un projet, tac.Project.Et...On va quand même l'ouvrir, c'est mieux.
00:04:38 :Si j'aime bien.Hop, ok, ça.On va passer sur VS Code.Ok, tac.Les environnements virtuels, ça c'est bon.C'est rempli.Python pour être sûr.
00:05:02 :Ok, c'est bon.On va commencer par se créer une app.On va rester sur le blog parce qu'en fait, plein de trucs le blog c'est génialau niveau des exemples.
00:05:20 :Donc, les permissions. Est-ce qu'il y en a un qui a déjà utilisé les permissions ici ?Personne, personne.Ah, qui est lui du coup ?
00:05:35 :C'est Jacques.Tu t'es fait quoi par exemple avec du coup ?C'était pour limiter les accès aux certains utilisateurs.C'était avec des décorateurs.Ouais, d'accord.
00:05:50 :Avec un décorateur que j'importe.Et directement je mets sur la vue.Et comme ça, si l'utilisateur n'a pas de permission,il ne pourra pas ouvrir cette page.
00:06:03 :Ok.Et c'était une permission plus ta ou une permission intégrée à Django ?C'était, comment ? J'ai pas bien entendu.Une permission que tu as créée ou une permission intégrée à Django ?
00:06:15 :C'est une permission que,on va dire, c'était pas,c'était juste,je suis allé sur la console,la partie administrateur,et j'ai pris un groupe.Ok, t'as fait un groupe.
00:06:37 :J'ai fait un groupe et puis après, comme ça,ce groupe, s'il fait pas partie de ce groupe,directement il pouvait pas remplir.Et tu te souviens pas avoir fait,une permission customisée ?
00:06:52 :Parce qu'avec Django, ça on va le voir,tu peux créer des permissions custom dans la classe méta, par exemple.Ah.Ok.Il y a aucun problème.
00:07:07 :On va déjà partir sur,ouais, allez, on va faire ça.Bon déjà, première chose,nickel,et puis on va se mettre en français, c'est un truc à faire.
00:07:22 :Hop.Ok, ça on touche plus. Maintenant, on s'en fiche.Quoi que c'est pour les URL. Du coup, maintenant,on va partir sur un modèle,on va dire bidon, on va dire modèle simple plutôt.
00:07:37 :On va rien faire de bidon.On va se faire un truc simple.Sinon, on va partir sur un modèle post.Désolé.On va partir sur un modèle, tac.
00:07:52 :On va rester basique.On va rester sur un kerfield pour le titre.Allez hop.On va mettre 200, je pense que c'est pas mal.On va dire, on va avoir un,après c'est pas très important ce que je fais, entre guillemets.
00:08:10 :On va pas rester sur les modèles.C'est juste pour avoir un modèle de base pour bosser dessus.Et ça c'est super important par contre quand même.
00:08:19 :Hop. Dans notre cas, on va dire que ça va être unbullionfield ici,avec un default, un false.Et,on va s'arrêter là,c'est suffisant.
00:08:37 :On va peut-être grossir un peu l'écran comme d'hab.C'est pas un peu trop gros, ça va ou c'est bon ?Ok.Donc là,un modèle plus fait basique.
00:08:52 :Je vais le faire maintenant.Quand vous avez un modèle,quand vous avez un modèle,alors je sais pas si j'ai un projet à vous montrer entre deux.
00:09:04 :Un projet exemple.Je vais prendre par exemple,je vais prendre par exemple,ça et ça.Hop.Alors qu'est-ce qui me fait bruit ?Ok c'est bon.
00:09:25 :Tac.Ah il m'a pas pris le bon environnement.Je crois que j'ai la flemme de configurer.Pourquoi il me fait ça, j'en sais rien.Ça j'ai pas le droit.
00:09:40 :Normalement le mien il n'y a pas de problème,mon site perso.Alors faites pas gaffe aux settings,parce que c'est pas du Django pur.Et je pense qu'il m'a pas pris le bon environnement non plus.
00:09:55 :Ok.Voilà c'est bon, j'aurais pu faire ça tout à l'heure aussi.C'est pas grave.Ah ouais c'est ouf quand même.Il arrive pas à me le...
00:10:11 :J'ai un problème avec mes environnements.C'est bon ? Ok.Par exemple, c'est ça qui fout la merde.Ok, donc.Je vais aller sur l'adresse, on va aller dans l'admin.
00:10:26 :Hop là.Sur Django admin, parce que du coup,sinon on va tomber sur Wagtail, voilà.J'aurais fait plus simple, mais c'est pas grave.Par exemple, imaginez on a un modèle,parce que j'ai des modèles Wagtail, donc on fait attention,on va prendre un modèle pure Django.
00:10:50 :Imaginons un modèle client, qui est un modèle Django basique,un modèle sur modèle, pas un Wagtail.Donc s'il veut un utilisateur, ce sera plus simple.
00:10:59 :Hop.Et je vais aller...On va croire que ça pourrait le faire aussi.C'est un modèle Wagtail, mais ça marche aussi.Par exemple, j'ai un blog page.
00:11:14 :Le nom est bizarre, mais c'est parce qu'avec Wagtail,on ne crée pas des modèles typiques en Django,on crée des modèles spécifiques.Mais dès que vous créez un modèle en Django,ça va.
00:11:30 :Donc quand on crée un modèle, vous avez à chaque fois le nom du modèle,l'application de modèle et les permissions.Donc là, on peut dire qu'on a un Add, Change, Delete, View.
00:11:39 :Donc à chaque fois,dès que vous allez créer un modèle,vous allez avoir ces permissions qui sont créées à chaque fois, qui vont avec.Sauf que des fois, ça peut ne pas suffire.
00:11:51 :Vous allez peut-être avoir envie, je ne sais pas.Vous allez vouloirune permission genrepublicateur ou un truc dans le genre.Le mec qui peut publier.
00:12:07 :L'exemple n'est pas le meilleur du monde, mais voilà.On peut vouloir rajouterdes permissions custom comme ça.Publicateur, je ne sais pas d'ailleurs.Comment je l'ai appelé ?
00:12:22 :Excusez-moi.C'est la fièce qui parle.Donc là, c'est pareil.Par exemple, les Customers.Chaque fois, j'ai facture, projet.Donc ça, c'est un modèle facture, un modèle projet, un modèle service.
00:12:41 :J'ai Add, Change, Delete, View.A chaque fois, on a toutes ces permissions qui viennent avec.Je vais revenir sur notresur notreView.Je l'écris dans quoi déjà ?
00:12:59 :Et dansPerm.Ok.Ok, nickel.Je disais, si on fait des migrations, on va forcément avoir du coupdu Add, Delete, View,et Blank.On va se dire qu'on voudra avoir une permissionNon, parce qu'il va me faire un truc que je n'ai pas envie.
00:13:26 :Permission Custom, du coup.On peut très bien dire Permission ici.Et par contre, on va lui envoyer une liste.Et dans cette liste, on va envoyer des tubes.
00:13:38 :Là, on va en prendre qu'un seul parce que je n'ai besoin que d'une permission pour l'exemple.On va l'appelerPublishEt du coup,on va lui donner un petit nomVisible, ici, on va dire quePublierUn articleComme j'ai écrit dans mon Repo.
00:14:05 :Donc voilà, là, on a crééOn va pouvoir, du coup, contre une migration, avoir une permission en plus.Ici, on ne va pas s'embêter, on va direReturnOk.
00:14:20 :On va lancer la migrationHopTacVoilà, c'est fait.Donc on a la migration, on va allerse créer du coup unSuper UserPour aller sur l'adminOk.
00:14:48 :Ok, c'est normal.CreateTacHopEt puisOn va mettre un autre posteJe pense que je me suis bourré un mot de passeBon, je vais arrêter surTacTacTacUn mot de passe sur le premier test. Voilà, c'est bon.
00:15:25 :Ok, donc là, on a créé ça, ça, ça, tacEt dans l'admin, on va penser du coup à se mettre unModelsPutain, sinon j'ai mon téléphoneJe vais le mettre dans l'admin, sinon il apparaîtra pasAh, sinon je l'aurai passé. J'ai appelé comment ? Blog ou poste ? Je sais plus
00:15:44 :Poste. HopAlors, on va se faire un truc basiqueOn va customiser l'adminLà, c'est pas le butVoilà, j'ai fait un admin plus que basiqueNickel. Je réfléchis à un truc
00:16:02 :Voilà, j'ai créé. Ok, c'est bonAhTac. Désolé, je suis pas au taux de baselineMais ça arriveDoncDonc, hopOk, j'ai bien les postes ici. On va en écrire un quand même
00:16:23 :EuhVoilà, j'ai créé un articleUtilisateur. On va parler à part des groupesLe groupe, quand on crée un groupe, c'est juste le fait de pouvoirCréer un autre groupe et d'ajouter plusieurs permissions dans un groupeCe qui peut être pratique. Là, on va vraiment se concentrer sur les permissions pures
00:16:42 :Ok. Tac. Donc si vous avez attribuéUn groupe où il y avait plusieurs permissionsDu coup, l'utilisateur qui fera partie du groupeAura toutes les permissions. Ce qui nous intéresse
00:16:54 :C'est les permissions pures et duresDonc, on est làEst-ce que quelqu'un voitJe vais le grossir à 120 pour leVoient mes postes. Ok
00:17:09 :Voilà, ok. Donc on a le addIci, le change, delete, viewDonc les 4 basiques qu'on a. Et en plus, on a pu publier un article
00:17:18 :Bon là, je l'ai mis en français pour l'exempleMais on a pu publier un article. Donc vous voyez que là, on a créé une permission supplémentaire
00:17:24 :Mais on voit qu'après, pour tous les autres, on a vraiment des permissions basiquesDonc voilà. Pour l'instant, c'est bon ou pas ?Oui. Donc là, première étape
00:17:34 :On a créé une permission customJe réfléchis 30 secondes à un trucComment je vais vous montrer çaJe vais peut-être créer un compte utilisateurJ'ai le nom d'homonymeSon grand frère, 118On va avoir un utilisateurEt bien sûr, avant de vous montrer le principe du groupe que j'ai créé custom
00:18:04 :On va voir autre choseJe pense même qu'on vaOuvrirJ'aime pas ça en plusUn deuxième navigateurUne autre session, j'aurais pu faire ça aussiComme ça, je vais bien différencierOkNickelDu coup, on a lui iciJ'ai eu une question il n'y a pas longtempsC'est donner que
00:18:41 :Accès à certaines parties d'administrationDonc, ici, luiIl n'a aucun accèsDonc là, si il a un statut équipe, il a accès à l'administrationSi on lui met super utilisateur, il a accès à toutIl peut faire ce qu'il veut et il a accès à toutDonc là, on lui dit juste, t'auras statut équipe
00:19:02 :Donc maintenantOn va luiOn va le connecter avec luiSur administrationHop, on voit qu'il ne voit rienDonc là, ce qui est intéressant avec DjangoC'est que là, il y a statut équipeDonc là, on va voirIl y a Antoine qui arriveEst-ce qu'il arrive à rejoindre
00:19:38 :Est-ce qu'il y a AntoineEst-ce que tu m'entendsOui, salut, excuse-moi, bonsoir, désolé du retardPas de problèmeAlors du coup, on a déjà méga bien attaquéJuste pour résumer en une minuteAvec Django, il y a une chaîne de permissionsEt les permissions, elles arrivent à chaque fois par 4
00:20:03 :Par défaut que les modèlesDonc un modèle blog, on va avoir add, change, delete, viewEt là ici, on a créé une permission customOn était un petit peu françois sur le coupDonc, ça je vais le réduireEn fait, on l'a créé dans la classe métaOn a créé une permission custom
00:20:25 :On a créé un deuxième utilisateurQui n'est pas un super utilisateurIci, c'est moi, par exemple, c'est l'adminOn lui a mis un statut équipeCe qui veut dire qu'il est connecté iciDonc, ce que je disais, c'est quePar exemple, pour le blog, on pourrait vouloir direIl peut au moins voir les postes
00:20:50 :Voir les articlesS'ils actualisent ici pour luiIl va dedans, il peut juste les voirIl peut rien changerIl peut rien faire, il peut juste les voirMaintenant, si je retourne ici, qu'on ditJe suis perdu, donc là, je suis làOn peut ajouter un articleActualiseMaintenant, on a bien le bouton ajouter qui apparaît
00:21:24 :Donc là, il a le droit d'ajouter un article, ainsi de suitePar contre, on voit bien qu'il ne peut pas supprimer, il ne peut pas modifierDonc là, il faudrait encore une fois revenirVous avez compris, on peut aller lui direPour le change, on va faire çaEt là, hop, je peux le modifier
00:21:46 :Donc voilàOn a ce systèmeC'est assez granulaire, on peut dire pour chaque modèleDonc si on avait plusieurs modèlesDans l'application Django, on peut direTu peux l'avoir, celle-là, tu peux juste la modifier, celle-là, c'est toutEst-ce que ça, pour l'instant, c'est bon pour tout le monde ?
00:22:11 :OuiMaintenant, sur quoi je vais partir ?Est-ce que je vais le laisser en super utilisateur ?Je vais le laisser en super utilisateurMaintenant, dans les vues, à ce moment-làJe pense que ça peut être intéressantJ'aime bien les deuxMaintenant, dans les vuesHopOn va aller ici
00:22:44 :On va laisser les deux vuesHopOn va faire une post-list ici pour avoir accès à tous les articlesBien que je ne sais pas ce que je vais en faire, mais moi ça fera une vue basiqueJe me suis dit que ça peut être intéressantEst-ce que je fais ça ou quoi ?
00:23:02 :C'est sûr, on va faire çaDonc là, on va avoir toutes les vuesEt on va importerHop, notre modèleDonc là, on va faire un renderIci, notre templateNotre template qu'on va mettre dansOuais, je vais mettre dansOn va faire un dossier blogBlog, post-list.html
00:23:32 :Post-listOk, on va faire un post-listDonc, tout ce qu'on va faire iciOn va se créer du coupUn core-reset, c'est vraiment pour l'exempleOn aura tous les articlesOn va pas beaucoup filtrer sur les articles publiésNe soyons pas logiques, ici c'est pas graveIci, contexteDonc on va voir les articles
00:24:02 :OkDonc, on va allerFaire un dossierLiteOk, donc on va faireOn va avoir un templateOn va blog, iciJe réfléchis en même tempsSi je fais unEst-ce que je fais ça ?
00:24:32 :Je réfléchis tranquillementNon, parce qu'on va laisser le statut staffDonc, on va se faireOk, donc j'ai préparé un templatePour ne pas m'embêter à tout refaireDonc, on va l'appelerPost-listQu'est-ce qu'il me fait ?
00:24:57 :Post-listOk, donc là, qu'est-ce que j'ai fait ?Je vais juste le lancer, voir si j'ai pas de problèmeJe vais me créer mon URL et je vous remets ça aprèsOk, dans l'URL, iciBlogBlogEt je vais appeler comment la vue d'ailleurs ?
00:25:26 :Post-list, okOk, et donc iciOn va l'appeler, cette vue iciOn va avoirPost-listEt puis c'est bienÇa m'a rechargé mon projetJe réfléchis en même tempsOn va pas s'embêter avec un loginEt on va rester, je pense, assez basique comme çaÇa me paraît pas mal
00:25:59 :Non, on va rester comme çaJe vais juste mettre un petit nom au cas où, si j'ai besoinExcusez-moiAlors, du coupAh la vacheDoncOkIl est où lui ? Il est là
00:26:27 :J'ai attiré les logosParce que je vais pas en faire ce soir, ça sert à rienSur mon template qui est làMon farm il est où ?
00:26:45 :Je suis vraiment désolé, c'est pas bon ce soirOkJe voulais voir ça aussi avantL'URLLà c'est pas luiAh oui, ok, c'est bon, c'est normalJ'ai pas encore créé l'URL, donc on va le faireDonc, on s'est fait une vueC'est pas vraiment une vue d'index, c'est juste une vue bidon
00:27:18 :Et là ce qu'on va faireC'est qu'on va se faire une vuePour publier les articlesUne vue personnelleDonc, hopOn va direPublish viewEt ici en fait on va rien faireLe but c'est pas de vous montrer l'actionDe publier quelque choseLe but c'est de vous montrer comment on peut bloquer l'accès à une vue
00:27:57 :Donc, tacOn va l'appelerPublishOkEt j'ai un template tout près aussi pour çaJ'avais préparé ce que ça gènerait le plusPublishOk c'est bonDonc Publish, tacOn va se mettre un truc ultra basiqueTac, tac, voilàVoilàNickel, elle est prêteHop, on va aller dans les vues
00:28:39 :Faut que tu changes Publish zoneTu parles de quoi ?Là où je suis là ?Ouais, là ici t'as marqué Publish zone et dans la vue tu l'as appelé Publish viewAlors ça c'est pas très grave, regardeGenre iciOuais c'est ça, t'as Publish view iciJe suis d'accord, pour plus de logique
00:29:03 :Donc là je vais l'appeler par exemple Publish iciPublishEt ma Publish view iciHop, et mêmeOn va rester comme tout courtPublish sera pas malHop, okBon est-ce que j'ai oublié un truc là ?
00:29:28 :J'ai fait un peu de truc custom iciOk, donc làJ'ai juste un truc vite fait dans mon templateOkAlors mon template du coup, excusez-moiJ'ai pris des très gros raccourcis entre guillemetsParce que là du coup j'ai ditJe peux voir le lien de l'adminAlors ça, dans la vraie vie, jamais
00:29:55 :Là c'est juste pour l'exemple, parce que je sais pas si ça intéresseMais en gros c'était pour moi, pour que ce soit plus pratique si j'avais besoin de le naviguerDonc on mettrait jamais le lien de l'adminJuste si il est connectéOn ferait plus un isVoilà, on est d'accord que l'on ferait ça
00:30:13 :DoncOk, donc là on a cité les articlesDonc bref, basiquement, une boucleEt on a mis le lien vers notre public zoneDonc là il n'y a pas de problèmeS'il y a un problème, parce que l'URL je l'ai appelé postlistEt dans mon projet je ne l'ai pas appelé postlist
00:30:34 :Je l'ai appelé comment ?L'underscore non peut-être ? Voilà, okAllez, hopEt donc, voilàDonc là, la vue n'est pas encore protégéeC'est pour montrer que la vue existe, je peux aller dessusMais là la vue n'est pas encore protégéeDonc maintenant si je fais çaOn va couper le serveur
00:31:01 :On va aller sur notre vueEt on va le dire iciDonc il y a unOn pourrait le faire autrement d'ailleursOn va d'abord faire autrementOn pourrait très bien dire iciParce que dans la requête on a toujours accès à l'utilisateurOn pourrait dire, on va regarder s'il y a la permission
00:31:25 :Ok, et donc la permission s'appelleC'est blog.canpublishpostJe l'avais appelé je croisJe ne sais plusCanpublishpost, c'est çaJe suis où ?Ok, donc là on peut dire iciOn va faire un raise iciAlorsAlors du coup je ne sais plusJe ne sais plus dans Django
00:31:59 :Internet, s'il vous plaîtSi on a quelqu'un qui est plus rapide que moiOuais, mais je vais voir d'où il s'importeOkOk, donc avec DjangoC'est pas dur, quand vous voulez voir d'où ça vientVous pouvez le faireC'est très simpleC'est très simpleOk, donc avec Django c'est pas dur
00:32:29 :Là j'ai le code sourceOk, donc làLogiquementJe suis revenu iciSi je lance pas le serveur ça ne fonctionnera pasRun serverHopJ'étais là, j'actualise un coupOk, j'ai une 403A savoir que quand vous faites une exceptionÇa vous renvoie une 403Donc là effectivement, ici je ne peux pas y accéder
00:33:05 :Parce que du coup je n'ai pas cette permission làJe suis bien en 403Donc là je suis en super utilisateurJe vais lui filer la permissionHopEt si je retourne làMaintenant j'y accèdeDonc là j'ai mis ça parce que je n'ai pas encore fait la version décorateur
00:33:29 :Donc pour l'instant c'est bonDu coupDonc là une façonJe ne veux pas dire que c'est la façon la plus propreMais c'est une façon que j'aime bien faireJ'aime bien un décorateur, j'en faisais une maisonOn peut se passer du permission d'analyse iciEt on peut très bien aller se dire
00:33:54 :C'est hop, contrib.hostVoilàDécorateur, à chaque fois j'apporte directementPermission de décorateurOn peut très bien ça faire avec des meetings en classe aussiJ'ai déjà utilisé avec des classes mais là on va rester simple pour ce soirIci on va demander la permissionblog.cnqlish
00:34:20 :IciOn va lui enlever la permissionJe vais vous montrer un truc, je viens d'y penserJe ne veux pas qu'il puisse publier les postsMaintenant si je suis sur la vueDonc là il met une erreurIl me cherche à me rediriger vers une vue de loginDonc si j'avais bien configuré une vue de login, il n'y aurait pas de bug
00:34:44 :Je n'ai pas pris le temps de le faire et ce n'est pas le butDonc normalement on imagine que je suis sur une vue de loginPour me connecterSauf que moi, je n'ai pas forcément envie que ça dirige l'utilisateurSur une vue de loginDonc on pourrait très bien aller lui dire
00:35:03 :Et en fait derrière lui va vous envoyerUn permission d'analyseAlors je vais revenir en arrièreEt il fait exactement pareilFlexible, soit vous envoyez un lien de connexionSoit vous envoyez une grosse 403 pour l'intérieur d'accès à la vueDonc voilàJ'ai encore quelque chose à vous montrer
00:35:33 :Alors du coup imaginez bien que çaOn pourrait très bien avoir dans une vue standardOn arrive sur une vue, on a un lien pour cocherEn disant publierEt en fait on serait ici plutôt une requête posteOn aurait plus une vueQui serait faite juste pour faire une requête poste
00:35:54 :Pour passer en publier l'articleDonc c'est pareil, on mettrait un décorateur tout pareilDonc là ce que je voulais vous montrerC'est vraiment le principe pour bloquer l'accès à la vueOn peut faire soit comme ça, soit avec ASTERMEst-ce que je peux passer à la suite rapidement sur l'administration ou pas ?
00:36:14 :OuiVous êtes pressé peut-être, dites-moiSi jamais vous voulez que j'abrègePour le moment c'est bonDonc la chose qu'on voit un peu moins souventC'est un peu plus avancé mais c'est pas non plus un trucOn va dire compliqué entre guillemetsComment je vais m'en vaciller ?
00:36:39 :On va laisser ça comme çaSi on s'en fiche maintenantDonc on vaCommencerOn va faire çaOn va faire comme tout à l'heureÇa c'est une des exceptions utiles le plus souvent dans les projetsC'est ma numéro 1 celle-làDoncOn va l'utiliser en tant que décorateur
00:37:14 :Ça c'est une façon de faire, on prend le décorateurEt on va créer une classePostAdmin, celle que je fais dans tous les projetsC'est rare que j'ai juste du registreDonc là on va utiliser le modèle adminOn va se faire un petit display iciEt on va vouloir afficher le titre
00:37:44 :Vous connaissez ça ou pas ?Un peuC'est bien expliqué, c'est dans la formation 2 sur DjangoT'as dit quoi ?La formation qu'il y a sur Django c'est bien expliquéEt les classes comme çaPour costumer la nuitBah nickelDonc làJe vais relancer monJe sais plus ce que je vais donner au final
00:38:19 :A luiOn va aller sur la nuitDonc là on voit iciOn voit le titre, on voit si c'est publié ou pasDonc là vous voyezIl pourrait aller cliquer sur les publicitésDonc ce qu'on peut très bien faireComment je vais passer ?
00:38:44 :Je vais enlever tout à l'heure la permissionDonc on va se faire un trucOn peut très bien dire iciExactement c'est ce que je veuxDonc je suis un peu ce qu'il se fait dans la docEt il ne faut même pas faire dans la doc ce qu'il fait régulièrement
00:39:11 :Si vous allez voir sur Stack Overflow, il y a pas mal d'exemplesDonc ici on pourrait très bien direOn accède à la request iciEt comme on l'a vu tout à l'heure iciOn peut faire un sperme et lui direOn vérifie si il aLa permissionEt sinon
00:39:38 :On va lui donner en champEn lecture seule du coupOn va lui donner la liste des champsOn va lui dire ça va êtreSi nonOn peut faire tout simpleSinon on peut direOn va rester homogèneIl n'y en a aucun qui a envie de le nier
00:40:10 :Donc ce qu'il veut dire maintenant c'est que si je suis làJ'actualise, on voit qu'ici il en lecture seul le champDans ce cas là, s'il n'a pas la permissionOn le met en lecture seuleDonc là c'est une petite surcharge de méthode qu'on a faitEst-ce que pour l'instant ça va ?
00:40:29 :OuiC'est des choses beaucoup moins courantes qu'on peut faireÀ config Django, mais ça existeJ'ai pas encore vu si j'aurais pu faire des effets de bordMais comme ça là il pensait pour l'instant nonLe problème ici c'est queOn est vraiment sur la vue, alors je ne me suis jamais vérifié
00:40:51 :Si ça protégeait vraiment le champAlors pour moi dans ce cas là ce que je feraisCe que je fais en tous les casC'est que j'ai acheté une couche de sécuritéEt je vais lui dire en faitUtiliser une méthode qui s'appelle StageModelOk, il m'a tout mis, c'est nickel
00:41:13 :C'est pas mal, okDonc, on pourrait très bien direAlors je le fais un petit peuEn bon raccourciDonc on peut aller vérifier si ce champ làIl est dans le formulaireC'est dans le formulaire iciEtDonc on peut regarder si l'utilisateur n'a pas la permissionOk, donc on va pas s'embêter
00:41:44 :TacDonc on peut vérifier çaEt là c'est pareilOn peut même s'amuserDonc là vous n'avez pasTacEt sinonSi on ne se rend pas dans la condition je veux direHop, on envoie le superIci, notre SaveModelSuper.SaveModel ici
00:42:17 :EuhOn a besoin de retourner, c'est bon, c'est çaHopOn envoie la requêteOn a le form iciObject ExchangeOk, donc çaAu moins on est sûr de protéger ici l'attributDonc imaginons dans tous les cas que ça on l'a oubliéTac, c'est pas graveDonc notre utilisateur ici, il y a accès
00:42:50 :Normalement il ne devrait pas y avoir accès iciVoilà, donc là même l'administration n'a pas le droit de le changerDonc, je vais le remettreVous faites ça pour l'afficher entre guillemetsPas en grisé mais en non modifiableMais dans tous les cas, ce qui est pas mal c'est de rajouter ici la méthode SaveModel
00:43:08 :Qui permet de protéger le champDans tous les casDonc la dernière partie est un peu plus avancéeJe m'en sers très rarementMoi je vais plutôt gérer ça dans les vues directementMais à savoir que ça existeSi j'ai des permissions iciSoit en classe, soit en fonction, peu importe
00:43:32 :Ou même des fois directement dans les vues avec une conditionC'est Thomas qui avait posé la questionEn début de semaineEst-ce que c'est plus clair ou pas ?
00:43:44 :OuiEt le côté administration aussi du coup ?Le fait de pouvoir donner accès à l'administrationA chaque fois que je me fais avoirLe fait de donner accès à l'administration avec le statut équipeEt puis tu donnes accès qu'à ce que tu veuxAu niveau des permissions de modèle
00:44:08 :Donc genre voilàCe qui serait pareil pour unJ'arrive plus à revenir en arrièreGénialIl me reste quelque chose iciOk c'est bonOk tacIl me reste quelque chose iciDonc là du coupJ'ai bien montré que c'est granulaire au niveau des modèlesIci l'utilisateur le voit, il ne peut pas les voir
00:44:42 :Il peut juste les ajouter par exempleCe qui peut être un peu bêteOui j'aurais dû ajouter la permissionDonc oui il vous renvoie du coup l'erreur iciOn serait obligé de lui mettre du coup avecChange iciEt normalement ça passeDonc voilàOn peut vraiment donner accès à ce qu'on veut à l'administration
00:45:15 :Pour finir là dessusPour finir là dessusJe vais devoir le couper du coupA savoir que moi je m'en sers souvent quand mêmeJe ne vais pas montrer mon site persoJ'ai dû laisser la mine ou pas ?
00:45:39 :Donc c'est pareil en faitC'est mon CMS perso que j'ai fait en DjangoDonc là c'est exactement pareil en faitQuand vous retrouvez par exemple sur un frameworkUne surcouche de DjangoVous aurez toujours ce système de groupePar exemple éditeur, modérateurSi on clique sur l'éditeurVous avez par exemple ici des modèles
00:46:07 :Autre permission làSi tâche okJe vais retourner rapidement un truc sur un tas de groupesSur les modérateursDonc on peut très bienC'est niveau des pages par exempleOn peut donner des permissions sur des pagesDonc si vous êtes habituéSi vous avez bien compris le système de fonctionnement de Django au niveau des permissions
00:46:35 :Après si vous bossez sur un frameworkEn fait vous ne serez pas perdu du toutParce qu'au début ça parait un peu bizarre comme çaMais si vous avez bien les bases sur les permissions DjangoAprès le reste ça va tout seulEt la création de groupe pour donner plusieurs permissions
00:46:54 :Ca se fait que par l'administration Django ?La création des groupes et tout ça ?Ok bonne question superJe prépare un truc coolA l'époque quand j'avais du mal à comprendre le cinémaJe suis tombé là dessus une foisDonc làDe manière programmatiqueOn peut aller créer des groupes
00:47:26 :Donc là il va se créer des groupes auteurs, éditeursEt je pense qu'il va allerEt par exemple dans les groupes iciDans PublisherGroup qu'il a créé avantIl va aller m'ajouter une permissionDonc la permission sur laquelle il a récupéréIl récupère des permissionsIl boucle sur les permissions qu'il a récupérées ici
00:47:50 :Il boucle, dès qu'il la trouve il l'ajoute au groupeDonc de manière programmatiqueJ'ai fait en sorte que quand quelqu'un allait dans une vueMon exemple c'était genre il s'inscrivaitIl avait un statut spécialEt automatiquement de manière programmatiqueJe l'ajoutais à un groupeDonc par exemple ici on peut très bien dire
00:48:15 :User.groups.addEt on lui ajoute ce groupeC'est bon ou c'est un peu trop flou ?C'est bon pour moiJe vous mets le lien dans le chatIl faut le faire au moins une foisPour avoir le truc en têteProgressivement on va récupérerOn va créer les groupes
00:48:43 :On va boucler sur les permissionsPour les ajouter et après le but c'est vraimentDe récupérer l'utilisateur et d'ajouterCe groupe à l'utilisateurOn fait un groupe tout simplementC'est vraiment être méthodiqueDans ce que vous récupérezCe n'est pas très compliquéEst-ce que ça répond à ta question ?
00:49:10 :Je ne sais pas s'il y a des questionsMais c'était ce que je voulais vous montrerEst-ce que c'est bon pour tout le monde ?
Aucune occurrence trouvée pour « ».
00:00:33
Modèle User Custom : le faire dès le début
00:09:02
Les permissions de base pour chaque modèle
00:12:48
Permission Custom dans le modèle
00:16:22
Note sur les groupes
00:17:48
Choisir ce que voit le staff dans l'admin
00:22:55
Les permissions dans les vues
00:36:30
Les permissions dans l'administration
00:45:21
Wagtail étend ce système de permissions
00:46:52
Gestion des groupes de manière programmatique