Les formulaires en django

Article publié le et mis à jour le .

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.