- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
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 person00:00:00 :Vous verrez également une autre façon d'étendre un modèle d'utilisateur qui va tirer profit d'unautre modèle, par exemple dans ce cas-ci un modèle que j'ai appelé Profile. C'est quelque
00:00:10 :chose que vous retrouvez souvent dans d'anciennes versions de Django, puisqu'avant c'était laméthode qui était privilégiée pour rajouter des champs à un modèle utilisateur. Aujourd'hui on
00:00:20 :préfère donc faire ce qu'on a fait dans les parties précédentes, c'est-à-dire faire uneclasse custom qui va hériter de AbstractUser ou AbstractBaseUser et qui va rajouter deschamps directement à l'intérieur de ces classes. Alors dans quel cas est-ce qu'on pourrait avoir
00:00:33 :envie de passer encore par cette façon de faire avec par exemple ici une autre classe Profile ?Eh bien ça peut être pratique si vous souhaitez avoir différentes données pour différents typesd'utilisateurs, puisque vous ne pouvez pas à l'intérieur d'un projet Django avoir différentsmodèles d'utilisateurs. On aura obligatoirement un seul modèle qui en ce moment est déclaré
00:00:52 :donc dans le fichier Settings grâce à cette variable AuthUserModel et on ne peut pas enavoir plusieurs. Donc là ici on a un seul modèle qui est le modèle CustomUser dans ce cas-ci,
00:01:01 :donc cette classe ici qui est tout simplement une classe qui hérite de AbstractUser dans cecas-ci. Et si on souhaite donc avoir différents types de profils, par exemple on pourrait avoir
00:01:10 :des profils pour un client et un profil pour des vendeurs et donc on ne souhaiterait pas avoir lesmêmes champs disponibles pour les clients et pour les vendeurs. Et donc pour ça on peut avoir un
00:01:21 :même modèle CustomUser dans ce cas-ci avec le nom d'utilisateur, le prénom et toutes ces donnéesqui sont communes aux clients et aux vendeurs et ensuite avoir un profil qui va spécifier différentschamps qui vont nous permettre de séparer les données qui sont spécifiques aux vendeurs desdonnées qui sont spécifiques aux clients. Donc dans ce cas-ci qu'est ce qu'on fait ? Là j'ai
00:01:41 :déjà écrit tout le code pour que ça aille un petit peu plus vite. Donc on a notre classe CustomUsersur laquelle on pourrait donc rajouter des champs qui seraient communs à tous nos utilisateurs etensuite on a donc une classe Profile qui hérite de Models.Models dans laquelle on a rajouté un
00:01:57 :champ User qui est un champ de type one-to-one field. Donc on a une relation un à un entre ceprofil et l'utilisateur. Ici vous voyez qu'on utilise la variable qui est à l'intérieur du
00:02:09 :fichier de settings donc cette variable AuthUserModels. Donc ça c'est vraiment la façon defaire qui est privilégiée. Plutôt que de mettre directement la classe il vaut mieux passer par le
00:02:18 :fichier de settings donc par la classe qu'on est spécifié ici. Même si c'est la même au finalc'est vraiment la méthode qui est préconisée par Django pour créer un lien ici avec un champ detype one-to-one field. On a également le onDelete qui est mis à Models.Cascade donc ce que ça veut
00:02:32 :dire c'est que si on supprime l'utilisateur ça va également supprimer le profil qui lui estassocié. Ensuite qu'est ce qu'on a ici ? On a tout simplement un signal qui va automatiquement créer
00:02:42 :un profil associé à notre utilisateur puisque quand on va créer un utilisateur on veut à chaquefois qu'on ait un profil associé qui soit créé et qui lui soit lié. Donc ce qu'on a ici c'est une
00:02:53 :fonction que j'ai appelé PostSaveReceiver on pourrait l'appeler n'importe comment je pourraismettre Patrick ici ça fonctionnerait de la même façon ce n'est pas important. Ce qui est important
00:03:00 :c'est juste de lier donc ce signal à la création de notre utilisateur donc l'utilisateur customuser ici. Donc qu'est ce que j'ai ici ? Alors je vais juste remettre les noms comme c'était avant
00:03:09 :donc on a en fait un signal qui s'appelle PostSave que l'on importe depuis django.db.models.signalsici donc on importe PostSave et ce qu'on va faire c'est qu'on va relier donc cette fonction à unémetteur et l'émetteur dans ce cas ci c'est là encore settings.hotUserModel donc ce que ça fait
00:03:27 :en fait c'est que quand on va créer un nouveau modèle à partir de cette classe quand on vacréer un nouvel utilisateur à partir de custom user et bien on va avoir cette fonction qui vaêtre exécutée. Dans cette fonction qu'est ce qu'on récupère ? On récupère l'instance donc
00:03:40 :l'instance qui est créée dans la base de données et on récupère également un booléen qui va nousdire s'il a été correctement créé ou non. Donc on va pouvoir ensuite vérifier donc si created
00:03:49 :est égal à true donc si c'est vrai on va pouvoir créer un profil associé en faisant tout simplementdonc profile.objects.create et en passant à notre utilisateur ici l'instance que l'on est en train
00:04:00 :de créer dans la base de données. Donc je vais vous montrer ce que tout ça donne dans la pratiquepour l'instant on a juste user ici mais là encore on pourrait donc spécifier certaines choses parexemple on pourrait mettre un identifiant pour les vendeurs comme je vous disais donc on pourrait
00:04:12 :mettre vendor ID ici et faire un charField avec différentes informations et on pourrait doncavoir différents profils pour différents utilisateurs. Donc dans ce cas-ci je vais
00:04:22 :juste laisser l'utilisateur et je vais vous montrer ce que ça donne au niveau de la basede données. Donc là j'ai tout supprimé j'ai supprimé mes migrations j'ai supprimé la base
00:04:29 :de données également et dans un terminal ici donc je vais commencer par créer les migrationspython-manage.py make-migrations on va ensuite appliquer ces migrations avec migrate et on va
00:04:42 :ensuite créer un utilisateur donc je vais utiliser python-manage.py create-superuseron me demande un nom d'utilisateur une adresse mail un mot de passe donc je valide le mot depasse puisque là il est trop faible puisque j'ai mis là encore 1 2 3 4 5 6 donc je valide un mot
00:05:01 :de passe qui est trop générique ce n'est pas grave et donc là on a bien notre utilisateur quia été créé et on va aller voir dans notre base de données si on a bien le profil également quia été créé. Donc à l'intérieur de table plus qui me permet de visualiser ma base de données je
00:05:14 :vais l'ouvrir et on va aller voir ce qu'on a donc dans accounts custom user donc on a bien notreutilisateur ici avec le nom d'utilisateur et l'email que j'ai renseigné et on a égalementune table ici qui s'appelle accounts profile qui va contenir tout simplement une entrée avec le
00:05:28 :user id qui est associé donc user id ici c'est tout simplement un lien qui va pointer vers leid 1 donc le id 1 qu'est ce que c'est et bien c'est l'utilisateur ici avec le id de 1 doncl'utilisateur qu'on vient de créer. Donc on a bien ce lien qui est fait entre les deux entre
00:05:42 :l'utilisateur que j'ai créé et le profil et donc dans ce profil ici on pourrait comme je vous disaisrajouter des champs en fonction des différents profils de nos utilisateurs. Alors vous voyez
00:05:51 :que c'est quand même assez pratique dans certains cas de figure un des avantages également parcontre de cette façon de faire c'est que ça va augmenter le nombre de requêtes qui vont êtreeffectuées dans votre base de données puisque forcément comme vous l'avez vu là on a deuxtables et donc quand on va aller chercher des informations sur un utilisateur on va avoir plus
00:06:07 :de requêtes qui vont être effectuées pour aller chercher les informations de l'utilisateur et pouraller chercher le profil associé. Donc c'est vraiment le gros des avantages de cette façon
00:06:16 :de faire puisqu'on a deux modèles au lieu d'un mais dans certains cas de figure donc comme parexemple quand on va voir des champs qui sont différents selon certains types d'utilisateursc'est vraiment une très bonne façon de faire puisque là encore on ne peut pas avoir plusieursmodèles d'utilisateurs à l'intérieur d'un projet Django donc si vous souhaitez avoir
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.