Les formulaires en django
Dans la partie précédente, on a vu l’ORM de django pour récupérer du contenu en base de données pour l’afficher dans un fichier HTML en passant par views
.
Maintenant, nous allons découvrir comment créer un message depuis un fichier HTML pour récupérer ce que l’utilisateur tape sur la page d’index.
Étape 1 : Création du formulaire HTML
Nous devons d’abord créer les éléments en HTML. Rendez-vous sur la page index.html
dans le dossier templates
et créez de quoi récupérer un nouveau message. Commencez par créer une balise HTML <form>
qui aura un attribut action
que nous mettrons à "/"
entre double guillemets, et dans méthode
, nous allons mettre post
.
Dans cette balise <form>
, nous allons créer deux balises <input>
. Pour notre première balise <input>
, nous lui mettrons le type texte
, et il est important de donner des noms aux inputs que nous voulons récupérer avec Django. Donc, nous allons lui donner un attribut name
qui sera content
. Ensuite, nous ferons la deuxième balise <input>
qui sera de type submit
, avec la valeur poster
, donc value="Poster"
. Cela va nous servir de bouton avec le texte “Poster” qui, lorsqu’on clique dessus, valide notre formulaire.
Étape 2 : Gestion des données dans views.py
Maintenant, nous voulons récupérer le contenu du message quelque part pour le sauvegarder en base de données, et c’est encore une fois dans le fichier views
que ça se passe, car ce fichier gère toutes nos requêtes HTML.
Retournez dans views.py
et créons quelque chose de spécifique lorsque nous avons une méthode POST
dans la fonction index
. Nous allons créer une condition en début de fonction pour vérifier si la méthode est POST
. Cela se traduit par :
if request.method == 'POST':
Nous allons d’abord récupérer le content
, le user
, et créer un nouveau message en lui passant content
et user
. Pour récupérer le content
, nous devons le prendre dans request.POST
avec la méthode GET
:
content = request.POST.get('content')
C’est pourquoi je vous ai dit de faire attention à bien ajouter un attribut name
à vos balises <input>
, car content
est le nom que vous avez donné à votre balise dans le formulaire HTML. Ensuite, user
se trouve aussi dans l’objet request
et il est géré par Django, donc nous pouvons faire :
user = request.user
Avant d’écrire la ligne de code pour créer l’objet et le sauvegarder en base de données, vérifions que nous récupérons bien les bonnes valeurs et qu’il n’y a pas d’erreurs. Je vais faire un print
de content
et de user
, puis retourner sur mon navigateur sur la page d’index.
À ce stade, je devrais avoir un formulaire sans style. J’utiliserai pour taper “test” et cliquer sur le bouton. Cependant, j’ai une erreur qui me dit qu’il me manque un token CSRF.
Étape 3 : Ajout du token CSRF
Le token CSRF (Cross-Site Request Forgery) est un mécanisme de sécurité qui permet d’authentifier que la requête provient bien de notre site pour éviter des requêtes externes malveillantes. Pour ajouter ce token en utilisant Django, il suffit que dans notre formulaire, nous ajoutions :
{% csrf_token %}
Maintenant, rafraîchissez la page, tapez de nouveau quelque chose dans votre input texte, et appuyez sur le bouton. Retournez dans votre IDE et dans le terminal, vous devriez voir que Django a bien affiché le contenu de votre balise input texte et votre nom d’utilisateur.
Étape 4 : Sauvegarder le message en base de données
Il ne nous reste plus qu’à sauvegarder les messages en fonction de ce que nous recevons. Pour cela, nous allons de nouveau utiliser l’ORM de Django. Dans le fichier views.py
, supprimons le print
et écrivons :
Message.objects.create(content=content, user=user)
Nous avons déjà utilisé Message.objects
avec les méthodes all
et order_by
, et là, nous utilisons une des manières de créer des objets en base de données avec l’ORM de Django grâce à la méthode create
.
Maintenant, retournons sur le navigateur, rafraîchissons la page d’index, et je vais taper encore un message et appuyer sur mon bouton “Poster”. La page se rafraîchit rapidement, affichant directement mon dernier message en haut de la liste. Si je rafraîchis encore la page, je vois que mon message est bien toujours là, donc il a été correctement sauvegardé en base de données.
Nous pouvons même vérifier que notre message existe en allant dans l’interface d’administration de Django. Pour cela, rendez-vous sur /admin
, puis dans “Messages”, vous verrez que j’ai bien mes messages, dont le dernier message que je viens de créer.
Conclusion
Dans cet article, nous avons vu comment créer un formulaire HTML pour soumettre un message et comment traiter cette soumission dans Django pour sauvegarder le message en base de données.
Et dans la prochaine partie de ce tutoriel, voyons comment configurer et déclarer des urls avec django.
Je m'appelle Thomas, et je code depuis plus de 20 ans. Depuis ma sortie de la première promotion de l'École 42, j'ai conçu et développé des centaines d'applications et de sites web. Sur ce blog, je partage avec vous les stratégies les plus efficaces pour maîtriser l'art de coder et progresser rapidement.