- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions

Gabriel Trouvé
16 mars 2023 - 16 mars 2023 à 14:51
checkConversation résolue
2 réponses
E commerce, User manager
Re,Dans la méthode create_superuser, dans la vidéo la méthode est faite de cette manière :Mais pendant ma formation j'avais vue une autre façon. Donc est-ce que je peux le faire …
00:00:00 :Dans cette partie, on va voir comment créer ce qu'on appelle un gestionnaire d'utilisateurqui va être personnalisé pour notre modèle ici de compte d'utilisateur.Pourquoi on a besoin de faire ça ?
00:00:09 :Puisqu'on a changé la façon dont on va créer un utilisateur.Avec le modèle qu'on avait avant, on utilisait le nom de l'utilisateur,donc ce champ Username, pour créer un utilisateur.
00:00:19 :Et dans notre cas, on va devoir utiliser l'adresse e-mail.Donc on va devoir modifier la méthode CreateUser et la méthode CreateSuperUserqui sont deux méthodes.
00:00:29 :Donc la première méthode qui nous permet de créer un utilisateur simpleet la deuxième qui nous permet de créer un utilisateur d'administration.C'est cette deuxième méthode CreateSuperUser qui va être utiliséequand on passe par python-manage.py et qu'on fait CreateSuperUser.
00:00:42 :Donc on va devoir créer un gestionnaire personnaliséet pour ça, on va faire une variable Object ici.Donc c'est la fameuse variable, pour l'instant je vais juste mettre une chaîne de caractère vide,mais c'est cette variable qui, par exemple, quand on fait un product,quand on a notre modèle product, vous vous rappelez, on fait Object
00:00:58 :et par exemple, on va faire All pour récupérer tous les products.On va faire Filter pour filtrer les produits et en récupérer seulement certainsen fonction d'une option de filtre.
00:01:07 :Donc c'est cet Object ici qu'on va modifier.On pourrait l'appeler autrement et on pourrait passer par un autre nom,c'est tout à fait possible.On peut même créer plusieurs gestionnaires différents pour un même modèle.
00:01:16 :Dans notre cas, on va juste écraser celui par défaut.Donc comme ça, quand on va faire Shopper.Object,on va utiliser notre gestionnaire personnalisé plutôt que celui par défaut.
00:01:26 :Donc un gestionnaire, comment on le crée ?Eh bien, on va le créer avec une classe.Donc là encore, on refait une classe qui va hériter d'un manager de base.
00:01:34 :Donc moi, je vais l'appeler CustomUserManageret il va hériter de BaseUserManagerqu'il va falloir importer, bien sûr, puisqu'il n'est pas encore importé.Donc ça se trouve à l'intérieur d'un module assez long.
00:01:46 :Donc vous voyez ImportDjangoContribHotBaseUser.Donc je l'importe et on a bien l'import qui s'est effectuée ici au-dessus.Donc cette classe est une classe de base qu'on va devoir modifierpour rajouter les deux méthodes dont je vous ai parlé.
00:01:58 :Donc la méthode CreateUseret pour l'instant, je vais juste mettre un passet on va créer l'autre méthode également.Comme ça, elle sera déjà créée.
00:02:06 :Donc CreateSuperUser, comme ceci.Donc ça, c'est la méthode CreateUserqui va nous permettre de créer un utilisateur de base.Alors qu'est-ce qu'on a besoin comme paramètre ?
00:02:15 :On va avoir besoin forcément de l'adresse emailpuisque c'est le champ Requiet bien entendu d'un mot de passepuisqu'on est obligé d'avoir un mot de passe pour un utilisateur.
00:02:24 :Et ensuite, on va rajouter les quarks icipuisqu'on pourrait vouloir passer d'autres arguments à cette fonction.Par exemple, si vous souhaitez, au moment de la création,passer un FirstName, un LastName,si je retourne voir dans AbstractUser,vous vous rappelez, on a plusieurs autres champsqui sont définis par défaut comme FirstName, LastName,
00:02:40 :IsAstaff, IsActive, etc.Et là, on retrouve, vous voyez, Object qui est égal à UserManager.Donc nous, ce qu'on va faire ici,c'est récupérer l'adresse email, le mot de passeet également tous les autres champs qui pourraient être définiscomme le prénom, le nom de famille, etc.
00:02:54 :On va tout de suite faire une vérificationpour s'assurer que l'email a bien été envoyé.Donc on va faire un IfNot.Donc si l'email ne contient rien,si on envoie par exemple une chaîne de caractère vide,et bien on va lever une erreur, donc une valueError,et on va dire l'adresse email est obligatoire.
00:03:11 :Donc si on passe cette vérification,ça veut dire qu'on a bien une adresse email.Et ce qu'on va faire, c'est déjà normaliser cette adresse email.
00:03:20 :Donc pour ça, on a sur notre classe BaseUserManager,on peut aller l'inspecter si vous souhaitez,pour voir ce qui est contenu à l'intérieur.Vous voyez qu'on a cette classe NormalizeEmailqui va nous permettre de normaliser l'adresse email.
00:03:31 :Donc en fait, ce que ça va faire, c'est tout simplementprendre le nom de domaine et le mettre en minuscule.Et vous voyez, c'est une fonction très très simple.
00:03:38 :On va juste, avec un split, splitter sur l'arrowBase,récupérer la deuxième partie et faire un domain.lower.Donc très très simple, mais on va utiliser cette méthodepour normaliser notre adresse email.
00:03:48 :Donc on va faire email égale self.normalizeEmailet on va lui passer notre adresse email.Et ensuite, ce qu'on va faire, c'est créer une instance de notre modèle.
00:03:56 :Donc sur un UserManager, donc un gestionnaire ici,on va pouvoir utiliser self.model.Et self.model, ça va représenter le modèlequi est dans ce cas-ci le modèle Shopper.
00:04:06 :Donc ça va nous permettre de créer une instance de notre Shopperen lui passant des éléments.Donc c'est exactement la même chose que là encore,si on prend l'exemple du produit, si on faisait product.object.create,
00:04:16 :c'est exactement ça ici, on a notre modèleet on va créer un modèle à partir d'éléments qu'on pourrait lui envoyer.Donc là on va faire la même chose, mais on va passer par self.model
00:04:25 :puisque c'est une façon générique de récupérer le modèlequi correspond à notre manager.Et je vais en profiter ici pour remplacer ma chaîne de caractère videpar notre custom UserManager.
00:04:35 :Et on met ici des parenthèses,puisqu'on va créer une instance de ce manager.Donc ici, self.model, ça va représenter notre classe Shopper.Et on va lui passer tout simplement l'adresse email.
00:04:45 :Pour le mot de passe, on va le faire avec une méthode séparéequ'on va voir tout de suite.Et on va également lui passer tous les arguments Quarksqui vont être passés à cette méthode.
00:04:53 :Donc par exemple, d'autres fields que l'on voudrait setter sur ce modèle.On va récupérer ça dans une variable qu'on va appeler user.Et on va ensuite utiliser une fonction pour setter le mot de passe.
00:05:02 :Donc on va faire user.setPassword et on va passer le mot de passe.Alors pourquoi on passe par setPasswordet pourquoi on ne passe pas tout simplement password ici comme ceci ?
00:05:11 :Tout simplement parce que si on le fait de cette façon,on va passer le mot de passe en clair.Il ne sera pas encrypté.Si on passe par setPassword, donc si je me rends sur cette méthode,vous voyez setPassword ici qui est disponible dans AbstractBaseUser.
00:05:24 :Vous allez voir qu'en fait, on a ici cette fonction makePasswordqui va, comme c'est indiqué ici, utiliser des fonctionspour ajouter ce qu'on appelle un hashet qui va nous permettre donc d'encoder le mot de passe.
00:05:35 :Donc c'est pour ça que c'est très important de passer par setPassword.Et c'est ce qui fait que dans la base de données,si vous allez inspecter votre base de données,vous ne voyez pas le mot de passe en clair.
00:05:42 :Vous voyez une longue séquence de chaînes de caractèrequi va être utilisée par Django pour retrouver le mot de passe initial.Et c'est quelque chose qui ne peut être fait que dans un sens.
00:05:50 :Donc comme ça, si quelqu'un a accès pour une raison ou une autreà votre base de données,il ne pourra pas récupérer les mots de passe de vos utilisateurs.
00:05:57 :Donc maintenant qu'on a fait ça,on va pouvoir sauvegarder l'utilisateuravec tout simplement user.saveet retourner l'utilisateur qui a été créé.Donc ça, c'est pour un utilisateur de base.
00:06:07 :Maintenant, on va passer à la création d'un super utilisateur.Vous allez voir que c'est à peu près la même chose.En fait, on va utiliser cette méthode iciet on va juste faire quelques opérations en pluspour s'assurer qu'on a bien les champsqui sont spécifiques à un modèle de super utilisateur
00:06:21 :qui sont correctement paramétrés.Donc ici, on va remettre email et passwordet on va rajouter également les quarks là encorepour récupérer différents champscomme le nom d'utilisateur ou d'autres champsqui pourraient être passés directement à cette méthode.
00:06:34 :Et qu'est-ce qu'on va faire ici ?Eh bien, on va tout simplementsetter des valeurs pour trois champs.Donc le champ isStaff,le champ isSuperUseret le champ isActive.
00:06:44 :Donc comme ça, on va s'assurer en faitque notre utilisateur qui est créé avec cette méthode icic'est bien un utilisateur qui est staffdonc qui fait partie de l'équipe d'administration,c'est bien un super utilisateur et qu'il est actif.
00:06:56 :Puisque quarks, c'est un dictionnaire,donc on va setter ces valeurs sur notre dictionnaireet on va ensuite passer ce dictionnaireà la fonction createUser.Donc ce que je vais faire, c'est mettre icila valeur isStaffet on va la mettre à true.
00:07:09 :Et on va faire pareil pour les deux autres champs.Donc le champ isSuperUseret le champ isActive.Donc comme ça, on va forcer ces valeurs à trueet ensuite, on va tout simplementutiliser cette méthode icipour créer notre utilisateur.
00:07:23 :Donc on va faire self.createUseron va passer l'email égale email,le password égale à passwordet on va passer les quarks.Donc comme ça, imaginez que quelqu'unutilise cette méthode,imaginez qu'on fasse donc shopper.object.createSuperUser
00:07:41 :et bien là en fait,on va pouvoir lui passer un email,donc on va mettre par exemple test.gmail.comun mot de passe,on va mettre 1, 2, 3, 4, 5, 6et ensuite on pourra lui passer par exemple firstName,dire qu'on est en présence de Patricket ensuite, même si ici on passait
00:07:59 :isStaff égale à false,et bien dans notre fonction ici,dans notre méthode createSuperUser,on le passerait automatiquement à true.Donc même si vous le passez à false,nous on va forcer ces valeurs à trueet si vous ne les passez pas,et bien on va les créer.
00:08:12 :Donc si elles n'existent pas,si on ne passe pas isStaff,isSuperUser ou isActive,on va les setter avec des valeurs par défaut à true.Donc ensuite, on va passer ces informationsd'email et de mot de passeet tous les autres argumentsque l'on pourrait envoyercomme le firstName ici,
00:08:25 :on va les passer avec le quarksà notre fonction createUserqui va créer notre utilisateur.Et on va tout simplement retourner tout ça,donc on va retourner l'utilisateur qui est créépuisque dans createUser,on retourne l'utilisateuret donc là encore,on va faire un returnet ça va donc retourner cet utilisateur
00:08:40 :qui est retourné par la méthode createUser.Donc ça fait pas mal de choses,n'hésitez pas à revenir là-dessus,c'est pas très compliqué dans l'ensemble,c'est juste qu'on doit refairepas mal de choses de basecomme le normalizeEmail ici,le setPasswordet après vraiment,c'est juste une logiquede création d'utilisateur assez normale
00:08:56 :avec de l'orienté objet,des arguments, des méthodes, etc.Donc ça, ça va nous permettre maintenantde passer non pas par le non-utilisateur,donc non pas par le usernamequi était le comportement par défaut,mais de passer à la placepar l'adresse emailgrâce à ces deux méthodesque l'on a recréées.
00:09:11 :Maintenant qu'on a bien créé tout ça,on va pouvoir tester cette intégrationen créant un super utilisateur.Donc je vais déjà refaire l'immigrationmakeMigrations.Voilà, vous voyez qu'on a changéle manager sur le shopper,donc ça c'est le changementqu'on a fait iciet on va ensuite donc appliquer
00:09:27 :ces migrations avec migrate.Voilà, et ça a été modifié.On va ensuite pouvoir utiliserpython manage.py create super userpour vérifier qu'on nous demande biencette fois-ci l'adresse emailet non plus le mot de passe.
00:09:39 :Donc là, on voit bien qu'on a email,je vais faire un compte de testà gmail.com, password,password again,et voilà, super user created successfully.
00:09:48 :Donc ça fonctionneet on va aller voir dans la base de donnéesce que ça donne.Donc j'ouvre ma base de donnéesavec table pluset je vais aller dans la tableaccounts shopper ici.
00:09:57 :On voit qu'on a bienun nouvel identifiant ici.On remarque que le mot de passecomme je vous le disaisn'est pas visible en clair.
00:10:03 :On a bien his super userqui est égal à 1,his staff et his active égalementet l'adresse email qui est bien setée.Et vous voyez qu'on n'a plusle champ usernamequi n'est plus dans cette table.
00:10:12 :On a toujours first nameet last namequi étaient définisdans la classe de base,donc l'utilisateur de base,mais on n'a plusle champ username.
00:10:19 :Donc tout fonctionne parfaitement.On a bien réussi à créerun super utilisateuravec l'adresse email.On peut également aller testerdans un shell,donc python manage.py shell.
00:10:27 :Je vais importer,donc on va fairefrom accounts.models import shopperet on va pouvoir utilisershopper.objects.create useret vous allez voir quesi on donne une adresse email vide,un mot de passe,on va mettre 1, 2, 3, 4, 5, 6et on pourrait passer,comme je vous le disais,
00:10:45 :first name égal Patricket d'autres éléments ici.Donc là, si je fais çaavec une adresse vide,on aura bien l'adresse emailest obligatoire.Donc ça fonctionne.
00:10:53 :Et si par contre,à la place, je metspatrick.gmail.com, je valide.On a bien l'objetqui a été créé,qui nous est retourné.On va aller voir dans table pluset on a bien doncpatrick.gmail
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.