So verwenden Sie die Django-Formularvalidierung in Python
1. django fürmFormularvalidierung Einführung
Manchmal müssen wir get, post, put usw. verwenden, um einige Daten an das Hintergrundverarbeitungsbeispiel auf der Front-End-HTML-Seite zu senden;
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Form</title> </head> <body> <p> <form action="url" method="post" enctype="multipart/form-data">{% csrf_token %} <input type="text" name="username"/> <input type="password" name="password"/> <input type="submit" value="submit"/> </form> </p> </body>
Front -Ende-Übermittlung und Hintergrunderfassung:
from django.shortcuts import render,HttpResponse,redirect from app01 import models def Login(request): if request.method == "POST": username = request.POST.get("username") password = request.POST.get("password") return HttpResponse("Hello,%s"%(username))
Damit ist die Grundfunktion abgeschlossen und grundsätzlich einsatzbereit
Wenn die Benutzereingabe jedoch erfolgt Wenn Sie die Anforderungen nicht erfüllen (z. B. die Länge der eingegebenen Daten beträgt 11 Ziffern, die Komplexität des Passworts usw.), gehen die eingegebenen Daten verloren, wenn Sie nach der Übermittlung zurückkehren
Wenn wir alle Daten nach der Eingabe in Ansichten manuell abrufen, ist die Übergabe an die Webseite natürlich möglich, aber sehr unpraktisch, daher bietet Django einfachere und benutzerfreundlichere Formulare zum Lösen einer Reihe von Problemen wie der Verifizierung
Hier muss ich die echte Plug-in-Bibliothek von Django erwähnen. Sie ist sehr leistungsstark, einfach und leicht zu erweitern. Der obige Inhalt stellt nur vor, warum das Formular verwendet werden sollte zum Aufzeichnen der Verwendung von Django-Formularen
2. Formular-Formularüberprüfungsanwendung
Muss in der Django-APP erstellt werden. Ein Modul form.py, der spezifische Inhalt ist wie folgt
class RegisterForm(forms.Form): email = forms.EmailField(required=True, error_messages={'required': "邮箱不能为空"}) password = forms.CharField(max_length=120, min_length=6, required=True, error_messages={'required': "密码不能为空"}) invite_code = forms.CharField(required=True,error_messages={'required': "验证码不能为空"})
Frontend-Seite
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>register</title> </head> <body> <p> <form action="url" method="post" enctype="multipart/form-data"> <input type="text" name="username"/> <input type="password" name="password"/> <input type="text" name="code"/> <input type="submit" value="submit"/> </form> </p> </body>
Backend-Ansichtsverarbeitung
def register(request): if request.method == "POST": f = Reg_Form(request.POST) if f.is_valid(): user = f.cleaned_data["username"] pwd = f.cleaned_data["password"] code = f.cleaned_data["code"] res_code = request.session.get("code", None) result = models.UserInfo.objects.filter(userexact=user,pwdexact=pwd) if code.upper() == res_code.upper() and result: models.UserInfo.objects.filter(userexact=user).update(status=1) request.session["user"] = user return redirect("/home") else: return render(request, "register.html", {"error": f.errors, "form": f})else:return render(request, "register.html")
Reg_Form(request.POST) verwendet die Formularklasse, um die übermittelten Daten zu verarbeiten und die Rechtmäßigkeit der zu überprüfen Daten, die logische Verarbeitung nach is_valid() ist legal, die überprüften Daten werden in den nach der Instanziierung zurückgegebenen clean_data gespeichert,
cleaned_data ist ein Wörterbuchdatenformat, Fehlerinformationen werden im Formular gespeichert. Wenn Sie beispielsweise alle Fehlerinformationen in Ansichten anzeigen möchtendrucken(f.Fehler), wenn Sie nur die Informationen des Benutzers sehen möchten, können Sie
print(form.errors['username'][0])
Wir Sie können die -Vorlage verwenden, um für die Fehlermeldung wieder auf die Startseite zu rendern, zum Beispiel
<form action="/form/" method="POST"> {% csrf_token %} <p class="input-group"> {#接收后台传过来的form对象,自动生成input标签#} {{ form.user }} {#从后台传过来的error是字典,直接{{ error.user.0 }}呈现错误信息#} {#如果后台返回了错误信息,将错误信息放入span标签,在页面显示,否则不显示#} {% if error.username.0 %} <span>{{ error.userusername.0 }}</span> {% endif %} </p> <p class="input-group"> {{ form.password }} {% if error.pwd.0 %} <span>{{ error.password .0 }}</span> {% endif %} </p> <p> <input type="submit" value="提交" /> </p> </form>
3. Selbstgeneriertes Eingabefeld
Formularklasse
class RegisterForm(forms.Form): style = 'form-control input-lg' phone = forms.CharField(widget=forms.TextInput(attrs={'class': style, 'name': 'title'})), required=True, error_messages={'required': ugettext_lazy('*Required')}) code = forms.CharField(widget=forms.NumberInput(attrs={'placeholder': '验证码', 'class': style}), min_length=4, max_length=4, required=True, error_messages={'required': ugettext_lazy('*Required')}) password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '请输入密码', 'class': style}), min_length=6, required=True, error_messages={'required': ugettext_lazy('*Required')})
Ansichten
def register(request): if request.method == "POST": f = RegisterForm(request.POST) if f.is_valid(): user = f.cleaned_data["username"] pwd = f.cleaned_data["password"] code = f.cleaned_data["code"] res_code = request.session.get("CheckCode", None) result = models.UserInfo.objects.filter(userexact=user,pwdexact=pwd) if code.upper() == res_code.upper() and result: models.UserInfo.objects.filter(userexact=user).update(status=1) request.session["user"] = user return redirect("/home") else: return render(request, "login.html", {"error": f.errors, "form": f}) else: return render(request, "login.html", {"error": f.errors, "form": f}) else: # 如果不是post提交数据,就不传参数创建对象,并将对象返回给前台,直接生成input标签,内容为空 f = Log_Form() return render(request, "login.html", {"form": f})
Frontend-Seite
<body> <form action="/form/" method="POST"> {% csrf_token %} <p class="input-group"> {# 接收后台传过来的form对象,自动生成input标签#} {{ form.user }} {# 从后台传过来的error是字典,直接{{ error.user.0 }}呈现错误信息#} {# 如果后台返回了错误信息,将错误信息放入span标签,在页面显示,否则不显示#} <p class="input-group"> {{ form.email }} {% if error.email.0 %} <span>{{ error.email.0 }}</span> {% endif %} </p> <p class="input-group"> {{ form.password }} {% if error.password.0 %} <span>{{ error.password.0 }}</span> {% endif %} </p> <p class="input-group"> {{ form.code }} {% if error.book_type.0 %} <span>{{ error.code.0 }}</span> {% endif %} </p> <p> <input type="submit" value="提交" /> </p> </form> </body> </html>
4. Die Formularvalidierung ist perfekt
docs.djangoproject.com/ en/dev/ref/forms/validation/
Die Reihenfolge der Formularüberprüfung lautet „init“, „clean“, „validate“, „save“
wobei „clean“ und „validate“ nacheinander im Formular aufgerufen werden.is_valid( ) Methode
saubere und andere Schritte. Ausnahme erhalten: Ausnahme Wert: Argument vom Typ „NoneType“ ist nicht iterierbar
Möglicherweise liegt ein bestimmter Feldwert vor „cleaned_data“ sollte eine Liste sein, ist aber eigentlich ein Nullwert.
Vergessen Sie beim Umschreiben der Clean-Methode nicht, clean_data zurückzugeben
Diese Art des Umschreibens kann dazu führen, dass die vom Benutzer übermittelten Daten nach der Erkennung im Formular an den Benutzer zurückgegeben werden Klasse und Ausführung der Logik nach der Verarbeitung der Daten ist keine weitere Verarbeitung und Rückgabe an den Benutzer erforderlich.
Ergänzung:
Viertens Initialisierungsmethoden des Formulars
① Instanziieren Sie oneform(initial={ 'onefield':value})
②Geben Sie einen Anfangswert an, wenn Sie ein Feld definieren oneformfield = forms.CharField(initial=value)
③Schreiben Sie die init()-Methode der Form-Klasse neu: self.fields ['onefield'].initial = value
④Bei der Übergabe des Parameters instanse an form (d. h. oneform(instanse=onemodel_instance)) wird der Die ersten drei Initialisierungsmethoden schlagen alle fehl, auch wenn init neu geschrieben wird. Rufen Sie es zuerst auf. Die init der übergeordneten Klasse verwendet erneut Methode ③, aber sie funktioniert immer noch nicht (nicht sehr cool).
Wenn Sie den Feldwert zu diesem Zeitpunkt neu initialisieren möchten, können Sie nur self.initial['title'] = value in init() verwenden und den Wert direkt dem anfänglichenAttribut< zuweisen 🎜> Wörterbuch der Form-Klasse.
from django import forms class RegisterForm(forms.Form): email = forms.EmailField(required=True, error_messages={'required': "邮箱不能为空"}) password = forms.CharField(max_length=120, min_length=6, required=True, error_messages={'required': "密码不能为空"}) invite_code = forms.CharField(required=True,error_messages={'required': "验证码不能为空"}) def clean(self): # 用户名 try: email = self.cleaned_data['email'] except Exception as e: raise forms.ValidationError(u"注册账号需为邮箱格式") # 验证邮箱 user = User.objects.filter(username=email) if user: # 邮箱已经被注册了 raise forms.ValidationError(u"邮箱已被注册") # 密码 try: password = self.cleaned_data['password'] except Exception as e: print('except: ' + str(e)) raise forms.ValidationError(u"请输入至少6位密码") return self.cleaned_data

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Verwenden Sie Python im Linux -Terminal ...

Fastapi ...
