


Comment utiliser la validation de formulaire Django en Python
1. django pourmValidation du formulaire Introduction
Parfois, nous devons utiliser get, post, put, etc. pour soumettre certaines données à l'exemple de traitement en arrière-plan sur la page HTML frontale ;
<!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 -fin de soumission et acquisition d'arrière-plan :
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))
Cela complète la fonction de base et est fondamentalement prêt à être utilisé
Cependant, si la saisie de l'utilisateur le fait. ne respectez pas les exigences (comme un numéro de téléphone portable). La longueur des données saisies est de 11 chiffres, la complexité du mot de passe, etc.), et les données qui ont été saisies seront perdues lorsque vous reviendrez après la soumission
Bien sûr, si nous obtenons manuellement toutes les données après leur saisie dans les vues, les transmettre à la page Web est réalisable, mais c'est très gênant, donc Django fournit des formulaires plus simples et plus faciles à utiliser pour résoudre une série. de problèmes tels que la vérification
. Ici, je dois mentionner la véritable bibliothèque de plug-ins de Django. Elle est très puissante, simple et facile à développer. Le contenu ci-dessus présente uniquement pourquoi le formulaire doit être utilisé. sur l'enregistrement de l'utilisation du formulaire Django
2. Application de vérification du formulaire
Doit être créé dans l'application Django Un module form.py, le contenu spécifique est le suivant
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': "验证码不能为空"})
Page d'accueil
<!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>
Traitement des vues backend
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) utilise la classe de formulaire Pour traiter les données soumises afin de vérifier la légalité du data, le traitement logique après is_valid() est légal, les données vérifiées sont enregistrées dans les cleaning_data renvoyées après l'instanciation,
cleaned_data est un format de données de dictionnaire, Les informations d'erreur sont enregistrées sous forme. Par exemple, si vous souhaitez afficher toutes les informations sur les erreurs dans les vuesimprimer(f.errors), si vous souhaitez uniquement voir les informations de l'utilisateur, vous pouvez
print(form.errors['username'][0])
Nous. peut utiliser le modèle pour afficher vers la page frontale du message d'erreur, par exemple
<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. Zone de saisie auto-générée
Classe de formulaire
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')})
vues
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})
Page frontale
<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. La validation du formulaire est parfaite
docs.djangoproject.com/ fr/dev/ref/forms/validation/
L'ordre d'exécution de la vérification du formulaire est init, clean, validate, save
où clean et validate seront appelés successivement dans le form.is_valid( ) méthode
clean et autres étapes. Exception reçue : Exception Valeur : l'argument de type 'NoneType' n'est pas itérable
Il se peut qu'une certaine valeur de champ soit présente dans. clean_data devrait être une liste, mais il s'agit en fait d'une valeur nulle.
Lors de la réécriture de la méthode clean, n'oubliez pas de renvoyer les données nettoyées
Ce type de réécriture peut faire en sorte que les données soumises par l'utilisateur renvoient les données à l'utilisateur après avoir effectué la détection dans le formulaire classe et effectuer une logique une fois le traitement des données légal, il n'est pas nécessaire d'effectuer un traitement supplémentaire et de revenir à l'utilisateur, ce qui est plus pratique et raisonnable
Supplémentaire :
5. méthodes d'initialisation du formulaire
① Instancier oneform(initial={ 'onefield':value})
②Donner une valeur initiale lors de la définition d'un champ oneformfield = Forms.CharField(initial=value)
③Réécrivez la méthode init() de la classe Form : self.fields ['onefield'].initial = value
④Lorsque vous passez le paramètre instanse au formulaire (c'est-à-dire oneform(instanse=onemodel_instance)), le Les trois premières méthodes d'initialisation échoueront toutes. Même lors de la réécriture de init, appelez-le d'abord. L'initialisation de la classe parent utilise à nouveau la méthode ③, mais cela ne fonctionne toujours pas (pas très cool).
Si vous souhaitez réinitialiser la valeur du champ à ce moment, vous ne pouvez utiliser que self.initial['title'] = value dans init(), et attribuer directement la valeur à l'attribut initial dictionnaire de la classe Form.
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
Ce qui précède est la méthode d'utilisation de la vérification du formulaire Django en Python introduite par l'éditeur. J'espère qu'elle vous sera utile. Si vous avez des questions, veuillez me laisser un message ainsi qu'à l'éditeur. répondra rapidement à tout le monde. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !
Pour plus d'articles sur l'utilisation de la validation de formulaire Django en Python, veuillez faire attention au site Web PHP chinois !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

Utilisation de Python dans Linux Terminal ...

Fastapi ...
