L'Email de Validation de WTForm à l'aide de Fiole
Que je suis une Gourde tutoriel de http://code.tutsplus.com/tutorials/intro-to-flask-adding-a-contact-page--net-28982 et je suis actuellement bloqué sur l'étape de validation:
L'ancienne version était le suivant:
from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField, validators, ValidationError
class ContactForm(Form):
name = TextField("Name", [validators.Required("Please enter your name.")])
email = TextField("Email", [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])
submit = SubmitField("Send")
Lisant les commentaires je me mis à jour à: (a remplacé les validateurs.Nécessaire avec InputRequired)
(same fields)
class ContactForm(Form):
name = TextField("Name", validators=[InputRequired('Please enter your name.')])
email = EmailField("Email", validators=[InputRequired("Please enter your email address.")]), validators.Email("Please enter your email address.")])
submit = SubmitField("Send")
Mon seul problème est que je ne sais pas quoi faire avec les validateurs.E-mail. Le message d'erreur que je reçois est:
NameError: name 'validators' is not defined
J'ai examiné la documentation, peut-être que je n'ai pas plonger assez profond, mais je n'arrive pas à trouver un exemple de l'email de validation.
OriginalL'auteur lost9123193 | 2014-08-15
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
OriginalL'auteur Mehdi Sadeghi
J'ai travaillé par le même tutoriel de mise à jour (je n'avais pas regardé flacon pour un couple d'années).
Le problème est dû yo un changement de Flacon de WTF à la version 0.9. Ici, ils disent:
D'importer directement, forms.py devrait se lire:
Noter que
StringField
remplaceTextField
et queInputRequired
qui est privilégiéeDataRequired
. Il a été question de préférence personnelle pour importer les validateurs directement au-dessus de l'importation de l'ensemble de l'espace de noms. Cela fonctionne aussi:from wtforms import *
et dans la classe de formulaire:name = StringField("Name", [validators.InputRequired("message")
Pendant que votre mise à jour vers la dernière version du Flacon-WTF vous pourriez aussi bien utiliser
validate_on_submit()
dans votre point de vue (comme l'a recommandé ici).OriginalL'auteur cstrutton
La raison de cette erreur est que vous avez probablement importé les validateurs sans espace de noms, à l'aide de
from foo import bar
déclarations d'importation.Pour le rendre un peu plus lisible et de corriger les erreurs de syntaxe dans votre exemple de code:
Cette charge uniquement dans les domaines
TextField
,SubmitField
etEmail
ainsi que seulement leInputRequired
etEmail
validateurs. Puis il suffit de la chaîne de la validateurs dans votrevalidators
argument mot-clé et vous êtes bon pour aller. Ou, comme @Mehdi Sadeghi a souligné dans le code, directement fournir une liste des validateurs comme deuxième argument du champ, dans ce cas, votre champ email ressemblerait à ceci:Noter que par l'importation qu'à ce que vous avez besoin de l'aide de la syntaxe
from foo import bar
vous jetez les modules de l'espace de noms, comme vous l'avez remarqué lorsque vous avez abandonné levalidators.
préfixe. Certains trouvent qu'il est préférable de laisser cet espace de noms, et donc utiliser la notation par points, simplement pour éviter d'éventuelles collisions de noms et de voir tout de suite pour le module qui appartient un objet (sans avoir besoin de regarder en arrière sur les déclarations d'importation).Le choix, comme toujours, est la vôtre!
OriginalL'auteur Timusan
OriginalL'auteur Justin