- 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 personlive_helpToutes les questions
Zorglub25
18 septembre 2023 - 18 septembre 2023 à 16:12
checkConversation résolue
11 réponses
Erreur lors de la création des migrations
Bonjour Thibault, J'ai suivi pas à pas la vidéo "Créer une vue d'inscription personnalisée". A la 2e minute de la vidéo, on crée les migrations. Ce m'affiche le message d'erreur …
00:00:00 :Dans cette vidéo, on va voir comment cette fois-ci créer un formulaire pour permettre à un utilisateur de s'inscrire à notre siteavec un modèle d'utilisateur qui a été un peu plus personnalisé.
00:00:11 :Actuellement, j'ai un modèle custom user qui hérite de AbstractBaseUser.AbstractBaseUser qui est la classe qui ne contient quasiment rien à part la gestion du mot de passe.
00:00:21 :On voit ici dans cette classe qu'on a un champ password qui est défini, mais on n'a pas de champ pour le nom d'utilisateur.Ce qu'on va vouloir faire dans ce cas-ci, c'est d'utiliser un modèle personnalisé qui va nous permettre d'utiliser à la place d'un nom d'utilisateur, un email.
00:00:43 :Là, j'ai renseigné l'attribut username field et j'ai indiqué qu'il était égal à ce champ email.C'est l'email qui va nous servir pour le nom d'utilisateur.
00:00:52 :On a également d'autres champs ici qui nous permettent de spécifier dans le cas d'un modèle personnalisé si l'utilisateur est actif,s'il fait partie de l'équipe de staff, l'équipe d'administration et s'il est administrateur du site lui-même.
00:01:05 :On a également un dernier champ zip code qu'on verra comment inclure à l'intérieur de notre formulaire.J'ai également cette classe custom user manager qui hérite de BaseUserManager qui me permet de modifier la création de l'utilisateurpuisque dans ce cas-ci, on va utiliser l'adresse email.
00:01:27 :C'est juste pour vous présenter ici le modèle avec lequel on va travailler.La première chose que je vais faire, c'est de créer ma base de données,donc de créer les migrations et ensuite ces migrations dans la base de données.
00:01:37 :Pour ça, je vais utiliser python manage.py.On va faire make migrations pour créer ces migrations déjà.Donc là, ça va créer notre première migration ici dans notre application account.
00:01:48 :Ensuite, on va créer notre base de données.Là encore, à chaque fois, on repart d'un état neutre, c'est-à-dire qu'on n'a pas déjà une base de données avec des utilisateurs.
00:01:56 :On repart de zéro et on crée notre première migration, donc nos premières migrations ici puisqu'il y en a plusieurset notre modèle d'utilisateur à l'intérieur de notre base de données.
00:02:13 :que l'on va donc créer à l'intérieur de views.py.Donc ici, je crée une vue sign up qui est une fonction Python.Et pour l'instant, on va retourner tout simplement notre template.
00:02:22 :Donc on va retourner render, la requête, le template qui est dans account.signup.html.Et pour l'instant, on ne donne rien au contexte.Donc là, il faut importer render, bien entendu.
00:02:33 :Donc je vais l'importer rapidement avec PyCharm en faisant option entrée.Et donc render ici a été importé depuis django.shortcut.Donc là, pour l'instant, ce que je fais, c'est tout simplement retourner ce fichier sign up.html qui ne contient rien.
00:02:46 :J'ai également ici un fichier que j'ai créé qui s'appelle forms.py qui va contenir donc mon formulaire.Donc ce qu'on va faire en fait, c'est qu'on va utiliser un formulaire qui va hériter de user creation form.
00:02:57 :Donc c'est le formulaire qui nous permet d'avoir la gestion des mots de passe.Donc s'assurer que les deux mots de passe vont être identiques.Sauf qu'on va modifier légèrement ce formulaire puisqu'on va vouloir qu'il utilise notre modèle d'utilisateur personnalisé.
00:03:10 :Donc c'est ce que j'indique ici. Dans la classe meta, je dis que le modèle est égal à custom user.Puisque par défaut, cette classe, si on va l'inspecter, vous allez voir que par défaut, en fait, elle utilise le modèle d'utilisateur de Django.
00:03:30 :Et on va donc lui indiquer que le champ nécessaire dans ce cas-ci, c'est le champ email.Dans fields, on renseigne le champ email puisque là encore, si on va inspecter la classe de base, par défaut, c'est le champ username,donc le nom d'utilisateur qui est utilisé.
00:03:43 :Donc nous, dans notre cas, ce qu'on veut, c'est utiliser à la place le champ pour l'email.Donc je vais pouvoir ensuite créer ce formulaire à l'intérieur de ma vue.
00:03:50 :Donc pour l'instant, on va juste faire form égal, et alors je ne me souviens plus comment je l'ai appelé, user registration form.Donc on va l'importer déjà. On va faire from account.forms import user registration form.
00:04:02 :Donc je crée une instance de ce formulaire, et je vais le passer ici à mon template dans le contexte.Donc on va créer une clé form qui va être égale à notre variable form ici,et on va afficher à l'intérieur ici d'un formulaire, donc à l'intérieur d'un formulaire html, notre formulaire que l'on envoie depuis la vue.
00:04:20 :Donc je vais dire que la méthode, ça va être post.Ici, on n'oublie pas de mettre le csrf token.Et ensuite, on va inclure le formulaire avec des paragraphes, donc as p.
00:04:32 :Et on va terminer avec un bouton de type submit, donc un input submit,qui va me permettre d'avoir un bouton qui va me permettre de soumettre ce formulaire tout simplement.
00:04:41 :Donc s'inscrire, et voilà c'est tout. Normalement, on a fermé notre formulaire.Et donc on va aller voir ce que ça donne tout de suite.Normalement, j'ai tout ce qu'il faut. J'ai l'url qui redirige vers signup, qu'il faut que j'importe ici bien entendu.
00:04:53 :Donc on a cette url ici qui va rediriger vers signup.Dans signup, on crée une instance de notre formulaire ici.Ce formulaire, c'est donc le formulaire que l'on a légèrement personnalisé pour qu'il utilise notre modèle custom user,et sur lequel on a donc indiqué qu'on allait utiliser le field, donc le champ de l'email à la place du champ username.
00:05:12 :Donc je vais lancer mon serveur, j'ouvre mon terminal ici.Je vais faire donc python manage.py run server.Ça fonctionne, je viens ici, j'actualise ma page, et là on a donc bien notre formulaire qui est affiché.
00:05:24 :On retrouve donc le champ pour l'email et le champ pour les mots de passe,donc le mot de passe et la confirmation du mot de passe,avec toutes les indications ici qui sont automatiquement ajoutées grâce à ce user creation form.
00:05:36 :Donc là, je vais pouvoir créer un compte.Alors pour l'instant, je ne vais pas pouvoir le créer,mais je peux au moins mettre quelque chose ici et vous montrer ce que ça va faire.
00:05:43 :Donc là, si je mets des informations ici, je clique sur s'inscrire.On a bien le formulaire qui est envoyé, mais pour l'instant on ne traite pas les informations.
00:05:50 :Donc il va falloir les traiter à l'intérieur de ma vue ici.Donc ça va être assez simple, c'est exactement la même chose que quand on crée un formulairepour n'importe quel autre type d'informations.
00:05:59 :Là dans ce cas-ci, c'est juste qu'on va créer un utilisateur.Donc on va vérifier si la requête est de type post,en faisant if request.method égale à post.
00:06:08 :Si c'est le cas, on va donc créer notre formulaire.Donc je vais copier cette ligne ici et on va lui passer les données du formulairequi sont récupérées donc dans request.post.
00:06:16 :On va ensuite vérifier si le formulaire est valide.Donc if form.isvalid, on va sauvegarder le formulaire tout simplementet on va retourner une redirection dans ce cas-ci vers notre vue home.
00:06:27 :Donc la vue ici qui est définie juste au-dessus, qui est donc là dans mon fichier d'URL.On a ici la vue de home qui est tout simplement à la racine de mon site.
00:06:36 :Donc si je reviens dans views, il faut que j'importe redirect.Donc là encore, je vais utiliser PyCharm avec la petite ampouleet on importe à partir de django.shortcut.
00:06:45 :Donc ici l'import est effectué au début du fichier.Donc si le formulaire est valide, on va rediriger tout simplement vers cette vueet si on n'a pas une requête de type post, ça veut dire qu'on a une requête de type getet qu'on va tout simplement afficher le formulaire avec aucune information à l'intérieur.
00:07:00 :Donc normalement, c'est tout ce qu'on a besoin de faire.On vérifie si notre requête est de type post, on crée notre formulaire.S'il est valide, on le sauvegarde et donc le fait de sauvegarder ce formulaire iciet si vous voulez voir les vérifications qui sont effectuées sur ce formulaire,
00:07:12 :on peut là encore aller voir dans cette classe, donc UserCreationForm,puisque c'est une classe qui hérite de ModelForm, donc un formulaire lié à un modèle.
00:07:20 :Et dans ce cas-ci, on va descendre un petit peu et on voit qu'on a bien par exemplecette méthode qui va s'assurer que les mots de passe sont identiques.
00:07:27 :Donc je reviens dans ma vue, j'actualise, donc je vais rentrer un e-mail, test-at-docstring.fr.Si je mets des mots de passe qui ne correspondent pas, on aura bien les erreurs qui vont s'afficher.
00:07:38 :Donc je clique sur m'inscrire et là ça m'affiche, les deux mots de passe ne correspondent pas.Et si j'essaie de mettre un mot de passe qui correspond, je clique sur s'inscrireet là on est bien redirigé vers la vue d'accueil.
00:07:48 :Et si je vais voir ma base de données avec TablePlus, donc là je double-clic sur cette base de donnéesqui correspond à la base de données de mon projet.
00:07:55 :J'ai bien ici ma table accounts custom user et on a bien notre utilisateur, donc test-at-docstring.fravec le mot de passe qui est correctement encodé ici.
00:08:03 :Maintenant on pourrait vouloir donc rajouter un champ pour le zip code,puisqu'on a le champ ici, zip code, donc le code postal, et on aimerait bien pouvoir le rajouterpour que dans notre formulaire ici il soit affiché.
00:08:14 :Donc là c'est très très simple, on a vraiment très peu de choses à changer,la seule chose qu'on a besoin de changer ici c'est notre formulaire.
00:08:19 :Donc là encore c'est vraiment le fonctionnement de Django,on n'a pas de trucs qui sont spécifiques au modèle d'utilisateur,là c'est vraiment si vous avez déjà créé des formulaires avec Django,donc si ce n'est pas le cas je vous conseille d'aller voir la formation sur les formulaires.
00:08:32 :Eh bien si vous avez déjà créé des formulaires avec Django, il n'y a rien qui devrait vous étonner ici,on fait juste rajouter des champs à afficher dans notre formulaire, dans le fichier HTML,puisque là ici on affiche notre formulaire au complet.
00:08:44 :Donc si je reviens ici, j'actualise, j'ai bien donc l'email, le zip code,qui va donc me permettre de rentrer le code postal et on aura bien la limite de 5 caractères,puisque c'est à partir de notre champ dans le modèle,donc à partir de ce champ là ici que le formulaire a été créé,
00:08:59 :et là on a une max length qui est égale à 5.Donc si j'essaie de rentrer plus que 5 nombres, vous voyez que ce n'est pas possible.
00:09:05 :Donc je vais recréer un compte ici, hello addoctring,on va mettre 1, 2, 3, 4, 5 pour le zip code, un mot de passe,alors je vais juste m'assurer qu'il est assez long,je clique sur s'inscrire, donc là les mots de passe ne correspondent pas,donc j'ai dû me tromper, je reclique sur s'inscrire,
00:09:22 :là donc ça semble avoir bien marché,et on va aller voir dans TablePlus si le zip code a bien été enregistré.Donc de retour dans TablePlus, j'actualise avec commande R,on a bien un deuxième utilisateur ici, donc hello addoctring,et le zip code a bien été enregistré.
00:09:36 :Donc vous voyez qu'à partir de ça, à partir de ce formulaire qu'on a,et donc de tous les liens qu'on a fait entre le fichier d'URL,la vue, notre formulaire et le modèle,si on souhaite rajouter des informations dans notre utilisateur,il suffit donc de rajouter un champ dans notre modèle ici,
00:09:52 :donc rajouter un champ pour le modèle d'utilisateur,s'assurer que ce champ est bien présent ici dans notre formulairequi va être utilisé pour qu'un utilisateur crée un compte sur notre site,et ensuite tout sera automatiquement affiché dans notre fichier HTMLet créé dans notre base de données.
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.