English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
myapp/forms.py
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 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())
Wie oben zu sehen ist, kann das Feldtyp mit dem Parameter "widget" in HTML gerendert werden; in unserem Beispiel möchten wir das Passwort verstecken und es nicht anzeigen. In unserem Beispiel möchten wir das Passwort verstecken, ohne es anzuzeigen. Der Datums-Eingabefeld ist ein DateInput, das CheckboxInput ein Kasten zum Ankreuzen usw.
Formulare in der Ansicht verwenden
Es gibt zwei HTTP-Anfragen, die GET und POST sind. In Django ist es eine Eigenschaft des Anfrageobjekts, das "Methode" genannt wird, durch die der Typ der Anfrage festgelegt wird, und alle Daten, die durch POST übermittelt werden, können über das Dictionary request.POST abgerufen werden.
Lassen Sie uns in "myapp/views.py erstellen eine Login-Ansicht -
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 2020-08-08 #-*- coding: utf-8 -*- from myapp.forms import LoginForm def login(request): username = "not logged in" if request.method == "POST": #Get the posted form MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] else: MyLoginForm = Loginform() return render(request, 'loggedin.html', {"username" : username})
Diese Ansicht zeigt die Ergebnisse des Logins in "loggedin.html" an. Um sie zu testen, benötigen wir zunächst das Login-Formular-Template. Lassen Sie es uns "login.html" nennen:
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 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>
Die Vorlage zeigt ein Login-Formular an und veröffentlicht die Ergebnisse unserer obigen Login-Ansicht. Sie haben möglicherweise bemerkt, dass das Template, dies ist nur ein Tag, um CSRF-Attacken (Cross-Site Request Forgery) auf Ihrer Website zu verhindern.
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 2020-08-08 {% csrf_token %}
Nachdem wir die Login-Vorlage haben, müssen wir sicherstellen, dass das Formular verarbeitet und die loggedin.html-Vorlage angezeigt wird.
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 2020-08-08 <html> <body> Sie sind : <strong>{{username}}</strong> </body> </html>
Nun müssen wir nur die URLs hinzufügen, um mit myapp zu beginnen:/urls.py
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 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'))
Wenn auf"/myapp/"Verbindung", erhalten wir die login.html-Vorlage, die wie folgt angezeigt wird -
Nachdem das obige Formular eingereicht wurde, ist das Format gültig. In unserem Beispiel müssen unbedingt zwei Felder ausgefüllt werden, um folgendes Ergebnis zu erhalten -
Wenn Ihr Benutzername polo ist und wenn Sie Ihr Passwort vergessen haben, erhalten Sie folgende Nachricht -
mit unserer eigenen Formularvalidierung
Im obigen Beispiel wird das Formular validiert -
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 2020-08-08 MyLoginForm.is_valid()
Wir verwenden nur den Django-Formularvalidierungsmotor, um sicherzustellen, dass dieses Feld obligatorisch ist. Lassen Sie uns nun versuchen, sicherzustellen, dass der versuchende Benutzer in unserer Datenbank als Dreamreal-Treiber existiert. Für dies, ändern wir myapp/forms.py für -
# Datei : example.py # Copyright: 2020 Durch w3codebox # Autor durch: de.oldtoolbag.com # Datum: 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("Der Benutzer existiert nicht in unserer Datenbank!") return username
Nun, nach dem Aufruf der Methode „is_valid“ erhalten wir die richtige Ausgabe, nur wenn der Benutzer in unserer Datenbank ist. Wenn Sie die Formularfelder abfragen möchten, genügt es, eine Methode mit dem Präfix „clean_“ hinzuzufügen, die dem Feldnamen der Formularklasse entspricht. Es ist wichtig, eine Fehlermeldung von „forms.ValidationError“ auszulösen.