English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Traitement des formulaires Django

Créer un formulaire Django, c'est comme créer un modèle. Ici, nous devons hériter des champs de propriété de la classe Django. Ajoutons un fichier forms.py dans le dossier myapp pour inclure les formulaires de notre application. Nous allons créer un formulaire de connexion.

myapp/forms.py

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 class LoginForm(forms.Form):
    user = forms.CharField(max_length = 100)
    password = forms.CharField(widget = forms.PasswordInput())

Il est possible d'utiliser le paramètre "widget" pour rendre le champ de type HTML visible; dans notre exemple, nous devons cacher le mot de passe, il ne sera pas affiché. Dans notre exemple, nous devons cacher le mot de passe sans l'afficher. L'entrée de date est DateInput, CheckboxInput est une case à cocher, etc.

Utiliser des formulaires dans les vues

Il y a deux types de requêtes HTTP,分别是GET和POST。Dans Django,une propriété appelée "méthode" est présente dans l'objet de la requête vue, où le type de la requête est défini, et toutes les données transmises par POST peuvent être accédées via le dictionnaire request.POST.

Laissons-nous dans myapp/views.py créer une vue de connexion -

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
#-*- coding: utf-8 -*-
 from myapp.forms import LoginForm
 def login(request):
    username = "not logged in"
    if request.method == "POST":
       #Obtenir le formulaire envoyé
       MyLoginForm = LoginForm(request.POST)
       if MyLoginForm.is_valid():
          username = MyLoginForm.cleaned_data['username']
    else:
       MyLoginForm = Loginform()
 
    return render(request, 'loggedin.html', {"username" : username})

Cette vue affichera le résultat du formulaire de connexion sur login.html. Pour le tester, nous devons d'abord avoir le modèle de formulaire de connexion. Appelons-le : login.html。

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
<html>
    <body>
       <form name="form" action="{% url "myapp.views.login" %}" 
          method="POST">{% csrf_token %}
          <div style="max-width:470px;">
             <center> 
                <input type="text" style="margin-left:20%;" 
                   placeholder="Identifiant" name="username" />
             </center>
          </div>
 
          <br>
          <div style="max-width:470px;">
             <center>
                <input type="password" style="margin-left:20%;" 
                   placeholder="password" name="password" />
             </center>
          </div>
 
          <br>
          <div style="max-width:470px;">
             <center> 
                <button style="border:0px; background-color:#4285F4; margin-top:8%;
                   height:35px; width:80%; margin-left:19;" type = "submit" 
                   value = "Login" >
                   <strong>Login</strong>
                </button>
             </center>
          </div>
       </form>
    </body>
 </html>

Le template affichera un formulaire de connexion et publiera les résultats que nous avons vus précédemment. Vous avez peut-être remarqué que le template, c'est juste pour empêcher les attaques CSRF (Cross-Site Request Forgery) sur votre site.

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
{% csrf_token %}

Une fois que nous avons le template de connexion, nous devons présenter le template loggedin.html après le traitement du formulaire.

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
<html>
    <body>
       Vous êtes : <strong>{{username}}</strong>
    </body>
 </html>

Maintenant, nous avons besoin uniquement des URLs pour commencer : myapp/urls.py

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 urlpatterns = patterns('myapp.views',
    url(r'^connection/', TemplateView.as_view(template_name = 'login.html')),
    url(r'^login/', 'login', name = 'login'))

Lors de l'accès à "/myapp/connection" nous obtenons le template login.html affiché comme suit −

Après le soumission du tableau ci-dessus, le format est valide. Dans notre exemple, il est impératif de remplir deux champs, et nous obtenons le résultat suivant −

Si votre nom d'utilisateur est polo et si vous avez oublié votre mot de passe, vous recevrez le message suivant −

Avec notre propre validation de formulaire

Dans l'exemple ci-dessus, la validation du formulaire est −

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
MyLoginForm.is_valid()

Nous utilisons uniquement le moteur de validation de forme de Django, dans l'instance nous nous assurons simplement que ce champ est obligatoire. Maintenant, essayons pour nous assurer que l'utilisateur essayant de se connecter existe dans notre base de données en tant que l'élément Dreamreal. À cet égard, changez myapp/forms.py est pour −

# Fichier : example.py
# Droit d'auteur : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
#-*- coding: utf-8 -*-
 from django import forms
 from myapp.models import Dreamreal
 class LoginForm(forms.Form):
    user = forms.CharField(max_length = 100)
    password = forms.CharField(widget = forms.PasswordInput())
    def clean_message(self):
       username = self.cleaned_data.get("username")
       dbuser = Dreamreal.objects.filter(name = username)
       if not dbuser:
          raise forms.ValidationError("L'utilisateur n'existe pas dans notre base de données !")
       return username

Après l'appel de la méthode "is_valid", nous obtenons la sortie correcte, uniquement si l'utilisateur est dans notre base de données. Si vous souhaitez consulter les champs du formulaire, il suffit d'ajouter une méthode commençant par "clean_" et dont le nom correspond à celui des champs de la classe de formulaire. Il est important de lever une erreur forms.ValidationError.