- 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
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
Gabriel Trouvé
31 janvier 2023 - 31 janvier 2023 à 15:20
checkConversation résolue
3 réponses
récupérer les données de mon formulaire dans la vue
Bonjour,Je suis en train de regarder le chapitre Récupérer les données dans la vue.Pour moi mon formulaire est valide mais quand je regarde dans mon terminal le form.cleaned_data ne se …
00:00:00 :Dans cette partie, on va voir comment récupérer les données que l'on envoie avec notre formulairedans notre vue signup dans laquelle on crée notre formulaire.
00:00:09 :Actuellement, dans cette vue, on crée un formulaire qui est vide et on le passe à notre vue.Quand on se rend à l'adresse signup ici, on a un formulaire vide qu'on nous demande de remplir.
00:00:19 :Ici, si je mets un pseudo, une adresse mail, un mot de passe et que je laisse ça ici,par exemple je peux choisir quelque chose d'autre, laisser le CGU Accept coché,je clique sur m'inscrire et là vous voyez qu'on a quelque chose qui se passe,c'est que déjà le formulaire est vidé, donc ça c'est normal puisqu'en fait on retourne sur notre vue signup
00:00:36 :et donc on a un nouveau formulaire qui est vide, mais en plus si vous regardez l'adresse,on a toutes les informations qui ont été transmises dans le formulaire qui sont affichées dans l'adresse.
00:00:45 :Donc ça c'est parce qu'en fait dans notre formulaire ici, on n'a pas spécifié la méthodeet par défaut il va utiliser la méthode get.Et la méthode get, ça va envoyer ces informations dans l'URL directement.
00:00:55 :Donc vous conviendrez que ce n'est pas très très sécuritaire puisque là par exemple,on voit le mot de passe qui est affiché en clair dans l'URL.
00:01:02 :Donc si par exemple vous aviez un log ou des fichiers qui vous permettraient d'avoir accès à ces URLsur votre serveur, et bien vous aurez les mots de passe qui seraient affichés en clair.
00:01:11 :Donc généralement c'est une très mauvaise façon de faire, on ne passe pas par la méthode getpour soumettre un formulaire, en plus si vous envoyez des données sensibles comme celle-ci,à la place on va passer par la méthode post.
00:01:22 :Et la méthode post, ça va nous permettre de ne pas avoir ces informations affichées directement dans l'URL.Et en plus donc là, vous voyez qu'on n'a en fait pas récupéré les données,puisque les données elles sont dans l'URL, et pour l'instant on n'y a accès nulle part.
00:01:35 :Donc ce qu'on va faire, c'est qu'on va déjà spécifier la méthode ici,donc on va dire méthode égal, et on va dire qu'on veut envoyer avec la méthode postau lieu de la méthode get qui est la méthode par défaut.
00:01:44 :Donc je mets post ici, à noter que ce n'est pas obligé de le mettre en majuscule,vous pouvez le mettre en minuscule, mais généralement on le met en majuscule.
00:01:50 :Donc voilà méthode égal post, ça va me permettre de spécifier que je veux envoyer ce formulaire avec la méthode post.Donc si je remets un pseudo ici, et que je soumets le formulaire,vous allez voir que cette fois-ci le formulaire est soumis,et alors là je vais juste actualiser puisqu'il a remis le formulaire avec la méthode get,
00:02:07 :donc je pense que c'est juste un problème d'actualisation du template.Et donc là je vais mettre un pseudo, un email, un password,et là vous allez voir quelque chose, on va avoir une erreur, donc je clique sur m'inscrire,et là on a une erreur qui nous dit que la vérification CSRF a échoué.
00:02:24 :Donc le CSRF, qu'est-ce que ça signifie ?Ça signifie Cross Site Request Forgery,donc c'est un mot un peu barbare tout ça pour dire en fait que c'est un type d'attaquequi est une vulnérabilité sur certains sites web,puisque ça va permettre en fait à un utilisateur malveillant de falsifier la requête qui a été effectuée avec votre formulaire.
00:02:44 :Donc en fait Django a un mécanisme qui va permettre d'éviter ça en utilisant un jeton uniquequi va être envoyé avec le formulaire,et qui va permettre d'authentifier que le formulaire a bien été envoyé par la bonne personneet n'a pas été modifié en chemin.
00:03:00 :Donc ce que je peux faire ici pour ne plus avoir cette erreuret pour avoir beaucoup plus de sécurité lors de l'envoi de mon formulaire,c'est utiliser une balise que vous devez mettre donc partout dans tous vos formulaires,sinon vous allez de base avoir cette erreur.
00:03:12 :Donc il y a moyen de dire à Django que vous ne voulez pas utiliser ce CSRF token,mais je vous conseille de laisser ça comme ça à moins de vraiment savoir ce que vous faites.
00:03:20 :Il est préférable de laisser ce processus en placeet de simplement rajouter donc ici la balise qui nous permet d'envoyer le CSRF token.Donc la balise vous l'avez ici, elle est indiquée,donc on peut la copier tout simplement,et cette balise elle est comme pour toutes les balises du langage de gabarit de Django,
00:03:36 :entourée donc des accolades avec les pourcentages au début et à la fin.Donc ça, ça va nous permettre d'envoyer un jeton automatiquement.Vous allez voir, je vais actualiser la page et je vais faire View Page Sourceet vous allez voir que maintenant on a un nouveau input ici qui est hidden,
00:03:49 :donc qui n'est pas affiché et qui s'appelle donc CSRF middleware tokenavec une valeur ici qui va être envoyée avec notre formulaireet c'est ça qui va permettre à Django de certifier que le formulaire a bien été envoyé directementet n'a pas été modifié.
00:04:04 :Donc si je reviens ici et que j'essaie de relancer donc la submission de mon formulaire,vous allez voir que cette fois-ci ça va fonctionner.Donc je mets un mot de passe, je clique sur s'inscrireet là vous voyez qu'on a bien le formulaire qui a été envoyé,on n'a pas les données qui sont incluses dans l'URL,
00:04:18 :donc ça c'est normal puisqu'on est avec une méthode post cette fois-ci.Et donc maintenant ce qu'on va faire c'est récupérer ces données qui sont envoyéesà l'intérieur de notre vue ici.
00:04:26 :Donc dans la vue, dans Sign Up, on va pouvoir vérifierquel est le type de méthode qui est effectuée par la requête.Donc pour ça on va pouvoir utiliser request.method
00:04:35 :et donc ça, ça va nous retourner soit la chaîne de caractère postsi on est avec une méthode post, soit la chaîne de caractère getdans le cas d'une requête get.
00:04:44 :Donc ici ce qu'on va pouvoir faire c'est vérifier si on est en présence d'une requête post.Donc on va faire tout simplement une structure conditionnelleet on va dire que si la requête est de type post,et bien on va afficher pour l'instant les données qui sont envoyéesdans cette variable ici request.post
00:04:59 :qui est tout simplement un dictionnaire qui va contenir les donnéesqui sont envoyées avec la requête post.Donc pour l'instant je vais juste faire ça.
00:05:06 :On va afficher ici donc l'onglet run qui va nous permettre de voirce qui est affiché par le serveur.Donc là vous voyez qu'on avait notre vue forbidden avec le csrf.com
00:05:14 :qui était missing.Donc là ce que je vais faire c'est juste revenir dans ma vue,actualiser et relancer un formulaire.Donc je remets des indications ici.
00:05:23 :Je soumets le formulaire et cette fois-ci vous allez voirqu'on a bien notre dictionnaire qui est affiché.Donc un query dict et là vous voyez qu'on a un dictionnaireavec ce fameux csrf middleware token.
00:05:33 :Donc il est affiché mais vous n'avez pas besoin de vous en soucier.C'est vraiment Django qui va automatiquement faire la vérificationde son côté.Par contre si je continue ici vous voyez qu'on a le pseudo,l'email, le mot de passe, le job et le cgu accept.
00:05:46 :Et vous remarquez ici qu'on a donc un dictionnaireavec des clés et des valeurs et également que pour l'instantces données ne sont pas forcément dans le bon format.
00:05:54 :Par exemple le cgu accept qui est un champ booléen,et bien ça nous retourne une valeur on.Donc en fait cette valeur c'est la valeur que l'on va retrouverau niveau du html.
00:06:03 :Si je reviens dans mon fichier, que je fais un clic droitpour voir le fichier source, on va voir ici qu'on a un inputde type checkbox et le input de type checkboxil va nous retourner la valeur on ou off.
00:06:15 :Donc ça c'est pas très pratique puisque en fait nous ce qu'on aimeraitbien avoir à la place de on ou off c'est un booléen,donc true ou false.
00:06:22 :Donc ici je pourrais récupérer cette valeur en faisant un getpour récupérer la valeur associée à la clé puisque post icic'est un dictionnaire.Donc si je fais ça, que j'actualise mon formulaireet que je ressoumets des données, vous allez voir ici qu'on va bienrécupérer notre on qui est pour l'instant une chaîne de caractère.
00:06:38 :Donc là ce serait un peu problématique de devoir vérifierpar exemple ici si on est bien en présence de on avec un symboled'égalité et là dans ce cas-ci ça nous retournerait un booléendonc true ou false si on a on ou pas ici dans la chaîne de caractère.
00:06:50 :Donc ça c'est possible mais ce n'est pas la meilleure façon de faire.La meilleure façon de faire c'est de passer directement par notre formulaireet ça c'est encore un mécanisme très puissant de Django,c'est-à-dire qu'on va pouvoir passer ces données directementà notre formulaire qui va nous permettre automatiquement
00:07:03 :de vérifier déjà si les données sont valideset également ça va nous permettre de récupérer ces donnéesde façon nettoyée, donc je dis nettoyée parce que le termeen anglais qui est utilisé c'est cleaned,donc en fait c'est des données qui vont être convertiessi vous voulez dans le bon type.
00:07:16 :Donc par exemple pour un champ qui est de type booléen fieldici comme on avait donc le cguaccept qui est un booléen field,une fois qu'on va récupérer ces données nettoyéeset qu'on sera sûr qu'elles soient valides,et bien automatiquement on va récupérer un booléen.
00:07:29 :Donc je vais vous montrer ce que ça donne,ce qu'on va faire c'est qu'on va dire form égale sign up formet cette fois-ci on va passer request.post.
00:07:35 :Donc on va passer le dictionnaire, si vous vous souvenez bienen fait quand on crée un formulaire on peut lui passer directementdes données dans un dictionnaire, donc on peut initialiser des donnéeset les passer à ce formulaire, donc là c'est exactement ce qu'on faiten passant directement notre dictionnaire request.post
00:07:48 :à notre formulaire que l'on instancie.Donc là ce que je vais pouvoir faire ensuitec'est vérifier si le formulaire est valide,donc en faisant if form.isvalid
00:07:57 :et si les données sont valides je vais pouvoir les afficheravec clean data.Donc ça attention vous ne pouvez le faireque si vous avez utilisé isvalid avant.
00:08:05 :Si vous essayez d'accéder à clean datasans avoir vérifié auparavant si elles étaient validesça ne fonctionnera pas.C'est vraiment parce que vous appelez cette méthode ici isvalidque le formulaire va vérifier si les données sont valideset qu'il va ensuite vous retourner ce dictionnaireavec les données nettoyées,
00:08:22 :donc les données vous allez voir qui vont être dans le bon format.Donc une fois qu'on a fait ça on va retourner ici sur notre siteon va actualiser la page et on va relancer un formulairedonc je remets des données ici au hasardje clique sur s'inscrire et là vous allez voir cette fois ci si on va en bas
00:08:36 :qu'on a bien nos données qui sont affichéesdonc là ça veut dire que le formulaire a été validéon a bien le pseudo avec type h, le email, le passwordet là vous voyez que cette fois ci le cgu accept est égal à truedonc ça c'est ce que je vous disais c'est vraiment ce nettoyage des données
00:08:50 :qui fait qu'on va avoir automatiquement les donnéesqui vont être converties dans le bon typedonc ça c'est vraiment très pratiqueça vous permet d'éviter d'avoir à faire des conversionsentre ce que le html nous retournedonc comme on avait vu avec le html qui nous retournaitla chaîne de caractère on dans le cas d'une checkbox
00:09:05 :là en passant par le formulaire on a directement un boulet.Donc voilà comment récupérer ces donnéesvous remarquez par la même occasion que pour l'instanten fait le formulaire que l'on a une fois qu'on a soumis ces donnéesil est vide donc ça c'est normal puisqueici on vérifie si la méthode est post
00:09:21 :on récupère le formulaire et on fait tout simplement un affichage des donnéesmais ensuite on recrée un formulaire videet c'est ce formulaire que l'on passe à notre contextedonc ce qu'on pourrait faire à la place c'est mettre un elseet mettre notre formulaire dans le elsedonc si on est en présence d'une méthode post
00:09:36 :on récupère un formulaire avec formon affiche les données pour par exemple les traiterou les sauvegarder quelque partet ensuite donc notre formulaire c'est celui-cic'est celui avec les données qui va être envoyé à notre vuedonc là ça va nous permettre d'avoir un formulairequi va toujours avoir les données
00:09:52 :donc je vais actualiser la page et là je vais vous montreren fait pourquoi ça peut être intéressantpuisque par exemple imaginez que je mette quelque chose icije mets test at gmail.com
00:10:00 :je mets un mot de passe et imaginez que icion fasse des vérifications et on considère quele formulaire ne contient pas les bonnes donnéessi je mets s'inscrire ici donc si je clique sur s'inscrirelà vous voyez qu'on retourne sur la pageet on a encore les données
00:10:14 :on a juste le mot de passe qui a été effacéça c'est normal c'est un comportement par défautavec les champs de type passworden html en fait quand vous actualisez la pagele mot de passe va être effacédonc ça c'est normal mais tout le reste vous voyez
00:10:26 :il a été conservédonc c'est très pratique de passer par çapuisque si jamais vous considérez que le formulairen'est pas valide et que vous souhaitezque l'utilisateur rentre d'autres donnéesvous pouvez lui permettre de ne pas avoirà retaper toutes les entrées dans le formulaireà chaque fois
00:10:40 :ce qu'on pourrait faire également ici c'est quesi le formulaire est valide et bien on retourneautre chose donc on ne retourne pas la pagesign up mais par exemple on retourneun http response en disantmerci de vous être inscrit au sitedonc là bien sûr on mettrait quelque chose
00:10:54 :d'un peu plus intéressant par exemple on pourraitretourner un autre template avec une pagequi dit que vous avez bien été inscrit sur le sitepour l'instant je retourne juste ça pour l'exempledonc là vous allez voir que si je soumets quelque chosede valide on va donc passer dans cette condition
00:11:06 :et on va retourner le http responsedonc je clique sur s'inscrire et là j'ai bience http response qui m'est retournédonc voilà comment récupérerdes données du formulaire en mettantici donc la méthode égaleà post en mettant lecsrf token ensuiteà l'intérieur de notre vue et bien on passe
00:11:24 :les données qui sont récupérées dans le request.postà notre formulaire et on peut ensuiteles valider et afficher les donnéesnettoyées pour ensuite pouvoir les traiterdonc par exemple pour sauvegarder un modèledans notre base de données ou quoi que ce soitde ce genre. Une dernière chose à vous
00:11:38 :signaler ici on a mis méthode égaleà post on n'a pas mis l'actiondonc l'action en fait c'est là où va redirigerle formulaire donc par exemple si je mettaisgoogle ici et bien on seraitredirigé vers google lorsque l'on cliquesur le bouton submit. Si on ne met pas l'action
00:11:52 :par défaut on va être redirigévers cette vue sign up dans laquelle j'avaismon formulaire mais vous pouvez très bienspécifier l'action donc ça ça peut être pratiquesi vous souhaitez envoyer le formulairedans une autre vue donc si vous voulez vérifier les donnéesnon pas dans cette vue sign up directement mais dans
00:12:06 :une autre vue qui soit spécifique pourla vérification de votre formulaire et deces données et bien vous pourriez spécifieravec action ici une autre pageet là généralement on utiliserait donc la baliseurl qui nous permettrait de renvoyerdynamiquement vers une url qui seraitcalculée automatiquement en fonction de ce qu'on a mis dans
00:12:22 :notre fichier urls.pyDonc voilà comment récupérer desdonnées avec les formulaires de DjangoDonc ça fait beaucoup d'informations n'hésitez pasà tester de votre côté il y a pas mal de chosesqu'il ne faut pas oublier comme le csrf tokenla méthode et ensuite bien comprendreici ce qu'on fait avec notre structure conditionnelle
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.