- 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 :Dans cette partie, on va créer notre propre classe qui va hériter de AbstractUser.Donc comme vous le voyez dans ce fichier, donc le fichier dans DjangoContribHotModels.py,
00:00:10 :on a deux classes, la classe AbstractUser qui définit un certain nombre de champs,comme le champ pour le nom d'utilisateur, pour le prénom, le nom, l'email, etc.
00:00:20 :Donc c'est une classe qui est déjà assez complète, de laquelle on va pouvoir hériterpour créer notre propre modèle d'utilisateur avec déjà tous ces champs de prérempli pour nous.
00:00:29 :Si on veut quelque chose de beaucoup plus spécifique, on peut passer par la classe AbstractBaseUserqui, elle, ne définit pas tous ces champs ici.Donc si jamais vous n'avez pas besoin d'un nom d'utilisateur, d'un prénom, d'un email,eh bien on va préférer hériter de AbstractBaseUser.
00:00:43 :Donc moi ce que je vais faire ici, c'est à l'intérieur du fichier Models.py de mon application Accounts,créer une classe que je vais appeler tout simplement CustomUser et qui va hériter de AbstractUser.
00:00:57 :Donc on va devoir importer cette classe AbstractUser, donc tout en haut ici de mon fichier,je vais dire from django.contrib.hot.models import AbstractUser.Donc ça, ça va nous permettre d'étendre cette classe et de la personnaliser.
00:01:12 :Par exemple, si vous souhaitez rajouter certains champs comme l'âge de votre utilisateurou par exemple le code postal, eh bien vous allez pouvoir le faire directement à l'intérieur de cette classesans avoir besoin de modifier ou de toucher à la classe AbstractUser.
00:01:26 :Comme ça, s'il y a des modifications qui sont faites dans les prochaines versions de Django,vous n'aurez rien qui sera cassé, vous aurez juste votre classe ici qui étant la classe de baseavec tous les mécanismes par défaut.
00:01:37 :Donc ici ce que je peux faire, c'est spécifier par exemple un zip code,donc ici un champ qui va être de type CharField, donc je vais devoir utiliser les modèles.
00:01:46 :Donc je vais faire from django.db import Models et ça, ça va me permettre de créer des modèles.Donc on va créer un CharField, on va dire qu'il n'est pas obligatoire,donc on va dire blank égale true et on va donner une longueur maximale qui va être de 5,puisque en France en tout cas, le code postal a une longueur maximale de 5.
00:02:04 :Donc par exemple pour Paris, on aurait 75 000.Donc ça, c'est ma classe d'utilisateur.Alors là, il est très important de noter qu'actuellement, j'ai une base de donnéeset que j'ai créé par la suite, après avoir appliqué les premières migrations, ma classe.
00:02:18 :Donc ça, ce n'est pas la bonne façon de faire.Il faut déjà créer votre classe et ensuite créer les premières migrations,sinon vous risquez d'avoir des problèmes.
00:02:26 :Donc là actuellement, si on regarde, dans mes migrations, je n'ai rien,mais dans ma base de données, j'ai déjà des migrations qui ont été appliquées.
00:02:33 :Donc pour vous montrer ça, je vais utiliser un logiciel qui s'appelle TablePlus,qui permet d'inspecter des bases de données.Donc j'ai ma base de données ici qui correspond à mon projet.
00:02:42 :Je vais double cliquer pour l'ouvrir et vous voyez que j'ai déjà des tables iciqui sont à l'intérieur de ma base de données, puisque j'ai déjà créé les migrations.
00:02:49 :Donc j'ai déjà dans mon terminal, si je vais dans mon terminal ici,j'ai déjà fait en fait python manage.py migrate.Donc si par la suite vous changez le modèle, là vous risquez d'avoir des problèmes.
00:02:59 :Donc dans ce cas-ci, ce qu'il faut faire, c'est vraiment avant d'appliquer les premières migrations,avant de créer votre super utilisateur et toutes ces choses-là,et bien créer votre classe et indiquer à l'intérieur des settingsque c'est cette classe que vous allez utiliser pour gérer les utilisateurset non pas la classe user par défaut,
00:03:15 :donc cette classe que l'on retrouve à l'intérieur de Django Contrib Hot Models.Donc pour ça, on va devoir spécifier ici que custom users est la classe à utiliser.
00:03:23 :Donc on va aller dans les settings de l'application, dans settings.py ici,et donc tout en bas ici, je vais créer une variable qui s'appelle hot user modelet qui va être égale à accounts.customuser, tout simplement.
00:03:37 :Donc ici, on a tout simplement une chaîne de caractèrequi contient le nom de mon application, donc accounts, et le nom de ma classe.Donc la classe qui est définie à l'intérieur de models.py ici.
00:03:47 :Bien entendu, il faut que votre application soit également installée,donc qu'elle soit enregistrée tout en haut dans mon fichier de settings,ici dans les installed apps, donc là j'ai bien mon application accounts qui est définie.
00:03:58 :Donc il faut que vous ayez votre application, il faut spécifier hot user model ici,et ensuite on va pouvoir donc appliquer les migrations,et Django va être au courant qu'il faut qu'il utilise ce modèleplutôt que le modèle de base.
00:04:11 :Donc moi, je vais supprimer ma base de données ici, je la sélectionne,je clique sur delete, je valide ici avec ok.Donc là, bien entendu, comme je vous disais, il faut faire ça au tout débutquand vous créez votre projet, parce que forcément,si vous avez déjà une base de données avec des utilisateurs,
00:04:24 :et que vous changez de modèle par la suite,et bien là, ça va être beaucoup plus compliqué,et vous n'allez pas pouvoir supprimer l'entièreté de votre base de données,bien évidemment.
00:04:32 :Donc là, ce que je vais faire, c'est appliquer ces migrations.Donc je vais faire déjà un make migrations pour enregistrer le modèleque j'ai défini ici.
00:04:39 :Donc on va faire python manage.py make migrations,je valide avec ok, et là, on a bien notre migration qui a été créée,qui est disponible ici, et qui va nous permettre de renseignerce modèle ici à l'intérieur de notre base de données.
00:04:53 :Donc vous voyez qu'on a bien create model ici avec custom user,et on a tous ces champs ici qui sont définis,puisqu'on hérite en fait de abstract user.
00:05:01 :On hérite de abstract user, et dans abstract user,on avait tous les champs qui étaient définis.Si je me rends à l'intérieur de ce fichier,on avait le champ username, le champ first name, last name,email, e-staff, etc.
00:05:11 :Donc c'est tous ces champs que l'on retrouve icidans notre migration initiale,donc cette migration à l'intérieur de mon dossier migrationdans mon application accounts.
00:05:19 :Et donc quand je vais appliquer ces migrations,on va avoir tous ces champs qui vont être créésdans notre base de données,et on pourra par la suite donc utiliser ce modèlepour la gestion de nos utilisateurs.
00:05:28 :Donc là, je vais appliquer mes migrations,manage.py migrate, je valide avec entrée.Là, toutes les migrations ont été appliquées.Donc on voit ici qu'on a bien les migrationsavec l'application d'authentification,et on a par la suite, après la migration numéro 12,donc cette migration à laquelle on fait référence ici
00:05:46 :dans les dépendances de ma migration initialede mon modèle que je viens de créer,eh bien on a notre migration initiale qui est crééeet qui va nous permettre d'avoir donc cette tabledans notre base de données.
00:05:56 :Donc si je retourne dans ma base de donnéesavec TablePlus,vous voyez qu'auparavant, j'avais une table AuthUserqui me permettait donc de créer des utilisateurs,et donc cette table AuthUser,elle appartenait à l'application Auth,et on avait donc le modèle d'utilisateur.
00:06:10 :Donc ça, c'est ce qu'on avait avant,avant que je supprime ma base de données.Donc là, je vais la fermer et la rouvrirpour vous montrer ce qu'on a maintenant.
00:06:17 :Donc maintenant, vous voyez qu'on n'a plus Auth-Userpuisque cette table n'existe plus.À la place, on a notre application ici,Accounts-CustomUser.Et là, donc on retrouve tous les champsqui étaient définis à l'intérieur de la classe AbstractUserdont on a hérité,et on retrouve également notre champ qu'on a rajouté,
00:06:34 :donc le champ ZipCodequi nous permet de spécifier donc, par exemple,dans ce cas-ci, le code postal d'un utilisateur.Donc vous voyez ces petites différences.
00:06:43 :Là encore, donc je le répète,c'est bien important de faire ces migrations au tout début,après que vous ayez créé votre modèle custom,que vous ayez fait les migrations.
00:06:52 :Vous pouvez appliquer ces migrations,mais si vous avez déjà créé des migrations,vous allez déjà avoir une table AuthUserqui va être créée,et donc ça va rajouter une tablepour la gestion des utilisateurs.
00:07:03 :Donc vous aurez deux tables dans votre base de donnéespour la gestion d'utilisateurs,et là, vous allez avoir des conflits, des problèmes,et j'en passe.
00:07:09 :Donc vraiment bien importantde déjà créer votre modèleavant d'appliquer les premières migrations.Donc là, on a notre table,et on va pouvoir donc créer des utilisateursà partir de notre classe.
00:07:20 :Donc notre classe qu'on a créée ici.Donc maintenant, je vais vous montrer ce que ça donneen créant un super utilisateur.Donc je vais faire python manage.py
00:07:29 :create super user.Donc ça, c'est la commande de manage.pyqui me permet de créer facilementun utilisateur pour l'administration de mon site.Donc je valide avec Entrée.
00:07:39 :On me demande un nom d'utilisateur.Donc c'est normal,puisque si je me rends là encoredans cette classe AbstractUser,on voit que le nom d'utilisateur icidoit être unique,et que c'est ce nom d'utilisateurqui va me servir pour distinguerles utilisateurs inscrits sur mon site.
00:07:53 :On a également l'email qui est requis dans RequiredFields.Donc là, je rentre un nom d'utilisateur.Je vais mettre tbash, une adresse email,un mot de passe.
00:08:02 :Donc là, je vais mettre un mot de passe assez court,et il va m'avertir que le mot de passe est trop court,qu'il est trop commun,et qu'il ne contient que des chiffres,puisque j'ai mis 1, 2, 3, 4, 5, 6.
00:08:10 :Donc je vais bypasser ces validations icien mettant Y, donc pour Yes.Je valide avec Entrée,et là, j'ai bien mon utilisateur qui a été créé.
00:08:18 :Je vais pouvoir aller ensuiterécupérer cet utilisateur,et vous allez voir que sur cet utilisateur,on va pouvoir, par exemple,modifier le code postal.Donc je relance un shell,python-manage.py shell.
00:08:28 :Je vais importer, donc depuis accounts.models,cette fois-ci, donc CustomUser,donc ma classe Custom pour gérer mes utilisateurs,et je vais récupérer le premier utilisateurde ma base de données,puisque dans ce cas-ci, il n'y en a qu'un.
00:08:40 :Donc si j'affiche User,j'ai bien mon CustomUser ici avec tbash.Si j'affiche le code postal,pour l'instant, il n'y a rien,puisque je n'ai rien renseigné,mais je vais pouvoir donc le changer.
00:08:50 :Par exemple, mettre ici 75 000,et sauvegarder donc mon utilisateur.Et là, si je raffiche le code postal,j'ai bien 75 000.Et si je vais voir à l'intérieurde ma base de données avec TablePlus,vous allez voir ici qu'on a biennotre utilisateur qui a été crééavec le mot de passe qui est encrypté.
00:09:05 :Donc ça, c'est normal, c'est logique.On a notre nom d'utilisateur,et on a bien le zip code ici qui est affiché.Donc voilà comment on fait pour créerune classe qui hérite de AbstractUser.
00:09:16 :Donc là, vous voyez qu'on a juste rajouté un champ,donc un champ pour le code postal,et qu'on tire profit, en fait,de tout ce qui est définià l'intérieur de AbstractUser.
00:09:24 :Donc ça, c'est très pratiquesi vous avez exactement les mêmes besoinsque ceux qui sont définisà l'intérieur de AbstractUser.Si vous avez besoin d'un nom d'utilisateur,d'un email,si vous voulez que ce soit le nom d'utilisateur,donc comme c'est le cas ici,qui soit utilisé pour distinguerles différents utilisateurs de votre site,
00:09:40 :eh bien, c'est parfait.Vous n'avez pas besoin de réinventer la roue,tout est déjà fait pour vous.Par contre, si vous voulez aller un peu plus loinet créer vos propres champs,pour par exemple définir que,en fait, vous n'avez pas besoin de nom d'utilisateuret que vous souhaitez uniquement passer par l'email
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.