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